diff --git a/release/smoosic.js b/release/smoosic.js index bf2ab34d..3cbc62f8 100644 --- a/release/smoosic.js +++ b/release/smoosic.js @@ -5169,7 +5169,7 @@ class SuiAudioPlayer { selector.tick = tickIx; let ties = []; const tieIx = '' + staffIx + '-' + measureIndex + '-' + voiceIx; - let tiedNote = false; + const prevMeasureIx = '' + staffIx + '-' + (measureIndex - 1) + '-' + voiceIx; if (smoNote.noteType === 'n' && !smoNote.isHidden()) { ties = staff.getTiesStartingAt(selector); smoNote.pitches.forEach((pitch, pitchIx) => { @@ -5209,7 +5209,13 @@ class SuiAudioPlayer { measureNotes[curTick].push(soundData); }; // If this is continuation of tied note, just change duration - if (this.openTies[tieIx]) { + if (this.openTies[prevMeasureIx]) { + this.openTies[prevMeasureIx].duration += duration; + if (ties.length === 0) { + this.openTies[prevMeasureIx] = null; + } + } + else if (this.openTies[tieIx]) { this.openTies[tieIx].duration += duration; if (ties.length === 0) { this.openTies[tieIx] = null; diff --git a/release/smoosic.js.map b/release/smoosic.js.map index abf2cc13..66953426 100644 --- a/release/smoosic.js.map +++ b/release/smoosic.js.map @@ -1 +1 @@ -{"version":3,"file":"smoosic.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAm+C9B,CAAC;AAGC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB/B,CAAC;AAGK,MAAM,eAAe,GAAG;;;;;;;;;;;;CAY9B,CAAC;AAGK,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC;AAGK,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;CAiBjC,CAAC;;;;;;;;;;;;;;;;ACrjDK,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAm+CjC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACn+CI,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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mB;AAClF,gEAAgE,+BAAmB;AACnF,mEAAmE,+BAAmB;AACtF,8DAA8D,+BAAmB;AACjF;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAwC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,KAAK;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,uEAAuE,gCAAmB;AAC1F,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,gCAAmB;AAClF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,oHAAoH,gBAAgB;AACpI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,gCAAmB;AACjF,sEAAsE,gCAAmB;AACzF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2EAA2E;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;;;AAIjC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,uEAAuE,iCAAmB;AAC1F,8DAA8D,iCAAmB;AACjF,6DAA6D,iCAAmB;AAChF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,kEAAkE,iCAAmB;AACrF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AACrE;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,yBAAyB;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,gEAAgE,iCAAmB;AACnF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2HAA2H,UAAU;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,8DAA8D,iCAAmB;AACjF,mEAAmE,iCAAmB;AACtF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,6DAA6D,iCAAmB;AAChF,wEAAwE,iCAAmB;AAC3F,+DAA+D,iCAAmB;AAClF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,2EAA2E,WAAW;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,uMAAuM,cAAc;AAC1Q,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,qEAAqE,iCAAmB;AACxF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,+DAA+D,iCAAmB;AAClF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uLAAuL;AACzN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F;AACA;AACA;AACA;;;;;;AAMA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,wEAAwE,iCAAmB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,+EAA+E,kCAAmB;AAClG,2EAA2E,kCAAmB;AAC9F,gFAAgF,kCAAmB;AACnG,2EAA2E,kCAAmB;AAC9F,4EAA4E,kCAAmB;AAC/F;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF;AACA;;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,4GAA4G;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,mHAAmH;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG,EAAE,IAAI,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,uFAAuF,MAAM;AAC7F;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,2FAA2F,MAAM;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,WAAW;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8IAA8I;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAmD,GAAG;AACjF;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF,oEAAoE,kCAAmB;AACvF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,+DAA+D,kCAAmB;AAClF,+DAA+D,kCAAmB;AAClF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,yEAAyE,kCAAmB;AAC5F,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,0EAA0E,kCAAmB;AAC7F,2EAA2E,kCAAmB;AAC9F,gEAAgE,kCAAmB;AACnF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,0EAA0E,kCAAmB;AAC7F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,iEAAiE,kCAAmB;AACpF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,iEAAiE,kCAAmB;AACpF,iEAAiE,kCAAmB;AACpF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;;;;;;;;;;;;;;AAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;AAQA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,SAAS;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAA4D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,UAAU;AACtG,iGAAiG,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,6DAA6D,kCAAmB;AAChF,wEAAwE,kCAAmB;AAC3F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA,+EAA+E,+BAA+B;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4fAA4f;AAC1iB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,UAAU;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,eAAe;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,UAAU;AACvH;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,cAAc;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,IAAI,UAAU;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,KAAK,IAAI,UAAU;AAC/H;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA,wGAAwG,MAAM,IAAI,MAAM;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,2BAA2B;AACxJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,8HAA8H;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,8EAA8E;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,0BAA0B;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,6DAA6D,kCAAmB;AAChF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0BAA0B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,QAAQ;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,sEAAsE,kCAAmB;AACzF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF;AACA;;;;;;;;;;;;;;;;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,4SAA4S;AACnV,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wJAAwJ;AACvL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8HAA8H,UAAU;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,uBAAuB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8HAA8H,IAAI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8OAA8O,kBAAkB;AAChQ;AACA;AACA;AACA;AACA,gPAAgP,mBAAmB;AACnQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,kBAAkB;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,6GAA6G;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;;;;AAIrC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA,4HAA4H,UAAU;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,UAAU;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,qBAAqB;AAC9I;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,uEAAuE;AACpF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gJAAgJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,uJAAuJ,eAAe;AACtK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,mJAAmJ,QAAQ;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,QAAQ;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,SAAS;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAA6C,KAAK,mDAAmD,GAAG;AAC7H;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF;;;AAGA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,kFAAkF;AACxK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,sBAAsB;AACvH;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,sBAAsB;AAC7K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF,iCAAiC;AACjC;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,sEAAsE,kCAAmB;AACzF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA,4GAA4G,SAAS;AACrH;AACA;AACA;AACA;AACA,gHAAgH,SAAS;AACzH;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yBAAyB;AAC7D;AACA,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS;AACnE,uCAAuC,SAAS,cAAc,6EAA6E;AAC3I,wBAAwB,cAAc;AACtC,qGAAqG,0CAA0C;AAC/I;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,aAAa;AAC7H;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,yBAAyB,GAAG,UAAU;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0HAA0H,QAAQ;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iEAAiE,GAAG,OAAO;AAC7F;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;AAG7B,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAmB;AAClC,eAAe,kCAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iGAAiG;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,kCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,gBAAgB,kCAAmB,wBAAwB,kCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA,IAAI,0BAAmB;AACvB;AACA;AACA;AACA;AACA;AACA,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,4EAA4E,kCAAmB;AAC/F,6EAA6E,kCAAmB;AAChG,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;;;AAGA,CAAC;;AAED,0BAAmB,GAAG,0BAAmB;AACzC,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;AACD;;;;;;UCznnCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA,+FAA+F;AAC/F,0CAA0C;AAC1C,4BAA4B;AAC5B,oBAAoB;AACoC;AAChB;AACO;AACE;AACM;AACjB;AACS;AAChB;AACM;AAC4B;AAChB;AACE;AACuC;AAClC;AACC;AACF;AACI;AACE;AACZ;AACI;AACF;AACF;AACE;AACiB;AACjB;AACE;AACwB;AACZ;AACjE,mBAAmB;AAMa;AAEhC,uBAAuB;AACvB,UAAU;AAC2C;AACY;AACgC;AAClC;AACF;AACE;AACM;AAChB;AACgB;AACC;AACP;AACE;AACR;AACU;AACN;AAAyD;AACrD;AACZ;AACmB;AACN;AACL;AACF;AACG;AACK;AACJ;AACA;AACJ;AAIgB;AACvE,oBAAoB;AAC0E;AACH;AACN;AACA;AACR;AACQ;AACf;AACG;AACZ;AAItB;AACqB;AACM;AACS;AACZ;AAEM;AACD;AACxE,QAAQ;AAC4C;AACL;AACE;AACD;AACi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","sources":["webpack://Smo/webpack/universalModuleDefinition","webpack://Smo/./src/application/application.ts","webpack://Smo/./src/application/common.ts","webpack://Smo/./src/application/configuration.ts","webpack://Smo/./src/application/dom.ts","webpack://Smo/./src/application/eventHandler.ts","webpack://Smo/./src/application/generateVexTests.ts","webpack://Smo/./src/application/keyCommands.ts","webpack://Smo/./src/common/htmlHelpers.ts","webpack://Smo/./src/common/midiWriter.js","webpack://Smo/./src/common/promiseHelpers.ts","webpack://Smo/./src/common/serializationHelpers.js","webpack://Smo/./src/common/textformatter.ts","webpack://Smo/./src/common/vex.ts","webpack://Smo/./src/render/audio/musicCursor.ts","webpack://Smo/./src/render/audio/oscillator.ts","webpack://Smo/./src/render/audio/player.ts","webpack://Smo/./src/render/audio/samples.ts","webpack://Smo/./src/render/sui/formatter.ts","webpack://Smo/./src/render/sui/layoutDebug.ts","webpack://Smo/./src/render/sui/mapper.ts","webpack://Smo/./src/render/sui/piano.ts","webpack://Smo/./src/render/sui/renderState.ts","webpack://Smo/./src/render/sui/scoreRender.ts","webpack://Smo/./src/render/sui/scoreView.ts","webpack://Smo/./src/render/sui/scoreViewOperations.ts","webpack://Smo/./src/render/sui/scroller.ts","webpack://Smo/./src/render/sui/svgHelpers.ts","webpack://Smo/./src/render/sui/svgPageMap.ts","webpack://Smo/./src/render/sui/textEdit.ts","webpack://Smo/./src/render/sui/textRender.ts","webpack://Smo/./src/render/sui/tracker.ts","webpack://Smo/./src/render/vex/glyphDimensions.ts","webpack://Smo/./src/render/vex/smoAdapter.ts","webpack://Smo/./src/render/vex/toVex.ts","webpack://Smo/./src/render/vex/vxMeasure.ts","webpack://Smo/./src/render/vex/vxSystem.ts","webpack://Smo/./src/smo/data/common.ts","webpack://Smo/./src/smo/data/measure.ts","webpack://Smo/./src/smo/data/measureModifiers.ts","webpack://Smo/./src/smo/data/music.ts","webpack://Smo/./src/smo/data/note.ts","webpack://Smo/./src/smo/data/noteModifiers.ts","webpack://Smo/./src/smo/data/partInfo.ts","webpack://Smo/./src/smo/data/score.ts","webpack://Smo/./src/smo/data/scoreModifiers.ts","webpack://Smo/./src/smo/data/scoreText.ts","webpack://Smo/./src/smo/data/staffModifiers.ts","webpack://Smo/./src/smo/data/systemStaff.ts","webpack://Smo/./src/smo/data/tuplet.ts","webpack://Smo/./src/smo/midi/midiToSmo.ts","webpack://Smo/./src/smo/midi/smoToMidi.ts","webpack://Smo/./src/smo/mxml/smoToXml.ts","webpack://Smo/./src/smo/mxml/xmlHelpers.ts","webpack://Smo/./src/smo/mxml/xmlState.ts","webpack://Smo/./src/smo/mxml/xmlToSmo.ts","webpack://Smo/./src/smo/xform/audioTrack.ts","webpack://Smo/./src/smo/xform/beamers.ts","webpack://Smo/./src/smo/xform/copypaste.ts","webpack://Smo/./src/smo/xform/operations.ts","webpack://Smo/./src/smo/xform/selections.ts","webpack://Smo/./src/smo/xform/tickDuration.ts","webpack://Smo/./src/smo/xform/tickMap.ts","webpack://Smo/./src/smo/xform/undo.ts","webpack://Smo/./src/styles/font_metrics/Commissioner-Medium-Metrics.js","webpack://Smo/./src/styles/font_metrics/ConcertOne-Regular.js","webpack://Smo/./src/styles/font_metrics/Merriweather-Regular.js","webpack://Smo/./src/styles/font_metrics/arial_metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-sans-metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-serif-metrics.js","webpack://Smo/./src/styles/font_metrics/times_metrics.js","webpack://Smo/./src/ui/buttons/articulation.ts","webpack://Smo/./src/ui/buttons/beam.ts","webpack://Smo/./src/ui/buttons/button.ts","webpack://Smo/./src/ui/buttons/chord.ts","webpack://Smo/./src/ui/buttons/collapsable.ts","webpack://Smo/./src/ui/buttons/display.ts","webpack://Smo/./src/ui/buttons/duration.ts","webpack://Smo/./src/ui/buttons/measure.ts","webpack://Smo/./src/ui/buttons/microtone.ts","webpack://Smo/./src/ui/buttons/navigation.ts","webpack://Smo/./src/ui/buttons/note.ts","webpack://Smo/./src/ui/buttons/player.ts","webpack://Smo/./src/ui/buttons/ribbon.ts","webpack://Smo/./src/ui/buttons/stave.ts","webpack://Smo/./src/ui/buttons/text.ts","webpack://Smo/./src/ui/buttons/voice.ts","webpack://Smo/./src/ui/dialogs/adapter.ts","webpack://Smo/./src/ui/dialogs/addMeasure.ts","webpack://Smo/./src/ui/dialogs/arpeggio.ts","webpack://Smo/./src/ui/dialogs/audioSettings.ts","webpack://Smo/./src/ui/dialogs/chordChange.ts","webpack://Smo/./src/ui/dialogs/components/baseComponent.ts","webpack://Smo/./src/ui/dialogs/components/button.ts","webpack://Smo/./src/ui/dialogs/components/checkdrop.ts","webpack://Smo/./src/ui/dialogs/components/dragText.ts","webpack://Smo/./src/ui/dialogs/components/dropdown.ts","webpack://Smo/./src/ui/dialogs/components/fileDownload.ts","webpack://Smo/./src/ui/dialogs/components/fontComponent.ts","webpack://Smo/./src/ui/dialogs/components/noteText.ts","webpack://Smo/./src/ui/dialogs/components/rocker.ts","webpack://Smo/./src/ui/dialogs/components/staffComponents.ts","webpack://Smo/./src/ui/dialogs/components/textCheck.ts","webpack://Smo/./src/ui/dialogs/components/textInPlace.ts","webpack://Smo/./src/ui/dialogs/components/textInput.ts","webpack://Smo/./src/ui/dialogs/components/tie.ts","webpack://Smo/./src/ui/dialogs/components/toggle.ts","webpack://Smo/./src/ui/dialogs/components/tree.ts","webpack://Smo/./src/ui/dialogs/dialog.ts","webpack://Smo/./src/ui/dialogs/dynamics.ts","webpack://Smo/./src/ui/dialogs/factory.ts","webpack://Smo/./src/ui/dialogs/fileDialogs.ts","webpack://Smo/./src/ui/dialogs/fonts.ts","webpack://Smo/./src/ui/dialogs/globalLayout.ts","webpack://Smo/./src/ui/dialogs/hairpin.ts","webpack://Smo/./src/ui/dialogs/instrument.ts","webpack://Smo/./src/ui/dialogs/library.ts","webpack://Smo/./src/ui/dialogs/lyric.ts","webpack://Smo/./src/ui/dialogs/measureFormat.ts","webpack://Smo/./src/ui/dialogs/newPart.ts","webpack://Smo/./src/ui/dialogs/pageLayout.ts","webpack://Smo/./src/ui/dialogs/partInfo.ts","webpack://Smo/./src/ui/dialogs/preferences.ts","webpack://Smo/./src/ui/dialogs/scoreId.ts","webpack://Smo/./src/ui/dialogs/scoreView.ts","webpack://Smo/./src/ui/dialogs/slur.ts","webpack://Smo/./src/ui/dialogs/staffGroup.ts","webpack://Smo/./src/ui/dialogs/tempo.ts","webpack://Smo/./src/ui/dialogs/textBlock.ts","webpack://Smo/./src/ui/dialogs/textBracket.ts","webpack://Smo/./src/ui/dialogs/tie.ts","webpack://Smo/./src/ui/dialogs/timeSignature.ts","webpack://Smo/./src/ui/dialogs/transposeScore.ts","webpack://Smo/./src/ui/dialogs/volta.ts","webpack://Smo/./src/ui/eventSource.ts","webpack://Smo/./src/ui/exceptions.ts","webpack://Smo/./src/ui/fileio/fileInput.ts","webpack://Smo/./src/ui/fileio/library.ts","webpack://Smo/./src/ui/fileio/xhrLoader.ts","webpack://Smo/./src/ui/help.ts","webpack://Smo/./src/ui/i18n/language.ts","webpack://Smo/./src/ui/i18n/language_ar.js","webpack://Smo/./src/ui/i18n/language_de.js","webpack://Smo/./src/ui/i18n/language_en.js","webpack://Smo/./src/ui/i18n/translationEditor.ts","webpack://Smo/./src/ui/keyBindings/default/editorKeys.ts","webpack://Smo/./src/ui/keyBindings/default/trackerKeys.ts","webpack://Smo/./src/ui/menus/dynamics.ts","webpack://Smo/./src/ui/menus/file.ts","webpack://Smo/./src/ui/menus/keySignature.ts","webpack://Smo/./src/ui/menus/language.ts","webpack://Smo/./src/ui/menus/manager.ts","webpack://Smo/./src/ui/menus/measure.ts","webpack://Smo/./src/ui/menus/menu.ts","webpack://Smo/./src/ui/menus/note.ts","webpack://Smo/./src/ui/menus/partSelection.ts","webpack://Smo/./src/ui/menus/parts.ts","webpack://Smo/./src/ui/menus/score.ts","webpack://Smo/./src/ui/menus/staffModifier.ts","webpack://Smo/./src/ui/menus/timeSignature.ts","webpack://Smo/./src/ui/qwerty.ts","webpack://Smo/./src/ui/ribbonLayout/default/defaultRibbon.ts","webpack://Smo/./src/ui/ribbonLayout/default/tabletRibbon.ts","webpack://Smo/./tests/file-load.ts","webpack://Smo/./node_modules/vexflow_smoosic/build/cjs/vexflow-debug.js","webpack://Smo/webpack/bootstrap","webpack://Smo/webpack/runtime/compat get default export","webpack://Smo/webpack/runtime/define property getters","webpack://Smo/webpack/runtime/hasOwnProperty shorthand","webpack://Smo/webpack/runtime/make namespace object","webpack://Smo/./src/application/exports.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Smo\"] = factory();\n\telse\n\t\troot[\"Smo\"] = factory();\n})(this, () => {\nreturn ","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../common/serializationHelpers';\r\nimport { _MidiWriter } from '../common/midiWriter';\r\n\r\nimport { SmoConfiguration, SmoConfigurationParams } from './configuration';\r\nimport { SmoScore } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SuiRenderState } from '../render/sui/renderState';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiOscillator } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\n\r\nimport { ArialFont } from '../styles/font_metrics/arial_metrics';\r\nimport { TimesFont } from '../styles/font_metrics/times_metrics';\r\nimport { Commissioner_MediumFont } from '../styles/font_metrics/Commissioner-Medium-Metrics';\r\nimport { Concert_OneFont } from '../styles/font_metrics/ConcertOne-Regular';\r\nimport { MerriweatherFont } from '../styles/font_metrics/Merriweather-Regular';\r\nimport { SourceSansProFont } from '../styles/font_metrics/ssp-sans-metrics';\r\nimport { SourceSerifProFont } from '../styles/font_metrics/ssp-serif-metrics';\r\n\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoTranslator } from '../ui/i18n/language';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\nimport { SuiDom } from './dom';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { KeyBinding, ModalEventHandlerProxy } from './common';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { getDomContainer } from '../common/htmlHelpers';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { VexFlow } from '../common/vex';\r\nimport { TextFormatter } from '../common/textformatter';\r\n\r\ndeclare var $: any;\r\n\r\ninterface pairType { [key: string]: string }\r\n\r\n/**\r\n * Score renderer instance\r\n * @internal\r\n */\r\nexport interface SuiRendererInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n renderer: SuiRenderState;\r\n}\r\n/**\r\n * Global instance for debugging\r\n */\r\nexport interface SuiInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n tracker: SuiTracker;\r\n keyCommands: SuiKeyCommands;\r\n menus: SuiMenuManager;\r\n eventHandler: SuiEventHandler;\r\n ribbon: RibbonButtons\r\n}\r\nconst VF = VexFlow;\r\n\r\n/**\r\n * Parse query string for application\r\n * @category AppUtil\r\n */\r\nexport class QueryParser {\r\n pairs: pairType[] = [];\r\n queryPair(str: string): pairType {\r\n var i = 0;\r\n const ar = str.split('=');\r\n const rv: pairType = {};\r\n for (i = 0; i < ar.length - 1; i += 2) {\r\n const name = decodeURIComponent(ar[i]);\r\n rv[name] = decodeURIComponent(ar[i + 1]);\r\n }\r\n return rv;\r\n }\r\n constructor() {\r\n let i: number = 0;\r\n if (window.location.search) {\r\n const cmd = window.location.search.substring(1, window.location.search.length);\r\n const cmds = cmd.split('&');\r\n for (i = 0; i < cmds.length; ++i) {\r\n const cmd = cmds[i];\r\n this.pairs.push(this.queryPair(cmd));\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** SuiApplication\r\n * main entry point of application. Based on the configuration,\r\n * either start the default UI, or initialize library mode and\r\n * await further instructions.\r\n * @category SuiApplication\r\n */\r\nexport class SuiApplication {\r\n scoreLibrary: any;\r\n instance: SuiInstance | null = null;\r\n config: SmoConfiguration;\r\n score: SmoScore | null = null;\r\n view: SuiScoreViewOperations | null = null;\r\n domElement: HTMLElement;\r\n static async configure(params: Partial): Promise {\r\n const config: SmoConfiguration = new SmoConfiguration(params);\r\n (window as any).SmoConfig = config;\r\n const application = new SuiApplication(config);\r\n SuiApplication.registerFonts();\r\n return application.initialize();\r\n }\r\n constructor(config: SmoConfiguration) {\r\n this.config = config;\r\n this.domElement = this._getDomContainer();\r\n }\r\n _getDomContainer(): HTMLElement {\r\n const el = getDomContainer(this.config.scoreDomContainer);\r\n if (typeof(el) === 'undefined') {\r\n throw 'scoreDomContainer is a required config parameter';\r\n }\r\n return el;\r\n }\r\n static instance: SuiInstance;\r\n /** \r\n // Different applications can create their own key bindings, these are the defaults.\r\n // Many editor commands can be reached by a single keystroke. For more advanced things there\r\n // are menus.\r\n */\r\n static get keyBindingDefaults(): KeyBinding[] {\r\n var editorKeys = SuiEventHandler.editorKeyBindingDefaults;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n var trackerKeys = SuiEventHandler.trackerKeyBindingDefaults;\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return trackerKeys.concat(editorKeys);\r\n }\r\n /**\r\n * Initialize the library according to instruction in config object:\r\n * 1. Try to load a new score\r\n * 2. If in application mode, start the UI. If in translation mode, start translation\r\n * @returns \r\n */\r\n initialize(): Promise {\r\n const samplePromise: Promise = SuiSampleMedia.samplePromise(SuiOscillator.audio);\r\n\r\n const self = this; \r\n // Hide header at the top of some applications\r\n $('#link-hdr button').off('click').on('click', () => {\r\n $('#link-hdr').addClass('hide');\r\n });\r\n\r\n const createScore = (): Promise => {\r\n return self.createScore();\r\n }\r\n const startApplication = () => {\r\n if (self.config.mode === 'translate') {\r\n self._startApplication();\r\n }\r\n else if (self.config.mode === 'application') {\r\n self._startApplication();\r\n } else { // library mode.\r\n self.createView(self.score!);\r\n }\r\n }\r\n const render = () => {\r\n return self.view?.renderer.renderPromise();\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n samplePromise.then(createScore).then(startApplication).then(render)\r\n .then(\r\n () => {\r\n resolve(self);\r\n });\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Create the initial score we use to populate the UI etc:\r\n * 0. if translation mode, return empty promise, it won't be used anyway\r\n * 1. if remoteScore is set in config, try to load from remote\r\n * 2. if initialScore is set, use that\r\n * 3. if a score is saved locally with quick save (browser local cache), use that\r\n * 4. if all else fails, return an 'empty' score.\r\n * @returns promise for a remote load. If a local load, will resolve immediately\r\n */\r\n async createScore(): Promise {\r\n if (this.config.mode === 'translate') {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n if (this.config.remoteScore) {\r\n const loader = new SuiXhrLoader(this.config.remoteScore);\r\n const file = await loader.loadAsync();\r\n this.score = this._tryParse(file as string);\r\n return this.score;\r\n } else if (this.config.initialScore) {\r\n if (typeof(this.config.initialScore) === 'string') {\r\n this.score = this._tryParse(this.config.initialScore);\r\n return (this.score);\r\n } else {\r\n this.score = this.config.initialScore;\r\n return null;\r\n }\r\n } else {\r\n const localScore = localStorage.getItem(smoSerialize.localScore);\r\n if (localScore) {\r\n this.score = this._tryParse(localScore);\r\n } else {\r\n this.score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n if (this.config.mode === 'application') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n }\r\n return this.score;\r\n }\r\n _tryParse(scoreJson: string) {\r\n try {\r\n if (scoreJson[0] === '<') {\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(scoreJson, 'text/xml');\r\n return XmlToSmo.convert(xml);\r\n }\r\n return SmoScore.deserialize(scoreJson);\r\n } catch (exp) {\r\n console.warn('could not parse score');\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n _startApplication() {\r\n // Initialize the midi writer library\r\n _MidiWriter();\r\n const queryString = new QueryParser();\r\n const languageSelect = queryString.pairs.find((x) => x['language']) ?? {'language': 'en'}\r\n if (this.config.mode === 'translate') {\r\n this._deferCreateTranslator();\r\n return;\r\n }\r\n if (languageSelect) {\r\n SuiApplication._deferLanguageSelection(languageSelect.language);\r\n }\r\n this.createUi();\r\n }\r\n createView(score: SmoScore): SuiRendererInstance | null {\r\n let sdc: HTMLElement = this.domElement;\r\n const svgContainer = document.createElement('div');\r\n $(svgContainer).attr('id', 'boo').addClass('musicContainer');\r\n $(sdc).append(svgContainer);\r\n const undoBuffer = new UndoBuffer();\r\n const view = new SuiScoreViewOperations(this.config, svgContainer, score, sdc as HTMLElement, undoBuffer);\r\n const eventSource = new BrowserEventSource();\r\n eventSource.setRenderElement(svgContainer);\r\n this.view = view;\r\n view.startRenderingEngine();\r\n return {\r\n view, eventSource, undoBuffer, renderer: view.renderer\r\n };\r\n }\r\n /**\r\n * Convenience constructor, take the score and render it in the\r\n * configured rendering space.\r\n */\r\n createUi() {\r\n const viewObj: SuiRendererInstance | null = this.createView(this.score!);\r\n if (!viewObj) {\r\n return;\r\n }\r\n const view = this.view!;\r\n const tracker = view.tracker;\r\n const eventSource = new BrowserEventSource(); // events come from the browser UI.\r\n const undoBuffer = viewObj.undoBuffer;\r\n const completeNotifier = new ModalEventHandlerProxy(eventSource);\r\n const menus = new SuiMenuManager({\r\n view, eventSource, completeNotifier, undoBuffer\r\n });\r\n const ribbon = new RibbonButtons({\r\n config: this.config,\r\n ribbons: this.config.ribbonLayout,\r\n ribbonButtons: this.config.buttonDefinition,\r\n menus: menus,\r\n completeNotifier,\r\n view: view,\r\n eventSource: eventSource,\r\n tracker: view.tracker\r\n });\r\n const keyCommands = new SuiKeyCommands ({\r\n view, slashMode: true, completeNotifier, tracker, eventSource\r\n });\r\n const eventHandler = new SuiEventHandler({\r\n view, eventSource, tracker, keyCommands, menus, completeNotifier,\r\n keyBindings: SuiApplication.keyBindingDefaults, config: this.config\r\n });\r\n this.instance = {\r\n view, eventSource, eventHandler, undoBuffer,\r\n tracker, ribbon, keyCommands, menus\r\n }\r\n SuiApplication.instance = this.instance;\r\n completeNotifier.handler = eventHandler;\r\n eventSource.setRenderElement(view.renderer.elementId);\r\n // eslint-disable-next-line\r\n SuiApplication.instance = this.instance;\r\n ribbon.display();\r\n SuiDom.splash(this.config);\r\n }\r\n static async loadMusicFont(face: string, url: string) {\r\n const new_font = new FontFace('Bravura', `url(${url})`);\r\n const loadedFace = await new_font.load();\r\n document.fonts.add(loadedFace); \r\n }\r\n static async registerFonts() {\r\n TextFormatter.registerInfo({\r\n name: ArialFont.name,\r\n resolution: ArialFont.resolution,\r\n glyphs: ArialFont.glyphs,\r\n family: ArialFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in sans font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: TimesFont.name,\r\n resolution: TimesFont.resolution,\r\n glyphs: TimesFont.glyphs,\r\n family: TimesFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in serif font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Commissioner_MediumFont.name,\r\n resolution: Commissioner_MediumFont.resolution,\r\n glyphs: Commissioner_MediumFont.glyphs,\r\n family: Commissioner_MediumFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Low-contrast sans-serif text font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Concert_OneFont.name,\r\n resolution: Concert_OneFont.resolution,\r\n glyphs: Concert_OneFont.glyphs,\r\n family: Concert_OneFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Rounded grotesque typeface inspired by 19th century 3D l',\r\n });\r\n TextFormatter.registerInfo({\r\n name: MerriweatherFont.name,\r\n resolution: MerriweatherFont.resolution,\r\n glyphs: MerriweatherFont.glyphs,\r\n family: MerriweatherFont.fontFamily,\r\n serifs: true,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Serif screen font from Sorkin Type',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSansProFont.name,\r\n resolution: SourceSansProFont.resolution,\r\n glyphs: SourceSansProFont.glyphs,\r\n family: SourceSansProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Sans screen font from Adobe',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSerifProFont.name,\r\n resolution: SourceSerifProFont.resolution,\r\n glyphs: SourceSerifProFont.glyphs,\r\n family: SourceSerifProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Serif screen font from Adobe',\r\n });\r\n await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n // await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n }\r\n _deferCreateTranslator() {\r\n SuiDom.createUiDom(this.config.scoreDomContainer);\r\n setTimeout(() => {\r\n SmoTranslationEditor.startEditor(this.config.language);\r\n }, 1);\r\n }\r\n\r\n static _deferLanguageSelection(lang: string) {\r\n setTimeout(() => {\r\n SmoTranslator.setLanguage(lang);\r\n }, 1);\r\n }\r\n}\r\n","import { SuiScoreViewOperations } from \"../render/sui/scoreViewOperations\";\r\nimport { SuiTracker } from \"../render/sui/tracker\";\r\nimport { CompleteNotifier } from \"../ui/common\";\r\nimport { ModalComponent } from \"../ui/common\";\r\nimport { BrowserEventSource, EventHandler } from \"../ui/eventSource\";\r\n\r\n/**\r\n * A binding of a key to some action performed by a module\r\n */\r\nexport interface KeyBinding {\r\n event: string,\r\n key: string,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n shiftKey: boolean,\r\n action: string,\r\n module?: string\r\n}\r\n\r\n/**\r\n * parameters for the key handlers\r\n * @param view\r\n * @param slashMode indicates that the dreaded 'slash' menus are up\r\n * @param completeNotifier notified when modals close\r\n * @param tracker\r\n * @param eventSource register for event handlers\r\n * @category SuiApplication\r\n */\r\nexport interface KeyCommandParams {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n}\r\n\r\n/**\r\n * Shared interface for menus, dialogs, etc that can \r\n * accept UI events\r\n * @category SuiUiBase\r\n */\r\nexport abstract class ModalEventHandler {\r\n abstract mouseMove(ev: any): void;\r\n abstract mouseClick(ev: any): void;\r\n abstract evKey(evdata: any): void;\r\n}\r\nexport type handler = (ev: any) => void;\r\nexport class SimpleEventHandler extends ModalEventHandler {\r\n mouseMoveHandler: handler;;\r\n mouseClickHandler: handler;\r\n evKeyHandler: handler;\r\n constructor(mouseMove: handler, mouseClick: handler, keyHandler: handler) {\r\n super();\r\n this.mouseMoveHandler = mouseMove;\r\n this.mouseClickHandler = mouseClick;\r\n this.evKeyHandler = keyHandler;\r\n }\r\n mouseMove(ev: any) {\r\n this.mouseMove(ev);\r\n }\r\n mouseClick(ev: any) {\r\n this.mouseClick(ev);\r\n }\r\n evKey(ev: any) {\r\n this.evKeyHandler(ev);\r\n }\r\n}\r\n\r\n/**\r\n * Dependency injection, sends events to a proxy object, gets around some \r\n * cyclic dependencies when bootstrapping the application.\r\n * @category AppUtil\r\n */\r\nexport class ModalEventHandlerProxy {\r\n _handler: ModalEventHandler | null = null;\r\n eventSource: BrowserEventSource;\r\n unbound: boolean = true;\r\n keydownHandler: EventHandler | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(evSource: BrowserEventSource) {\r\n this.eventSource = evSource;\r\n this.bindEvents();\r\n }\r\n set handler(value: ModalEventHandler) {\r\n this._handler = value;\r\n this.unbound = false;\r\n }\r\n evKey(ev: any) {\r\n if (this._handler) {\r\n this._handler.evKey(ev);\r\n }\r\n }\r\n mouseMove(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseMove(ev);\r\n }\r\n }\r\n mouseClick(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseClick(ev);\r\n }\r\n }\r\n bindEvents() {\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n\r\n unbindKeyboardForModal(dialog: ModalComponent) {\r\n if (this.unbound) {\r\n console.log('received duplicate bind event');\r\n return;\r\n }\r\n if (!this.keydownHandler || !this.mouseMoveHandler || !this.mouseClickHandler) {\r\n console.log('received bind with no handlers');\r\n return;\r\n }\r\n this.unbound = true;\r\n const rebind = () => {\r\n this.unbound = false;\r\n this.bindEvents();\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler!);\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler!);\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler!);\r\n dialog.closeModalPromise.then(rebind);\r\n }\r\n}","// application/configuration.ts\r\n/**\r\n * Superset of configuration required to initialize Smoosic, either the appliation or library.\r\n * @module configuration\r\n */\r\nimport { SmoRenderConfiguration } from \"../render/sui/configuration\";\r\nimport { SmoScore } from \"../smo/data/score\";\r\nimport { ModalEventHandler } from \"./common\";\r\nimport { KeyBindingConfiguration, SmoUiConfiguration } from \"../ui/configuration\";\r\nimport { defaultEditorKeys } from \"../ui/keyBindings/default/editorKeys\";\r\nimport { defaultTrackerKeys } from \"../ui/keyBindings/default/trackerKeys\";\r\nimport { RibbonLayout } from \"../ui/common\";\r\nimport { ButtonDefinition } from \"../ui/buttons/button\";\r\nimport { defaultRibbonLayout } from '../ui/ribbonLayout/default/defaultRibbon';\r\nimport { SuiAudioAnimationParams, defaultAudioAnimationHandler, defaultClearAudioAnimationHandler, AudioAnimationHandler, ClearAudioAnimationHandler } \r\n from \"../render/audio/musicCursor\";\r\n\r\nexport type SmoMode = 'library' | 'application' | 'translate';\r\nexport type ConfigurationStringOption = 'language' | 'libraryUrl' | 'remoteScore';\r\n\r\nexport type ConfigurationNumberOption = 'demonPollTime' | 'idleRedrawTime';\r\n\r\nexport var ConfigurationStringOptions: ConfigurationStringOption[] = ['language', 'libraryUrl', 'remoteScore'];\r\n\r\nexport var ConfigurationNumberOptions: ConfigurationNumberOption[] = ['demonPollTime', 'idleRedrawTime'];\r\n\r\n/**\r\n * Application configuration parameters, can be referenced by the running application or changed\r\n * @category SuiApplication\r\n */\r\nexport interface SmoConfigurationParams {\r\n mode: SmoMode;\r\n smoPath?: string;\r\n language: string;\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n scoreDomContainer: string | HTMLElement;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number; // how often we poll the score to see if it changed\r\n idleRedrawTime: number;\r\n ribbonLayout?: RibbonLayout;\r\n buttonDefinition?: ButtonDefinition[];\r\n audioAnimation: SuiAudioAnimationParams;\r\n}\r\n\r\n/**\r\n * Configures smoosic library or application. It is a union of UI, rendering and application configuration parameters\r\n * @param mode - score mode `'library' | 'application' | 'translate'`\r\n * Library mode starts the view but not the UI. application mode starts the UI and expects UI parameters.\r\n * translation mode is the translation editor, for creating translations for dialog/menu components\r\n * @param language - startup language\r\n * @param initialScore? - the library score JSON, if you are loading from a JSON string, or a SmoScore object\r\n * @param remoteScore? - path to a remote score, if loading from an URL\r\n * @param scoreDomContainer - the parent of the svg container (required)\r\n * @param leftControls - the location of the vertical button control, applies if mode is 'application'\r\n * @param topControls - the location of the horizontal button control, applies if mode is 'application'\r\n * @param libraryUrl - loader URL for Smo libraries, applies if application mode\r\n * @param demonPollTime - how often we poll the score to see if it's changed\r\n * @param idleRedrawTime - how often the entire score re-renders\r\n * @category SuiApplication\r\n */\r\n export class SmoConfiguration implements SmoRenderConfiguration, SmoUiConfiguration {\r\n mode: SmoMode;\r\n language: string = '';\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n scoreDomContainer: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number = 0; // how often we poll the score to see if it changed\r\n idleRedrawTime: number = 0;\r\n keys?: KeyBindingConfiguration;\r\n eventHandler?: ModalEventHandler;\r\n ribbonLayout: RibbonLayout;\r\n audioAnimation: SuiAudioAnimationParams;\r\n buttonDefinition: ButtonDefinition[];\r\n\r\n static get defaults(): SmoConfiguration {\r\n return {\r\n mode: 'application',\r\n language: 'en',\r\n scoreDomContainer: 'boo',\r\n libraryUrl: 'https://aarondavidnewman.github.io/Smoosic/release/library/links/smoLibrary.json',\r\n demonPollTime: 50, // how often we poll the score to see if it changed\r\n idleRedrawTime: 1000, // maximum time between score modification and render\r\n ribbonLayout: defaultRibbonLayout.ribbons,\r\n buttonDefinition: defaultRibbonLayout.ribbonButtons,\r\n audioAnimation: {\r\n audioAnimationHandler: defaultAudioAnimationHandler,\r\n clearAudioAnimationHandler: defaultClearAudioAnimationHandler\r\n }\r\n };\r\n }\r\n static get keyBindingDefaults(): KeyBindingConfiguration {\r\n const editorKeys = defaultEditorKeys.keys;\r\n const trackerKeys = defaultTrackerKeys.keys;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return { editorKeys, trackerKeys };\r\n }\r\n constructor(params: Partial) {\r\n const defs = SmoConfiguration.defaults;\r\n ConfigurationStringOptions.forEach((param) => {\r\n const sp: string | undefined = params[param] ?? defs[param];\r\n this[param] = sp ?? '';\r\n });\r\n this.scoreDomContainer = params.scoreDomContainer ?? defs.scoreDomContainer;\r\n this.initialScore = params.initialScore ?? undefined;\r\n ConfigurationNumberOptions.forEach((param) => {\r\n this[param] = params[param] ?? defs[param];\r\n });\r\n this.mode = params.mode ?? defs.mode;\r\n if (this.mode === 'application') {\r\n this.leftControls = params.leftControls;\r\n this.topControls = params.topControls;\r\n }\r\n this.ribbonLayout = params.ribbonLayout ? params.ribbonLayout: defaultRibbonLayout.ribbons;\r\n this.buttonDefinition = params.buttonDefinition ? params.buttonDefinition : defaultRibbonLayout.ribbonButtons;\r\n if (!params.ribbonLayout) {\r\n this.ribbonLayout = defaultRibbonLayout.ribbons;\r\n }\r\n if (!params.buttonDefinition) {\r\n this.buttonDefinition = defaultRibbonLayout.ribbonButtons;\r\n }\r\n if (!params.audioAnimation) {\r\n this.audioAnimation = SmoConfiguration.defaults.audioAnimation;\r\n } else {\r\n this.audioAnimation = params.audioAnimation;\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom } from '../common/htmlHelpers';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { SuiPiano } from '../render/sui/piano';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiDom {\r\n static splash(config: SmoConfiguration) {\r\n var b: any = buildDom;\r\n var logoPath = '../styles/images/logo.png';\r\n var r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', logoPath).classes('splash-logo').attr('width', '300px').attr('height', '300px'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('div').classes('splash-div')\r\n .append(b('span').classes('splash-title').text('Sm'))\r\n .append(b('span').classes('splash-shine').text('ooooooooo'))\r\n .append(b('span').classes('splash-title').text('sic')));\r\n $('body').append(r.dom());\r\n $('body').addClass('splashScreen modal');\r\n setTimeout(function () {\r\n $('body').removeClass('splashScreen modal');\r\n }, 1000);\r\n }\r\n\r\n static createUiDom(uiDomContainer: HTMLElement | string | undefined) {\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n if (typeof(uiDomContainer) === 'string') {\r\n uiDomContainer = document.getElementById(uiDomContainer) ?? undefined;\r\n }\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n var b = buildDom;\r\n var r = b('div').classes('dom-container')\r\n .append(b('div').classes('workspace language-dir').attr('dir', 'ltr') \r\n .append(b('div').classes('control-bar')\r\n .append(b('div').classes('titleText').text('Smoosic'))\r\n .append(b('div').classes('piano-container')\r\n .append(b('div').classes('key-left-ctrl'))\r\n .append(b('div').classes('piano-keys'))\r\n .append(b('div').classes('key-right-ctrl')))\r\n .append(b('div').classes('controls-top').attr('id','controls-top')))\r\n .append(b('div').classes('media')\r\n .append(b('div').classes('controls-left').attr('id','controls-left'))\r\n ));\r\n \r\n uiDomContainer.append(r.dom()[0]);\r\n const scrollRegion = document.createElement('div');\r\n $(scrollRegion).attr('id', 'smo-scroll-region').addClass('musicRelief');\r\n $('.dom-container .media').append(scrollRegion);\r\n var pianoDom = $('.piano-keys')[0];\r\n var svg = document.createElementNS(SvgHelpers.namespace, 'svg');\r\n svg.id = 'piano-svg';\r\n svg.setAttributeNS('', 'width', '' + SuiPiano.owidth * SuiPiano.dimensions.octaves);\r\n svg.setAttributeNS('', 'height', '' + SuiPiano.dimensions.wheight);\r\n svg.setAttributeNS('', 'viewBox', '0 0 ' + SuiPiano.owidth * SuiPiano.dimensions.octaves + ' ' + SuiPiano.dimensions.wheight);\r\n pianoDom.appendChild(svg);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { KeyEvent } from '../smo/data/common';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiPiano } from '../render/sui/piano'\r\nimport { SuiHelp } from '../ui/help';\r\nimport { CompleteNotifier, ModalComponent } from '../ui/common';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { defaultEditorKeys } from '../ui/keyBindings/default/editorKeys';\r\nimport { defaultTrackerKeys } from '../ui/keyBindings/default/trackerKeys';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource, EventHandler } from '../ui/eventSource';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { KeyBinding, ModalEventHandler } from './common';\r\nimport { ModifierTab } from '../smo/xform/selections';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { SmoConfiguration } from './configuration';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Handle keyboard/mouse events, and pass them to the renderer and other UI elements.\r\n */\r\nexport interface EventHandlerParams {\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n tracker: SuiTracker,\r\n keyCommands: SuiKeyCommands,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier,\r\n keyBindings: KeyBinding[],\r\n config: SmoConfiguration\r\n}\r\n/**\r\n * this is the default keyboard/mouse handler for smoosic in application mode.\r\n * It diverts key events to tracker or key commmands as appropriate, and mouse events to \r\n * tracker. Modal elements take this control away temporarily.\r\n * \r\n * It also handles some global events such as window resize and scroll of the music region.\r\n * @category SuiApplication\r\n*/\r\nexport class SuiEventHandler implements ModalEventHandler {\r\n static reentry: boolean = false;\r\n static keyboardUi: Qwerty;\r\n static showQwerty() {\r\n SuiEventHandler.keyboardUi = Qwerty;\r\n Qwerty.displayKb();\r\n }\r\n static instance: SuiEventHandler;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n tracker: SuiTracker;\r\n keyBind: KeyBinding[];\r\n completeNotifier: CompleteNotifier;\r\n keyCommands: SuiKeyCommands;\r\n resizing: boolean = false;\r\n undoStatus: number = 0;\r\n trackScrolling: boolean = false;\r\n config: SmoConfiguration;\r\n keyHandlerObj: any = null;\r\n menus: SuiMenuManager;\r\n piano: SuiPiano | null = null;\r\n exhandler: SuiExceptionHandler; \r\n constructor(params: EventHandlerParams) {\r\n SuiEventHandler.instance = this;\r\n\r\n this.view = params.view;\r\n this.config = params.config;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n this.tracker = params.tracker; // needed for key event handling\r\n this.keyBind = params.keyBindings;\r\n this.keyCommands = params.keyCommands;\r\n this.keyCommands.view = this.view;\r\n this.resizing = false;\r\n this.undoStatus = 0;\r\n this.trackScrolling = false;\r\n this.keyHandlerObj = null;\r\n // create global exception instance\r\n this.exhandler = new SuiExceptionHandler(this);\r\n this.bindEvents();\r\n this.bindResize();\r\n this.createPiano();\r\n }\r\n\r\n static get scrollable() {\r\n return '.musicRelief';\r\n }\r\n\r\n handleScrollEvent() {\r\n const self = this;\r\n if (self.trackScrolling) {\r\n return;\r\n }\r\n self.trackScrolling = true;\r\n setTimeout(function () {\r\n try {\r\n // wait until redraw is done to track scroll events.\r\n self.trackScrolling = false;\r\n // Thisi s a WIP...\r\n self.view.tracker.scroller.handleScroll($(SuiEventHandler.scrollable)[0].scrollLeft, $(SuiEventHandler.scrollable)[0].scrollTop);\r\n } catch (e) {\r\n SuiExceptionHandler.instance.exceptionHandler(e);\r\n }\r\n }, 500);\r\n }\r\n\r\n createPiano() {\r\n this.piano = new SuiPiano(this.view);\r\n }\r\n resizeEvent() {\r\n var self = this;\r\n if (this.resizing) {\r\n return;\r\n }\r\n if (!this.piano) {\r\n return;\r\n }\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n this.resizing = true;\r\n setTimeout(function () {\r\n console.log('resizing');\r\n self.resizing = false;\r\n self.piano!.handleResize();\r\n self.view.refreshViewport();\r\n }, 1);\r\n }\r\n\r\n createModifierDialog(modifierSelection: ModifierTab) {\r\n var parameters = {\r\n modifier: modifierSelection.modifier,\r\n view: this.view, eventSource: this.eventSource,\r\n completeNotifier: this.completeNotifier, keyCommands: this.keyCommands, \r\n ctor: '', // filled in by the factory\r\n tracker: this.tracker,\r\n startPromise: null,\r\n id: 'modifier-dialog',\r\n config: this.config\r\n }\r\n return SuiModifierDialogFactory.createModifierDialog(modifierSelection.modifier, parameters);\r\n }\r\n\r\n // If the user has selected a modifier via the mouse/touch, bring up mod dialog\r\n // for that modifier\r\n trackerModifierSelect(ev: KeyEvent) {\r\n var modSelection = this.view.tracker.getSelectedModifier();\r\n if (modSelection) {\r\n var dialog = this.createModifierDialog(modSelection);\r\n if (dialog) {\r\n // this.view.tracker.selectSuggestion(ev);\r\n return;\r\n // this.unbindKeyboardForModal(dialog);\r\n } else {\r\n this.view.tracker.advanceModifierSelection(this.view.score, ev);\r\n }\r\n } else {\r\n this.view.tracker.selectSuggestion(this.view.score, ev);\r\n }\r\n return;\r\n }\r\n\r\n // ### bindResize\r\n // This handles both resizing of the music area (scrolling) and resizing of the window.\r\n // The latter results in a redraw, the former just resets the client/logical map of elements\r\n // in the tracker.\r\n bindResize() {\r\n const self = this;\r\n const el = $(SuiEventHandler.scrollable)[0];\r\n // unit test programs don't have resize html\r\n if (!el) {\r\n return;\r\n }\r\n window.addEventListener('resize', function () {\r\n self.resizeEvent();\r\n });\r\n\r\n let scrollCallback = () => {\r\n self.handleScrollEvent();\r\n };\r\n el.onscroll = scrollCallback;\r\n }\r\n\r\n\r\n // ### renderElement\r\n // return render element that is the DOM parent of the svg\r\n get renderElement() {\r\n return this.view.renderer.renderElement;\r\n }\r\n\r\n // ## editorKeyBindingDefaults\r\n // ## Description:\r\n // execute a simple command on the editor, based on a keystroke.\r\n static get editorKeyBindingDefaults() {\r\n return defaultEditorKeys.keys;\r\n }\r\n\r\n // ## trackerKeyBindingDefaults\r\n // ### Description:\r\n // Key bindings for the tracker. The tracker is the 'cursor' in the music\r\n // that lets you select and edit notes.\r\n static get trackerKeyBindingDefaults() {\r\n return defaultTrackerKeys.keys;\r\n }\r\n helpControls() {\r\n var self = this;\r\n var rebind = function () {\r\n self.bindEvents();\r\n }\r\n }\r\n menuHelp() {\r\n SuiHelp.displayHelp();\r\n }\r\n\r\n evKey(evdata: any) {\r\n if ($('body').hasClass('translation-mode')) {\r\n return;\r\n }\r\n\r\n console.log(\"KeyboardEvent: key='\" + evdata.key + \"' | code='\" +\r\n evdata.code + \"'\"\r\n + \" shift='\" + evdata.shiftKey + \"' control='\" + evdata.ctrlKey + \"'\" + \" alt='\" + evdata.altKey + \"'\");\r\n evdata.preventDefault();\r\n\r\n if (SuiEventHandler.keyboardUi) {\r\n Qwerty.handleKeyEvent(evdata);\r\n }\r\n const dataCopy = SuiTracker.serializeEvent(evdata);\r\n this.view.renderer.updatePromise().then(() => {\r\n if (dataCopy.key == '?') {\r\n SuiHelp.displayHelp();\r\n }\r\n\r\n if (dataCopy.key == '/') {\r\n // set up menu DOM.\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n }\r\n\r\n if (dataCopy.key == 'Enter') {\r\n this.trackerModifierSelect(dataCopy);\r\n }\r\n\r\n var binding: KeyBinding | undefined = this.keyBind.find((ev: KeyBinding) =>\r\n ev.event === 'keydown' && ev.key === dataCopy.key &&\r\n ev.ctrlKey === dataCopy.ctrlKey &&\r\n ev.altKey === dataCopy.altKey && dataCopy.shiftKey === ev.shiftKey);\r\n\r\n if (binding) {\r\n try {\r\n if (binding.module === 'tracker') {\r\n (this.tracker as any)[binding.action](this.view.score, dataCopy);\r\n } else {\r\n (this.keyCommands as any)[binding.action](dataCopy);\r\n }\r\n } catch (e) {\r\n if (typeof (e) === 'string') {\r\n console.error(e);\r\n }\r\n this.exhandler.exceptionHandler(e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n mouseMove(ev: any) {\r\n this.view.tracker.intersectingArtifact(SvgHelpers.smoBox({\r\n x: ev.clientX,\r\n y: ev.clientY\r\n }));\r\n }\r\n\r\n mouseClick(ev: any) {\r\n const dataCopy = SuiTracker.serializeEvent(ev);\r\n this.view.renderer.updatePromise().then(() => {\r\n this.view.tracker.selectSuggestion(this.view.score, dataCopy);\r\n var modifier = this.view.tracker.getSelectedModifier();\r\n if (modifier) {\r\n this.createModifierDialog(modifier);\r\n }\r\n });\r\n }\r\n bindEvents() {\r\n const self = this;\r\n const tracker = this.view.tracker;\r\n $('body').off('forceScrollEvent').on('forceScrollEvent', function () {\r\n self.handleScrollEvent();\r\n });\r\n $('body').off('forceResizeEvent').on('forceResizeEvent', function () {\r\n self.resizeEvent();\r\n });\r\n this.helpControls();\r\n }\r\n}\r\n","import { SuiApplication } from \"./application\";\r\nimport { SmoConfigurationParams } from \"./configuration\";\r\nimport { SmoToVex } from '../render/vex/toVex';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SmoScore } from '../smo/data/score';\r\nexport interface ScoreToRender {\r\n title: string, path: string, pages: number[]\r\n}\r\nconst filesToRender: Record = {\r\n 'PreciousLord': { \r\n title: 'PreciousLord', \r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json',\r\n pages: [0]\r\n }, 'BachWTC': {\r\n title: 'BachWTC',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachWTC-3.json',\r\n pages: [0, 1, 2]\r\n }, 'BachInvention': {\r\n title: 'BachInv1',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachInvention.json',\r\n pages: [1]\r\n }, 'Gnossienne3': {\r\n title: 'Gnossienne3',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Gnossienne3-3.json',\r\n pages: [0, 1]\r\n }, 'GFWMessiah-I-2': {\r\n title: 'GFWMessiah-I-2',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/messiah/Messiah-I-2.json',\r\n pages: [0, 1]\r\n }, 'Joplin': {\r\n title: 'Joplin',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Joplin-Entertainer.json',\r\n pages: [0, 1, 2]\r\n }, 'Plena': {\r\n title: 'Plena',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Plena.json',\r\n pages: [2]\r\n }, 'Postillionlied': {\r\n title: 'Postillion Lied',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Postillionlied.json',\r\n pages: [0, 1, 2]\r\n }, 'Solovey': {\r\n title: 'Solovey',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Solovey.json',\r\n pages: [0, 1]\r\n }, 'Bilongo': {\r\n title: 'Bilongo',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Bilongo-Mandinga.json',\r\n pages: [7]\r\n }, 'Yama': {\r\n title: 'Yama',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/Yama2.json',\r\n pages: [1]\r\n }\r\n};\r\ndeclare var $: any;\r\ndeclare var JSZip: any;\r\nconst addFileLink = (filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') => {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\nexport async function renderVexTests(config: Partial) {\r\n const zipName = 'output.zip';\r\n const zipFile = new JSZip();\r\n const application = await SuiApplication.configure(config);\r\n const view = application.view;\r\n if (!view) {\r\n return;\r\n }\r\n const fileKeys = Object.keys(filesToRender);\r\n for (var i = 0; i < fileKeys.length; ++i) {\r\n const fileInfo = filesToRender[fileKeys[i]];\r\n const path = fileInfo.path;\r\n const loader = new SuiXhrLoader(path);\r\n const scoreJson = await loader.loadAsync();\r\n const score = SmoScore.deserialize(scoreJson as string); \r\n await view.changeScore(score);\r\n fileInfo.pages.forEach((page) => {\r\n const vexText = SmoToVex.convert(view.score, { div: 'smoo', page })\r\n const fileName = `${fileInfo.title}-${page}.js`;\r\n zipFile.file(fileName, vexText); \r\n });\r\n }\r\n const blob = await zipFile.generateAsync({ type: 'blob' });\r\n const element = document.getElementById('remoteLink');\r\n addFileLink(zipName, blob, element);\r\n $('#remoteLink a')[0].click();\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { createAndDisplayDialog } from '../ui/dialogs/dialog';\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SmoArticulation } from '../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { KeyCommandParams } from './common';\r\nimport { CompleteNotifier } from '../ui/common';\r\nimport { PitchLetter, IsPitchLetter, KeyEvent } from '../smo/data/common';\r\n\r\n/**\r\n * KeyCommands object handles key events and converts them into commands, updating the score and\r\n * display\r\n * @category SuiApplication\r\n * */\r\nexport class SuiKeyCommands {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean = false;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n constructor(params: KeyCommandParams) {\r\n this.slashMode = false;\r\n this.view = params.view;\r\n this.tracker = params.view.tracker;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n }\r\n\r\n tempoDialog() {\r\n const tempo = this.tracker.selections[0].measure.getTempo();\r\n createAndDisplayDialog(SuiTempoDialog,\r\n {\r\n id: 'tempoDialog',\r\n ctor: 'SuiTempoDialog',\r\n completeNotifier: this.completeNotifier,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n startPromise: null,\r\n modifier: tempo\r\n }\r\n );\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n undo() {\r\n this.view.undo();\r\n }\r\n\r\n copy() {\r\n this.view.copy();\r\n }\r\n paste() {\r\n this.view.paste();\r\n }\r\n toggleBeamGroup() {\r\n this.view.toggleBeamGroup();\r\n }\r\n\r\n beamSelections() {\r\n this.view.beamSelections();\r\n }\r\n toggleBeamDirection() {\r\n this.view.toggleBeamDirection();\r\n }\r\n\r\n collapseChord() {\r\n this.view.collapseChord();\r\n }\r\n\r\n togglePlayer() {\r\n if (SuiAudioPlayer.playing) {\r\n this.stopPlayer();\r\n } else {\r\n this.playScore();\r\n }\r\n }\r\n playScore() {\r\n this.view.playFromSelection();\r\n }\r\n\r\n stopPlayer() {\r\n this.view.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n intervalAdd(interval: number, direction: number) {\r\n this.view.setInterval(direction * interval);\r\n }\r\n\r\n interval(keyEvent: KeyEvent) {\r\n // code='Digit3'\r\n var interval = parseInt(keyEvent.keyCode, 10) - 49; // 48 === '0', 0 indexed\r\n if (isNaN(interval) || interval < 1 || interval > 7) {\r\n return;\r\n }\r\n this.intervalAdd(interval, keyEvent.shiftKey ? -1 : 1);\r\n }\r\n\r\n transpose(offset: number) {\r\n this.view.transposeSelections(offset);\r\n }\r\n transposeDown() {\r\n this.transpose(-1);\r\n }\r\n transposeUp() {\r\n this.transpose(1);\r\n }\r\n upOctave() {\r\n this.transpose(12);\r\n }\r\n downOctave() {\r\n this.transpose(-12);\r\n }\r\n makeRest() {\r\n this.view.makeRest();\r\n }\r\n\r\n setPitchCommand(letter: PitchLetter) {\r\n this.view.setPitch(letter);\r\n }\r\n\r\n setPitch(keyEvent: KeyEvent) {\r\n const letter = keyEvent.key.toLowerCase();\r\n if (IsPitchLetter(letter)) {\r\n this.setPitchCommand(letter);\r\n }\r\n }\r\n\r\n dotDuration() {\r\n this.view.batchDurationOperation('dotDuration');\r\n }\r\n\r\n undotDuration() {\r\n this.view.batchDurationOperation('undotDuration');\r\n }\r\n\r\n doubleDuration() {\r\n this.view.batchDurationOperation('doubleDuration');\r\n }\r\n\r\n halveDuration() {\r\n this.view.batchDurationOperation('halveDuration');\r\n }\r\n\r\n addMeasure(keyEvent: KeyEvent) {\r\n this.view.addMeasure(keyEvent.shiftKey);\r\n }\r\n deleteNote() {\r\n this.view.deleteNote();\r\n }\r\n\r\n toggleCourtesyAccidental() {\r\n this.view.toggleCourtesyAccidentals();\r\n }\r\n toggleEnharmonic() {\r\n this.view.toggleEnharmonic();\r\n }\r\n\r\n makeTupletCommand(numNotes: number) {\r\n this.view.makeTuplet(numNotes);\r\n }\r\n makeTuplet(keyEvent: KeyEvent) {\r\n const numNotes = parseInt(keyEvent.key, 10);\r\n this.makeTupletCommand(numNotes);\r\n }\r\n\r\n unmakeTuplet() {\r\n this.view.unmakeTuplet();\r\n }\r\n setNoteHead() {\r\n this.view.setNoteHead('x2');\r\n }\r\n removeGraceNote() {\r\n this.view.removeGraceNote();\r\n }\r\n addGraceNote() {\r\n this.view.addGraceNote();\r\n }\r\n slashGraceNotes() {\r\n this.view.slashGraceNotes();\r\n }\r\n\r\n toggleArticulationCommand(articulation: string, ctor: string) {\r\n this.view.toggleArticulation(articulation, ctor);\r\n }\r\n addRemoveAccent() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.accent, 'SmoArticulation');\r\n }\r\n addRemoveTenuto() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.tenuto, 'SmoArticulation');\r\n }\r\n addRemoveStaccato() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.staccato, 'SmoArticulation');\r\n }\r\n addRemoveMarcato() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.marcato, 'SmoArticulation');\r\n }\r\n addRemovePizzicato() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.pizzicato, 'SmoArticulation');\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var $: any;\r\n/**\r\n* returns an object that lets you build a DOM in a somewhat readable way.\r\n* \r\n* ## Usage\r\n* ``` javascript\r\n* var b = buildDom;\r\n* var r =\r\n* b('tr').classes('jsSharingMember').data('entitykey', key).data('name', name).data('entitytype', entityType).append(\r\n* b('td').classes('noSideBorderRight').append(\r\n* ...\r\n* $(parent).append(r.dom());\r\n* ``` \r\n* Don't forget the '.dom()' ! That is the actual jquery element object\r\n* @returns \r\n**/\r\nexport class DomBuilder {\r\n e: any;\r\n constructor(el: any) {\r\n this.e = $('<' + el + '/>');\r\n }\r\n classes(cl: any) {\r\n $(this.e).addClass(cl);\r\n return this;\r\n }\r\n html(value: any) {\r\n $(this.e).html(value);\r\n return this;\r\n }\r\n data(name: string, value: string) {\r\n $(this.e).attr('data-' + name, value);\r\n return this;\r\n }\r\n attr(name: string, value: string) {\r\n $(this.e).attr(name, value);\r\n return this;\r\n }\r\n prop(name: string, value: boolean) {\r\n $(this.e).prop(name, value);\r\n return this;\r\n }\r\n css(name: string, value: string) {\r\n $(this.e).css(name, value);\r\n return this;\r\n }\r\n append(el: any) {\r\n $(this.e).append(el.e);\r\n return this;\r\n }\r\n text(tx: any) {\r\n $(this.e).append(document.createTextNode(tx));\r\n return this;\r\n }\r\n dom() {\r\n return this.e;\r\n }\r\n}\r\n\r\nexport function buildDom(e: any) {\r\n return new DomBuilder(e);\r\n}\r\n\r\nexport function focusableElements(): string[] {\r\n return ['a', 'input', 'select', 'textarea', 'button', 'li[tabindex]', 'div[tabindex]'];\r\n}\r\n\r\nexport function addFileLink(filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\n\r\nexport class InputTrapper {\r\n selector: any;\r\n parent: any;\r\n id: any;\r\n parentId: any;\r\n modalInputs: any[];\r\n disabledInputs: any[];\r\n siblingInputs: any[];\r\n constructor(selector: any) {\r\n this.selector = selector;\r\n this.modalInputs = [];\r\n this.disabledInputs = [];\r\n this.siblingInputs = [];\r\n this.parent = $(this.selector);\r\n this.id = $(this.parent).attr('id');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n var idstr = Math.round(Math.random() * (999999 - 1) + 1);\r\n if (!this.id) {\r\n $(this.parent).attr('id', idstr + '-element');\r\n this.id = $(this.parent).attr('id');\r\n }\r\n if (!this.parentId) {\r\n $(this.parent).parent().attr('id', idstr + '-parent');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n }\r\n\r\n }\r\n trap(this: any) {\r\n // aria-hide peers of dialog and peers of parent that are not the parent.\r\n var peers = $(this.parent).parent().children().toArray();\r\n\r\n peers.forEach((node: any) => {\r\n var ptag: any = $(node)[0].tagName;\r\n if (ptag === 'SCRIPT' || ptag === 'LINK' || ptag === 'STYLE') {\r\n ;\r\n } else if ($(node).attr('id') === this.parentId ||\r\n $(node).attr('id') === this.id || \r\n $(node).hasClass('helpDialog')) { // help dialog can be shown with modal dialog\r\n ;\r\n } else {\r\n var hidden = $(node).attr('aria-hidden');\r\n if (!hidden || hidden != 'true') {\r\n $(node).attr('aria-hidden', 'true');\r\n this.siblingInputs.push(node);\r\n }\r\n }\r\n });\r\n focusableElements().forEach((etype) => {\r\n var elements = $(etype).toArray();\r\n\r\n elements.forEach((element: any) => {\r\n var tagName = $(element)[0].tagName;\r\n if ($(element).attr('id') === this.id) {\r\n ;\r\n } else if ($(element).closest('.helpDialog').length) {\r\n ;\r\n } else if ($(element).prop('disabled')) {\r\n ;\r\n } else if ($(element).hasClass('hide')) {\r\n ;\r\n } else if ($(element).closest(this.selector).length) {\r\n // inside\r\n this.modalInputs.push(element);\r\n } else if ((tagName === 'A' || tagName === 'DIV' || tagName === 'LI') && $(element).attr('tabIndex') === '-1') {\r\n ;\r\n } else {\r\n this.disabledInputs.push(element);\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '-1');\r\n } else {\r\n $(element).prop('disabled', true);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n close() {\r\n this.disabledInputs.forEach(function (element: any) {\r\n var tagName = $(element)[0].tagName;\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '0');\r\n } else {\r\n $(element).prop('disabled', false);\r\n }\r\n });\r\n this.siblingInputs.forEach((el: any) => {\r\n $(el).removeAttr('aria-hidden');\r\n });\r\n } \r\n}\r\nexport function closeDialogPromise(): Promise {\r\n return new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', function () {\r\n resolve();\r\n });\r\n });\r\n}\r\n/**\r\n * Extract an HTMLElement from a Jquery id, DOM element ID, or HTMLELement. If\r\n * an HTMLElement can't be created, return null\r\n * @param selector\r\n * @returns HTMLElement\r\n */\r\nexport function getDomContainer(selector: HTMLElement | string): HTMLElement | undefined {\r\n if (typeof(selector) === 'string') {\r\n if (selector[0] === '#') {\r\n const el: any = $(selector)[0];\r\n if (!(el instanceof HTMLElement)) {\r\n return undefined;\r\n }\r\n return el;\r\n } else {\r\n const el = document.getElementById(selector);\r\n if (!el) {\r\n return undefined;\r\n }\r\n return el;\r\n }\r\n } else if (selector instanceof HTMLElement) {\r\n return selector;\r\n } else { \r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Create a top-level HTML element for modal containers - dialogs etc.\r\n * from a jquery selector, or just return same if it exists\r\n * @param selector \r\n * @returns \r\n */\r\nexport function createTopDomContainer(selector: string | HTMLElement, elementType?: string): HTMLElement {\r\n const container = $(selector);\r\n if (!elementType) {\r\n elementType = 'div';\r\n }\r\n if (container.length > 0) {\r\n return container[0] as HTMLElement;\r\n } else {\r\n const ndiv = document.createElement(elementType);\r\n if (typeof(selector) === 'string') {\r\n const cl = (selector[0] === '.' || selector[0] === '#') ? selector.substring(1) : selector;\r\n $(ndiv).addClass(cl);\r\n if (selector[0] === '#') {\r\n $(ndiv).attr('id', selector.substring(1));\r\n }\r\n }\r\n $('body').append(ndiv);\r\n return $(ndiv)[0] as HTMLElement;\r\n }\r\n}\r\n/**\r\n * \r\n * @param parameters \r\n * @returns \r\n */\r\nexport function draggable(parameters: any) {\r\n return new Draggable(parameters);\r\n}\r\n\r\nexport class Draggable {\r\n parent: any;\r\n handle: any;\r\n animeClass: any;\r\n dragParent: any;\r\n domOffset: any;\r\n svg: any;\r\n width: number;\r\n height: number;\r\n lastX: number;\r\n lastY: number;\r\n cb: any;\r\n moveParent: boolean;\r\n dragging: boolean = false;\r\n\r\n constructor(parameters: any) {\r\n this.parent = parameters.parent;\r\n this.handle = parameters.handle;\r\n this.animeClass = parameters.animateDiv;\r\n this.dragParent = parameters.dragParent;\r\n\r\n // TODO: make '.dom-container' a part of the configuration\r\n this.domOffset = $('.dom-container').offset();\r\n\r\n this.svg = parameters['svg'];\r\n this.width = $(this.parent).outerWidth();\r\n this.height = $(this.parent).outerHeight();\r\n this.lastX = $(this.handle).offset().left - this.domOffset.left;\r\n this.lastY = $(this.handle).offset().top - this.domOffset.top;\r\n this.cb = parameters.cb;\r\n this.moveParent = parameters.moveParent;\r\n\r\n var self = this;\r\n\r\n // $('.itemMenu input[name=\"itemTitle\"]').css('width','60%');\r\n $(this.handle)\r\n .off('mousedown').on('mousedown',\r\n function (e: any) {\r\n self.mousedown(e);\r\n });\r\n $(document)\r\n .on('mousemove',\r\n function (e: any) {\r\n self.mousemove(e);\r\n\r\n })\r\n .on('mouseup',\r\n function (e: any) {\r\n self.mouseup(e);\r\n });\r\n }\r\n _animate(e: any) {\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n $(this.animeClass).css('left', this.lastX - this.domOffset.left);\r\n $(this.animeClass).css('top', this.lastY - this.domOffset.top);\r\n\r\n if (this.dragParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n }\r\n mousedown(e: any) {\r\n if (!this.dragging) {\r\n $(this.animeClass).removeClass('hide');\r\n\r\n $(this.animeClass).css('width', this.width);\r\n $(this.animeClass).css('height', this.height);\r\n }\r\n\r\n this.dragging = true;\r\n this._animate(e);\r\n }\r\n enddrag() {\r\n this.lastX = Math.max(this.lastX - this.domOffset.left, 0);\r\n this.lastY = Math.max(this.lastY - this.domOffset.top, 0);\r\n if (this.moveParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n $(this.animeClass).addClass('hide');\r\n this.cb(this.lastX, this.lastY);\r\n }\r\n\r\n mouseup(e: any) {\r\n // stop resizing\r\n if (this.dragging) {\r\n this.dragging = false;\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n\r\n this.enddrag();\r\n }\r\n }\r\n mousemove(e: any) {\r\n // we don't want to do anything if we aren't resizing.\r\n if (!this.dragging)\r\n return;\r\n this._animate(e);\r\n }\r\n}\r\n","// Credit for Midi functionality goes to:\r\n// https://github.com/grimmdude/MidiWriterJS\r\nimport { SmoMusic } from '../smo/data/music';\r\nexport var _MidiWriter = function() {\r\n/**\r\n * MIDI file format constants.\r\n * @return {Constants}\r\n */\r\nvar Constants = {\r\n VERSION: 1,\r\n HEADER_CHUNK_TYPE: [0x4d, 0x54, 0x68, 0x64],\r\n // Mthd\r\n HEADER_CHUNK_LENGTH: [0x00, 0x00, 0x00, 0x06],\r\n // Header size for SMF\r\n HEADER_CHUNK_FORMAT0: [0x00, 0x00],\r\n // Midi Type 0 id\r\n HEADER_CHUNK_FORMAT1: [0x00, 0x01],\r\n // Midi Type 1 id\r\n HEADER_CHUNK_DIVISION: [0x00, 0x80],\r\n // Defaults to 128 ticks per beat\r\n TRACK_CHUNK_TYPE: [0x4d, 0x54, 0x72, 0x6b],\r\n // MTrk,\r\n META_EVENT_ID: 0xFF,\r\n META_TEXT_ID: 0x01,\r\n META_COPYRIGHT_ID: 0x02,\r\n META_TRACK_NAME_ID: 0x03,\r\n META_INSTRUMENT_NAME_ID: 0x04,\r\n META_LYRIC_ID: 0x05,\r\n META_MARKER_ID: 0x06,\r\n META_CUE_POINT: 0x07,\r\n META_TEMPO_ID: 0x51,\r\n META_SMTPE_OFFSET: 0x54,\r\n META_TIME_SIGNATURE_ID: 0x58,\r\n META_KEY_SIGNATURE_ID: 0x59,\r\n META_END_OF_TRACK_ID: [0x2F, 0x00],\r\n CONTROLLER_CHANGE_STATUS: 0xB0,\r\n // includes channel number (0)\r\n PROGRAM_CHANGE_STATUS: 0xC0,\r\n // includes channel number (0)\r\n PITCH_BEND_STATUS: 0xE0 // includes channel number (0)\r\n};\r\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n\r\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\r\n _typeof = function (obj) {\r\n return typeof obj;\r\n };\r\n } else {\r\n _typeof = function (obj) {\r\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n };\r\n }\r\n\r\n return _typeof(obj);\r\n}\r\n\r\nfunction _classCallCheck(instance, Constructor) {\r\n if (!(instance instanceof Constructor)) {\r\n throw new TypeError(\"Cannot call a class as a function\");\r\n }\r\n}\r\n\r\nfunction _defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) descriptor.writable = true;\r\n Object.defineProperty(target, descriptor.key, descriptor);\r\n }\r\n}\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) {\r\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\r\n if (staticProps) _defineProperties(Constructor, staticProps);\r\n return Constructor;\r\n}\r\n\r\nfunction _inherits(subClass, superClass) {\r\n if (typeof superClass !== \"function\" && superClass !== null) {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n constructor: {\r\n value: subClass,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n if (superClass) _setPrototypeOf(subClass, superClass);\r\n}\r\n\r\nfunction _getPrototypeOf(o) {\r\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\r\n return o.__proto__ || Object.getPrototypeOf(o);\r\n };\r\n return _getPrototypeOf(o);\r\n}\r\n\r\nfunction _setPrototypeOf(o, p) {\r\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\r\n o.__proto__ = p;\r\n return o;\r\n };\r\n\r\n return _setPrototypeOf(o, p);\r\n}\r\n\r\nfunction _isNativeReflectConstruct() {\r\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\r\n if (Reflect.construct.sham) return false;\r\n if (typeof Proxy === \"function\") return true;\r\n\r\n try {\r\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction _construct(Parent, args, Class) {\r\n if (_isNativeReflectConstruct()) {\r\n _construct = Reflect.construct;\r\n } else {\r\n _construct = function _construct(Parent, args, Class) {\r\n var a = [null];\r\n a.push.apply(a, args);\r\n var Constructor = Function.bind.apply(Parent, a);\r\n var instance = new Constructor();\r\n if (Class) _setPrototypeOf(instance, Class.prototype);\r\n return instance;\r\n };\r\n }\r\n\r\n return _construct.apply(null, arguments);\r\n}\r\n\r\nfunction _isNativeFunction(fn) {\r\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\r\n}\r\n\r\nfunction _wrapNativeSuper(Class) {\r\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\r\n\r\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\r\n if (Class === null || !_isNativeFunction(Class)) return Class;\r\n\r\n if (typeof Class !== \"function\") {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n if (typeof _cache !== \"undefined\") {\r\n if (_cache.has(Class)) return _cache.get(Class);\r\n\r\n _cache.set(Class, Wrapper);\r\n }\r\n\r\n function Wrapper() {\r\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\r\n }\r\n\r\n Wrapper.prototype = Object.create(Class.prototype, {\r\n constructor: {\r\n value: Wrapper,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n return _setPrototypeOf(Wrapper, Class);\r\n };\r\n\r\n return _wrapNativeSuper(Class);\r\n}\r\n\r\nfunction _wrapRegExp(re, groups) {\r\n _wrapRegExp = function (re, groups) {\r\n return new BabelRegExp(re, undefined, groups);\r\n };\r\n\r\n var _RegExp = _wrapNativeSuper(RegExp);\r\n\r\n var _super = RegExp.prototype;\r\n\r\n var _groups = new WeakMap();\r\n\r\n function BabelRegExp(re, flags, groups) {\r\n var _this = _RegExp.call(this, re, flags);\r\n\r\n _groups.set(_this, groups || _groups.get(re));\r\n\r\n return _this;\r\n }\r\n\r\n _inherits(BabelRegExp, _RegExp);\r\n\r\n BabelRegExp.prototype.exec = function (str) {\r\n var result = _super.exec.call(this, str);\r\n\r\n if (result) result.groups = buildGroups(result, this);\r\n return result;\r\n };\r\n\r\n BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\r\n if (typeof substitution === \"string\") {\r\n var groups = _groups.get(this);\r\n\r\n return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\r\n return \"$\" + groups[name];\r\n }));\r\n } else if (typeof substitution === \"function\") {\r\n var _this = this;\r\n\r\n return _super[Symbol.replace].call(this, str, function () {\r\n var args = [];\r\n args.push.apply(args, arguments);\r\n\r\n if (typeof args[args.length - 1] !== \"object\") {\r\n args.push(buildGroups(args, _this));\r\n }\r\n\r\n return substitution.apply(this, args);\r\n });\r\n } else {\r\n return _super[Symbol.replace].call(this, str, substitution);\r\n }\r\n };\r\n\r\n function buildGroups(result, re) {\r\n var g = _groups.get(re);\r\n\r\n return Object.keys(g).reduce(function (groups, name) {\r\n groups[name] = result[g[name]];\r\n return groups;\r\n }, Object.create(null));\r\n }\r\n\r\n return _wrapRegExp.apply(this, arguments);\r\n}\r\n\r\n/**\r\n * Static utility functions used throughout the library.\r\n */\r\n\r\nvar Utils = /*#__PURE__*/function () {\r\n function Utils() {\r\n _classCallCheck(this, Utils);\r\n }\r\n\r\n _createClass(Utils, null, [{\r\n key: \"version\",\r\n value:\r\n /**\r\n * Gets MidiWriterJS version number.\r\n * @return {string}\r\n */\r\n function version() {\r\n return Constants.VERSION;\r\n }\r\n /**\r\n * Convert a string to an array of bytes\r\n * @param {string} string\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringToBytes\",\r\n value: function stringToBytes(string) {\r\n return string.split('').map(function (_char) {\r\n return _char.charCodeAt();\r\n });\r\n }\r\n /**\r\n * Checks if argument is a valid number.\r\n * @param {*} n - Value to check\r\n * @return {boolean}\r\n */\r\n\r\n }, {\r\n key: \"isNumeric\",\r\n value: function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n /**\r\n * Returns the correct MIDI number for the specified pitch.\r\n * Uses Tonal Midi - https://github.com/danigb/tonal/tree/master/packages/midi\r\n * @param {(string|number)} pitch - 'C#4' or midi note code\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPitch\",\r\n value: function getPitch(pitch) {\r\n return SmoMusic.midiPitchToMidiNumber(pitch);\r\n }\r\n /**\r\n * Translates number of ticks to MIDI timestamp format, returning an array of\r\n * hex strings with the time values. Midi has a very particular time to express time,\r\n * take a good look at the spec before ever touching this function.\r\n * Thanks to https://github.com/sergi/jsmidi\r\n *\r\n * @param {number} ticks - Number of ticks to be translated\r\n * @return {array} - Bytes that form the MIDI time value\r\n */\r\n\r\n }, {\r\n key: \"numberToVariableLength\",\r\n value: function numberToVariableLength(ticks) {\r\n ticks = Math.round(ticks);\r\n var buffer = ticks & 0x7F;\r\n\r\n while (ticks = ticks >> 7) {\r\n buffer <<= 8;\r\n buffer |= ticks & 0x7F | 0x80;\r\n }\r\n\r\n var bList = [];\r\n\r\n while (true) {\r\n bList.push(buffer & 0xff);\r\n if (buffer & 0x80) buffer >>= 8;else {\r\n break;\r\n }\r\n }\r\n\r\n return bList;\r\n }\r\n /**\r\n * Counts number of bytes in string\r\n * @param {string} s\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringByteCount\",\r\n value: function stringByteCount(s) {\r\n return encodeURI(s).split(/%..|./).length - 1;\r\n }\r\n /**\r\n * Get an int from an array of bytes.\r\n * @param {array} bytes\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"numberFromBytes\",\r\n value: function numberFromBytes(bytes) {\r\n var hex = '';\r\n var stringResult;\r\n bytes.forEach(function (_byte) {\r\n stringResult = _byte.toString(16); // ensure string is 2 chars\r\n\r\n if (stringResult.length == 1) stringResult = \"0\" + stringResult;\r\n hex += stringResult;\r\n });\r\n return parseInt(hex, 16);\r\n }\r\n /**\r\n * Takes a number and splits it up into an array of bytes. Can be padded by passing a number to bytesNeeded\r\n * @param {number} number\r\n * @param {number} bytesNeeded\r\n * @return {array} - Array of bytes\r\n */\r\n\r\n }, {\r\n key: \"numberToBytes\",\r\n value: function numberToBytes(number, bytesNeeded) {\r\n bytesNeeded = bytesNeeded || 1;\r\n var hexString = number.toString(16);\r\n\r\n if (hexString.length & 1) {\r\n // Make sure hex string is even number of chars\r\n hexString = '0' + hexString;\r\n } // Split hex string into an array of two char elements\r\n\r\n\r\n var hexArray = hexString.match(/.{2}/g); // Now parse them out as integers\r\n\r\n hexArray = hexArray.map(function (item) {\r\n return parseInt(item, 16);\r\n }); // Prepend empty bytes if we don't have enough\r\n\r\n if (hexArray.length < bytesNeeded) {\r\n while (bytesNeeded - hexArray.length > 0) {\r\n hexArray.unshift(0);\r\n }\r\n }\r\n\r\n return hexArray;\r\n }\r\n /**\r\n * Converts value to array if needed.\r\n * @param {string} value\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"toArray\",\r\n value: function toArray(value) {\r\n if (Array.isArray(value)) return value;\r\n return [value];\r\n }\r\n /**\r\n * Converts velocity to value 0-127\r\n * @param {number} velocity - Velocity value 1-100\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"convertVelocity\",\r\n value: function convertVelocity(velocity) {\r\n // Max passed value limited to 100\r\n velocity = velocity > 100 ? 100 : velocity;\r\n return Math.round(velocity / 100 * 127);\r\n }\r\n /**\r\n * Gets the total number of ticks of a specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {(string|array)} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getTickDuration\",\r\n value: function getTickDuration(duration) {\r\n if (Array.isArray(duration)) {\r\n // Recursively execute this method for each item in the array and return the sum of tick durations.\r\n return duration.map(function (value) {\r\n return Utils.getTickDuration(value);\r\n }).reduce(function (a, b) {\r\n return a + b;\r\n }, 0);\r\n }\r\n\r\n duration = duration.toString();\r\n\r\n if (duration.toLowerCase().charAt(0) === 't') {\r\n // If duration starts with 't' then the number that follows is an explicit tick count\r\n return parseInt(duration.substring(1));\r\n } // Need to apply duration here. Quarter note == Constants.HEADER_CHUNK_DIVISION\r\n\r\n\r\n var quarterTicks = Utils.numberFromBytes(Constants.HEADER_CHUNK_DIVISION);\r\n var tickDuration = quarterTicks * Utils.getDurationMultiplier(duration);\r\n return Utils.getRoundedIfClose(tickDuration);\r\n }\r\n /**\r\n * Due to rounding errors in JavaScript engines,\r\n * it's safe to round when we're very close to the actual tick number\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getRoundedIfClose\",\r\n value: function getRoundedIfClose(tick) {\r\n var roundedTick = Math.round(tick);\r\n return Math.abs(roundedTick - tick) < 0.000001 ? roundedTick : tick;\r\n }\r\n /**\r\n * Due to low precision of MIDI,\r\n * we need to keep track of rounding errors in deltas.\r\n * This function will calculate the rounding error for a given duration.\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPrecisionLoss\",\r\n value: function getPrecisionLoss(tick) {\r\n var roundedTick = Math.round(tick);\r\n return roundedTick - tick;\r\n }\r\n /**\r\n * Gets what to multiple ticks/quarter note by to get the specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {string} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getDurationMultiplier\",\r\n value: function getDurationMultiplier(duration) {\r\n // Need to apply duration here.\r\n // Quarter note == Constants.HEADER_CHUNK_DIVISION ticks.\r\n if (duration === '0') return 0;\r\n var match = duration.match( /*#__PURE__*/_wrapRegExp(/^(d+)?([0-9]+)(?:t([0-9]*))?/, {\r\n dotted: 1,\r\n base: 2,\r\n tuplet: 3\r\n }));\r\n\r\n if (match) {\r\n var base = Number(match.groups.base); // 1 or any power of two:\r\n\r\n var isValidBase = base === 1 || (base & base - 1) === 0;\r\n\r\n if (isValidBase) {\r\n // how much faster or slower is this note compared to a quarter?\r\n var ratio = base / 4;\r\n var durationInQuarters = 1 / ratio;\r\n var _match$groups = match.groups,\r\n dotted = _match$groups.dotted,\r\n tuplet = _match$groups.tuplet;\r\n\r\n if (dotted) {\r\n var thisManyDots = dotted.length;\r\n var divisor = Math.pow(2, thisManyDots);\r\n durationInQuarters = durationInQuarters + durationInQuarters * ((divisor - 1) / divisor);\r\n }\r\n\r\n if (typeof tuplet === 'string') {\r\n var fitInto = durationInQuarters * 2; // default to triplet:\r\n\r\n var thisManyNotes = Number(tuplet || '3');\r\n durationInQuarters = fitInto / thisManyNotes;\r\n }\r\n\r\n return durationInQuarters;\r\n }\r\n }\r\n\r\n throw new Error(duration + ' is not a valid duration.');\r\n }\r\n }]);\r\n\r\n return Utils;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note on\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOnEvent}\r\n */\r\n\r\nvar NoteOnEvent = /*#__PURE__*/function () {\r\n function NoteOnEvent(fields) {\r\n _classCallCheck(this, NoteOnEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.type = 'note-on';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.wait = fields.wait;\r\n this.velocity = fields.velocity;\r\n this.startTick = fields.startTick;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = null;\r\n this.delta = null;\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOnEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOnEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n this.data = []; // Explicitly defined startTick event\r\n\r\n if (this.startTick) {\r\n this.tick = Utils.getRoundedIfClose(this.startTick); // If this is the first event in the track then use event's starting tick as delta.\r\n\r\n if (track.tickPointer == 0) {\r\n this.delta = this.tick;\r\n }\r\n } else {\r\n this.delta = Utils.getTickDuration(this.wait);\r\n this.tick = Utils.getRoundedIfClose(track.tickPointer + this.delta);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note on status code based on the selected channel. 0x9{0-F}\r\n * Note on at channel 0 is 0x90 (144)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 144 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOnEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note off\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOffEvent}\r\n */\r\n\r\nvar NoteOffEvent = /*#__PURE__*/function () {\r\n function NoteOffEvent(fields) {\r\n _classCallCheck(this, NoteOffEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n velocity: 50,\r\n tick: null\r\n }, fields);\r\n this.type = 'note-off';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.duration = fields.duration;\r\n this.velocity = fields.velocity;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = fields.tick;\r\n this.delta = Utils.getTickDuration(this.duration);\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOffEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOffEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n if (this.tick === null) {\r\n this.tick = Utils.getRoundedIfClose(this.delta + track.tickPointer);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note off status code based on the selected channel. 0x8{0-F}\r\n * Note off at channel 0 is 0x80 (128)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 128 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOffEvent;\r\n}();\r\n\r\n/**\r\n * Wrapper for noteOnEvent/noteOffEvent objects that builds both events.\r\n * @param {object} fields - {pitch: '[C4]', duration: '4', wait: '4', velocity: 1-100}\r\n * @return {NoteEvent}\r\n */\r\n\r\nvar NoteEvent = /*#__PURE__*/function () {\r\n function NoteEvent(fields) {\r\n _classCallCheck(this, NoteEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n repeat: 1,\r\n sequential: false,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.data = [];\r\n this.type = 'note';\r\n this.pitch = Utils.toArray(fields.pitch);\r\n this.channel = fields.channel;\r\n this.duration = fields.duration;\r\n this.grace = fields.grace;\r\n this.repeat = fields.repeat;\r\n this.sequential = fields.sequential;\r\n this.startTick = fields.startTick;\r\n this.velocity = fields.velocity;\r\n this.wait = fields.wait;\r\n this.tickDuration = Utils.getTickDuration(this.duration);\r\n this.restDuration = Utils.getTickDuration(this.wait);\r\n this.events = []; // Hold actual NoteOn/NoteOff events\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @return {NoteEvent}\r\n */\r\n\r\n\r\n _createClass(NoteEvent, [{\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this = this;\r\n\r\n // Reset data array\r\n this.data = [];\r\n this.tickDuration;\r\n this.restDuration; // Apply grace note(s) and subtract ticks (currently 1 tick per grace note) from tickDuration so net value is the same\r\n\r\n if (this.grace) {\r\n var graceDuration = 1;\r\n this.grace = Utils.toArray(this.grace);\r\n this.grace.forEach(function (pitch) {\r\n var noteEvent = new NoteEvent({\r\n pitch: _this.grace,\r\n duration: 'T' + graceDuration\r\n });\r\n _this.data = _this.data.concat(noteEvent.data);\r\n });\r\n } // fields.pitch could be an array of pitches.\r\n // If this.sequential === true then it's a sequential string of notes that requires separate NoteOnEvents.\r\n\r\n if (!this.sequential) {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n // Note on\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: _this.wait,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n } else {\r\n // Running status (can ommit the note on status)\r\n //noteOn = new NoteOnEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n }\r\n\r\n _this.events.push(noteOnNew);\r\n }); // Note off\r\n\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n //noteOff = new NoteOffEvent({data: Utils.numberToVariableLength(tickDuration).concat(this.getNoteOffStatus(), Utils.getPitch(p), Utils.convertVelocity(this.velocity))});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n } else {\r\n // Running status (can ommit the note off status)\r\n //noteOff = new NoteOffEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n }\r\n\r\n _this.events.push(noteOffNew);\r\n });\r\n }\r\n } else {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n this.pitch.forEach(function (p, i) {\r\n\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: i > 0 ? 0 : _this.wait,\r\n // wait only applies to first note in repetition\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p\r\n });\r\n\r\n _this.events.push(noteOnNew, noteOffNew);\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n }]);\r\n\r\n return NoteEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"Pitch Bend\" MIDI event\r\n * [ -1.0, 0, 1.0 ] -> [ 0, 8192, 16383]\r\n * @param {object} fields { bend : float, channel : int }\r\n * @return {PitchBendEvent}\r\n */\r\n\r\nvar scale14bits = function scale14bits(zeroOne) {\r\n if (zeroOne <= 0) {\r\n return Math.floor(16384 * (zeroOne + 1) / 2);\r\n }\r\n\r\n return Math.floor(16383 * (zeroOne + 1) / 2);\r\n};\r\n\r\nvar PitchBendEvent = function PitchBendEvent(fields) {\r\n _classCallCheck(this, PitchBendEvent);\r\n\r\n this.type = 'pitch-bend';\r\n var bend14 = scale14bits(fields.bend);\r\n var channel = fields.channel || 0;\r\n var lsbValue = bend14 & 0x7f;\r\n var msbValue = bend14 >> 7 & 0x7f;\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PITCH_BEND_STATUS | channel, lsbValue, msbValue);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"program change\" MIDI event\r\n * @param {object} fields {instrument: integer}\r\n * @return {ProgramChangeEvent}\r\n */\r\n\r\nvar ProgramChangeEvent = function ProgramChangeEvent(fields) {\r\n _classCallCheck(this, ProgramChangeEvent);\r\n\r\n this.type = 'program'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PROGRAM_CHANGE_STATUS, fields.instrument);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"controller change\" MIDI event\r\n * @param {object} fields {controllerNumber: integer, controllerValue: integer}\r\n * @return {ControllerChangeEvent}\r\n */\r\n\r\nvar ControllerChangeEvent = function ControllerChangeEvent(fields) {\r\n _classCallCheck(this, ControllerChangeEvent);\r\n\r\n this.type = 'controller'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.CONTROLLER_CHANGE_STATUS, fields.controllerNumber, fields.controllerValue);\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {string} text - Copyright text\r\n * @return {CopyrightEvent}\r\n */\r\n\r\nvar CopyrightEvent = function CopyrightEvent(text) {\r\n _classCallCheck(this, CopyrightEvent);\r\n\r\n this.type = 'copyright';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_COPYRIGHT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a cue point meta event.\r\n * @param {string} text - Cue point text\r\n * @return {CuePointEvent}\r\n */\r\n\r\nvar CuePointEvent = function CuePointEvent(text) {\r\n _classCallCheck(this, CuePointEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_CUE_POINT, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a end track meta event.\r\n * @return {EndTrackEvent}\r\n */\r\n\r\nvar EndTrackEvent = function EndTrackEvent() {\r\n _classCallCheck(this, EndTrackEvent);\r\n\r\n this.type = 'end-track'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_END_OF_TRACK_ID);\r\n};\r\n\r\n/**\r\n * Object representation of an instrument name meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {InstrumentNameEvent}\r\n */\r\n\r\nvar InstrumentNameEvent = function InstrumentNameEvent(text) {\r\n _classCallCheck(this, InstrumentNameEvent);\r\n\r\n this.type = 'instrument-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_INSTRUMENT_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Instrument name\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a key signature meta event.\r\n * @return {KeySignatureEvent}\r\n */\r\n\r\nvar KeySignatureEvent = function KeySignatureEvent(sf, mi) {\r\n _classCallCheck(this, KeySignatureEvent);\r\n\r\n this.type = 'key-signature';\r\n var mode = mi || 0;\r\n sf = sf || 0; //\tFunction called with string notation\r\n\r\n if (typeof mi === 'undefined') {\r\n var fifths = [['Cb', 'Gb', 'Db', 'Ab', 'Eb', 'Bb', 'F', 'C', 'G', 'D', 'A', 'E', 'B', 'F#', 'C#'], ['ab', 'eb', 'bb', 'f', 'c', 'g', 'd', 'a', 'e', 'b', 'f#', 'c#', 'g#', 'd#', 'a#']];\r\n var _sflen = sf.length;\r\n var note = sf || 'C';\r\n if (sf[0] === sf[0].toLowerCase()) mode = 1;\r\n\r\n if (_sflen > 1) {\r\n switch (sf.charAt(_sflen - 1)) {\r\n case 'm':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '-':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case 'M':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '+':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n }\r\n }\r\n\r\n var fifthindex = fifths[mode].indexOf(note);\r\n sf = fifthindex === -1 ? 0 : fifthindex - 7;\r\n } // Start with zero time delta\r\n\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_KEY_SIGNATURE_ID, [0x02], // Size\r\n Utils.numberToBytes(sf, 1), // Number of sharp or flats ( < 0 flat; > 0 sharp)\r\n Utils.numberToBytes(mode, 1) // Mode: 0 major, 1 minor\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a lyric meta event.\r\n * @param {string} text - Lyric text\r\n * @return {LyricEvent}\r\n */\r\n\r\nvar LyricEvent = function LyricEvent(text) {\r\n _classCallCheck(this, LyricEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_LYRIC_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a marker meta event.\r\n * @param {string} text - Marker text\r\n * @return {MarkerEvent}\r\n */\r\n\r\nvar MarkerEvent = function MarkerEvent(text) {\r\n _classCallCheck(this, MarkerEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_MARKER_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TempoEvent}\r\n */\r\n\r\nvar TempoEvent = function TempoEvent(bpm) {\r\n _classCallCheck(this, TempoEvent);\r\n\r\n this.type = 'tempo';\r\n var tempo = Math.round(60000000 / bpm); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEMPO_ID, [0x03], // Size\r\n Utils.numberToBytes(tempo, 3) // Tempo, 3 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TextEvent}\r\n */\r\n\r\nvar TextEvent = function TextEvent(text) {\r\n _classCallCheck(this, TextEvent);\r\n\r\n this.type = 'text';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEXT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a time signature meta event.\r\n * @return {TimeSignatureEvent}\r\n */\r\n\r\nvar TimeSignatureEvent = function TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n _classCallCheck(this, TimeSignatureEvent);\r\n\r\n this.type = 'time-signature'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TIME_SIGNATURE_ID, [0x04], // Size\r\n Utils.numberToBytes(numerator, 1), // Numerator, 1 bytes\r\n Utils.numberToBytes(Math.log2(denominator), 1), // Denominator is expressed as pow of 2, 1 bytes\r\n Utils.numberToBytes(midiclockspertick || 24, 1), // MIDI Clocks per tick, 1 bytes\r\n Utils.numberToBytes(notespermidiclock || 8, 1) // Number of 1/32 notes per MIDI clocks, 1 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TrackNameEvent}\r\n */\r\n\r\nvar TrackNameEvent = function TrackNameEvent(text) {\r\n _classCallCheck(this, TrackNameEvent);\r\n\r\n this.type = 'track-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TRACK_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Holds all data for a track.\r\n * @param {object} fields {type: number, data: array, size: array, events: array}\r\n * @return {Track}\r\n */\r\n\r\nvar Track = /*#__PURE__*/function () {\r\n function Track() {\r\n _classCallCheck(this, Track);\r\n\r\n this.type = Constants.TRACK_CHUNK_TYPE;\r\n this.data = [];\r\n this.size = [];\r\n this.events = [];\r\n this.explicitTickEvents = []; // If there are any events with an explicit tick defined then we will create a \"sub\" track for those\r\n // and merge them in and the end.\r\n\r\n this.tickPointer = 0; // Each time an event is added this will increase\r\n }\r\n /**\r\n * Adds any event type to the track.\r\n * Events without a specific startTick property are assumed to be added in order of how they should output.\r\n * Events with a specific startTick property are set aside for now will be merged in during build process.\r\n * @param {(NoteEvent|ProgramChangeEvent)} events - Event object or array of Event objects.\r\n * @param {function} mapFunction - Callback which can be used to apply specific properties to all events.\r\n * @return {Track}\r\n */\r\n\r\n\r\n _createClass(Track, [{\r\n key: \"addEvent\",\r\n value: function addEvent(events, mapFunction) {\r\n var _this = this;\r\n\r\n Utils.toArray(events).forEach(function (event, i) {\r\n if (event instanceof NoteEvent) {\r\n // Handle map function if provided\r\n if (typeof mapFunction === 'function') {\r\n var properties = mapFunction(i, event);\r\n\r\n if (_typeof(properties) === 'object') {\r\n for (var j in properties) {\r\n switch (j) {\r\n case 'channel':\r\n event.channel = properties[j];\r\n break;\r\n\r\n case 'duration':\r\n event.duration = properties[j];\r\n break;\r\n\r\n case 'sequential':\r\n event.sequential = properties[j];\r\n break;\r\n\r\n case 'velocity':\r\n event.velocity = Utils.convertVelocity(properties[j]);\r\n break;\r\n }\r\n }\r\n }\r\n } // If this note event has an explicit startTick then we need to set aside for now\r\n\r\n\r\n if (event.startTick !== null) {\r\n _this.explicitTickEvents.push(event);\r\n } else {\r\n // Push each on/off event to track's event stack\r\n event.buildData().events.forEach(function (e) {\r\n return _this.events.push(e);\r\n });\r\n }\r\n } else {\r\n _this.events.push(event);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Builds int array of all events.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this2 = this;\r\n\r\n // Remove existing end track event and add one.\r\n // This makes sure it's at the very end of the event list.\r\n this.removeEventsByType('end-track').addEvent(new EndTrackEvent()); // Reset\r\n\r\n this.data = [];\r\n this.size = [];\r\n this.tickPointer = 0;\r\n var precisionLoss = 0;\r\n this.events.forEach(function (event, eventIndex) {\r\n // Build event & add to total tick duration\r\n if (event instanceof NoteOnEvent || event instanceof NoteOffEvent) {\r\n var built = event.buildData(_this2, precisionLoss);\r\n precisionLoss = Utils.getPrecisionLoss(event.deltaWithPrecisionCorrection || 0);\r\n _this2.data = _this2.data.concat(built.data);\r\n _this2.tickPointer = Utils.getRoundedIfClose(event.tick);\r\n } else {\r\n _this2.data = _this2.data.concat(event.data);\r\n }\r\n });\r\n this.mergeExplicitTickEvents();\r\n this.size = Utils.numberToBytes(this.data.length, 4); // 4 bytes long\r\n\r\n return this;\r\n }\r\n }, {\r\n key: \"mergeExplicitTickEvents\",\r\n value: function mergeExplicitTickEvents() {\r\n var _this3 = this;\r\n\r\n if (!this.explicitTickEvents.length) return; // First sort asc list of events by startTick\r\n\r\n this.explicitTickEvents.sort(function (a, b) {\r\n return a.startTick - b.startTick;\r\n }); // Now this.explicitTickEvents is in correct order, and so is this.events naturally.\r\n // For each explicit tick event, splice it into the main list of events and\r\n // adjust the delta on the following events so they still play normally.\r\n\r\n this.explicitTickEvents.forEach(function (noteEvent) {\r\n // Convert NoteEvent to it's respective NoteOn/NoteOff events\r\n // Note that as we splice in events the delta for the NoteOff ones will\r\n // Need to change based on what comes before them after the splice.\r\n noteEvent.buildData().events.forEach(function (e) {\r\n return e.buildData(_this3);\r\n }); // Merge each event indivually into this track's event list.\r\n\r\n noteEvent.events.forEach(function (event) {\r\n return _this3.mergeSingleEvent(event);\r\n });\r\n }); // Hacky way to rebuild track with newly spliced events. Need better solution.\r\n\r\n this.explicitTickEvents = [];\r\n this.buildData();\r\n }\r\n /**\r\n * Merges another track's events with this track.\r\n * @param {Track} track\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeTrack\",\r\n value: function mergeTrack(track) {\r\n var _this4 = this;\r\n\r\n // First build this track to populate each event's tick property\r\n this.buildData(); // Then build track to be merged so that tick property is populated on all events & merge each event.\r\n\r\n track.buildData().events.forEach(function (event) {\r\n return _this4.mergeSingleEvent(event);\r\n });\r\n }\r\n /**\r\n * Merges a single event into this track's list of events based on event.tick property.\r\n * @param {NoteOnEvent|NoteOffEvent} - event\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeSingleEvent\",\r\n value: function mergeSingleEvent(event) {\r\n // Find index of existing event we need to follow with\r\n var lastEventIndex = 0;\r\n\r\n for (var i = 0; i < this.events.length; i++) {\r\n if (this.events[i].tick > event.tick) break;\r\n lastEventIndex = i;\r\n }\r\n\r\n var splicedEventIndex = lastEventIndex + 1; // Need to adjust the delta of this event to ensure it falls on the correct tick.\r\n\r\n event.delta = event.tick - this.events[lastEventIndex].tick; // Splice this event at lastEventIndex + 1\r\n\r\n this.events.splice(splicedEventIndex, 0, event); // Now adjust delta of all following events\r\n\r\n for (var i = splicedEventIndex + 1; i < this.events.length; i++) {\r\n // Since each existing event should have a tick value at this point we just need to\r\n // adjust delta to that the event still falls on the correct tick.\r\n this.events[i].delta = this.events[i].tick - this.events[i - 1].tick;\r\n }\r\n }\r\n /**\r\n * Removes all events matching specified type.\r\n * @param {string} eventType - Event type\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"removeEventsByType\",\r\n value: function removeEventsByType(eventType) {\r\n var _this5 = this;\r\n\r\n this.events.forEach(function (event, index) {\r\n if (event.type === eventType) {\r\n _this5.events.splice(index, 1);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Sets tempo of the MIDI file.\r\n * @param {number} bpm - Tempo in beats per minute.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTempo\",\r\n value: function setTempo(bpm) {\r\n return this.addEvent(new TempoEvent(bpm));\r\n }\r\n /**\r\n * Sets time signature.\r\n * @param {number} numerator - Top number of the time signature.\r\n * @param {number} denominator - Bottom number of the time signature.\r\n * @param {number} midiclockspertick - Defaults to 24.\r\n * @param {number} notespermidiclock - Defaults to 8.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTimeSignature\",\r\n value: function setTimeSignature(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n return this.addEvent(new TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock));\r\n }\r\n /**\r\n * Sets key signature.\r\n * @param {*} sf -\r\n * @param {*} mi -\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setKeySignature\",\r\n value: function setKeySignature(sf, mi) {\r\n return this.addEvent(new KeySignatureEvent(sf, mi));\r\n }\r\n /**\r\n * Adds text to MIDI file.\r\n * @param {string} text - Text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addText\",\r\n value: function addText(text) {\r\n return this.addEvent(new TextEvent(text));\r\n }\r\n /**\r\n * Adds copyright to MIDI file.\r\n * @param {string} text - Text of copyright line.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCopyright\",\r\n value: function addCopyright(text) {\r\n return this.addEvent(new CopyrightEvent(text));\r\n }\r\n /**\r\n * Adds Sequence/Track Name.\r\n * @param {string} text - Text of track name.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addTrackName\",\r\n value: function addTrackName(text) {\r\n return this.addEvent(new TrackNameEvent(text));\r\n }\r\n /**\r\n * Sets instrument name of track.\r\n * @param {string} text - Name of instrument.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addInstrumentName\",\r\n value: function addInstrumentName(text) {\r\n return this.addEvent(new InstrumentNameEvent(text));\r\n }\r\n /**\r\n * Adds marker to MIDI file.\r\n * @param {string} text - Marker text.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addMarker\",\r\n value: function addMarker(text) {\r\n return this.addEvent(new MarkerEvent(text));\r\n }\r\n /**\r\n * Adds cue point to MIDI file.\r\n * @param {string} text - Text of cue point.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCuePoint\",\r\n value: function addCuePoint(text) {\r\n return this.addEvent(new CuePointEvent(text));\r\n }\r\n /**\r\n * Adds lyric to MIDI file.\r\n * @param {string} text - Lyric text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addLyric\",\r\n value: function addLyric(text) {\r\n return this.addEvent(new LyricEvent(text));\r\n }\r\n /**\r\n * Channel mode messages\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"polyModeOn\",\r\n value: function polyModeOn() {\r\n var event = new NoteOnEvent({\r\n data: [0x00, 0xB0, 0x7E, 0x00]\r\n });\r\n return this.addEvent(event);\r\n }\r\n /**\r\n * Sets a pitch bend.\r\n * @param {float} bend - Bend value ranging [-1,1], zero meaning no bend.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setPitchBend\",\r\n value: function setPitchBend(bend) {\r\n return this.addEvent(new PitchBendEvent({\r\n bend: bend\r\n }));\r\n }\r\n /**\r\n * Adds a controller change event\r\n * @param {number} number - Control number.\r\n * @param {number} value - Control value.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"controllerChange\",\r\n value: function controllerChange(number, value) {\r\n return this.addEvent(new ControllerChangeEvent({\r\n controllerNumber: number,\r\n controllerValue: value\r\n }));\r\n }\r\n }]);\r\n\r\n return Track;\r\n}();\r\n\r\nvar VexFlow = /*#__PURE__*/function () {\r\n function VexFlow() {\r\n _classCallCheck(this, VexFlow);\r\n }\r\n\r\n _createClass(VexFlow, [{\r\n key: \"trackFromVoice\",\r\n value:\r\n /**\r\n * Support for converting VexFlow voice into MidiWriterJS track\r\n * @return MidiWriter.Track object\r\n */\r\n function trackFromVoice(voice) {\r\n var _this = this;\r\n\r\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\r\n addRenderedAccidentals: false\r\n };\r\n var track = new Track();\r\n var wait = [];\r\n voice.tickables.forEach(function (tickable) {\r\n if (tickable.noteType === 'n') {\r\n track.addEvent(new NoteEvent({\r\n pitch: tickable.keys.map(function (pitch, index) {\r\n return _this.convertPitch(pitch, index, tickable, options.addRenderedAccidentals);\r\n }),\r\n duration: _this.convertDuration(tickable),\r\n wait: wait\r\n })); // reset wait\r\n\r\n wait = [];\r\n } else if (tickable.noteType === 'r') {\r\n // move on to the next tickable and add this to the stack\r\n // of the `wait` property for the next note event\r\n wait.push(_this.convertDuration(tickable));\r\n return;\r\n }\r\n }); // There may be outstanding rests at the end of the track,\r\n // pad with a ghost note (zero duration and velocity), just to capture the wait.\r\n\r\n if (wait.length > 0) {\r\n track.addEvent(new NoteEvent({\r\n pitch: '[c4]',\r\n duration: '0',\r\n wait: wait,\r\n velocity: '0'\r\n }));\r\n }\r\n\r\n return track;\r\n }\r\n /**\r\n * Converts VexFlow pitch syntax to MidiWriterJS syntax\r\n * @param pitch string\r\n * @param index pitch index\r\n * @param note struct from Vexflow\r\n * @param addRenderedAccidentals adds Vexflow rendered accidentals\r\n */\r\n\r\n }, {\r\n key: \"convertPitch\",\r\n value: function convertPitch(pitch, index, note) {\r\n var addRenderedAccidentals = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n // Splits note name from octave\r\n var pitchParts = pitch.split('/'); // Retrieves accidentals from pitch\r\n // Removes natural accidentals since they are not accepted in Tonal Midi\r\n\r\n var accidentals = pitchParts[0].substring(1).replace('n', '');\r\n\r\n if (addRenderedAccidentals) {\r\n var _note$getAccidentals;\r\n\r\n (_note$getAccidentals = note.getAccidentals()) === null || _note$getAccidentals === void 0 ? void 0 : _note$getAccidentals.forEach(function (accidental) {\r\n if (accidental.index === index) {\r\n if (accidental.type === 'n') {\r\n accidentals = '';\r\n } else {\r\n accidentals += accidental.type;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return pitchParts[0][0] + accidentals + pitchParts[1];\r\n }\r\n /**\r\n * Converts VexFlow duration syntax to MidiWriterJS syntax\r\n * @param note struct from VexFlow\r\n */\r\n\r\n }, {\r\n key: \"convertDuration\",\r\n value: function convertDuration(note) {\r\n return 'd'.repeat(note.dots) + this.convertBaseDuration(note.duration) + (note.tuplet ? 't' + note.tuplet.num_notes : '');\r\n }\r\n /**\r\n * Converts VexFlow base duration syntax to MidiWriterJS syntax\r\n * @param duration Vexflow duration\r\n * @returns MidiWriterJS duration\r\n */\r\n\r\n }, {\r\n key: \"convertBaseDuration\",\r\n value: function convertBaseDuration(duration) {\r\n switch (duration) {\r\n case 'w':\r\n return '1';\r\n\r\n case 'h':\r\n return '2';\r\n\r\n case 'q':\r\n return '4';\r\n\r\n default:\r\n return duration;\r\n }\r\n }\r\n }]);\r\n\r\n return VexFlow;\r\n}();\r\n\r\n/**\r\n * Object representation of a header chunk section of a MIDI file.\r\n * @param {number} numberOfTracks - Number of tracks\r\n * @return {HeaderChunk}\r\n */\r\n\r\nvar HeaderChunk = function HeaderChunk(numberOfTracks) {\r\n _classCallCheck(this, HeaderChunk);\r\n\r\n this.type = Constants.HEADER_CHUNK_TYPE;\r\n var trackType = numberOfTracks > 1 ? Constants.HEADER_CHUNK_FORMAT1 : Constants.HEADER_CHUNK_FORMAT0;\r\n this.data = trackType.concat(Utils.numberToBytes(numberOfTracks, 2), // two bytes long,\r\n Constants.HEADER_CHUNK_DIVISION);\r\n this.size = [0, 0, 0, this.data.length];\r\n};\r\n\r\n/**\r\n * Object that puts together tracks and provides methods for file output.\r\n * @param {array|Track} tracks - A single {Track} object or an array of {Track} objects.\r\n * @return {Writer}\r\n */\r\n\r\nvar Writer = /*#__PURE__*/function () {\r\n function Writer(tracks) {\r\n var _this = this;\r\n\r\n _classCallCheck(this, Writer);\r\n\r\n // Ensure track is an array\r\n tracks = Utils.toArray(tracks);\r\n this.data = [];\r\n this.data.push(new HeaderChunk(tracks.length)); // For each track add final end of track event and build data\r\n\r\n tracks.forEach(function (track, i) {\r\n _this.data.push(track.buildData());\r\n });\r\n }\r\n /**\r\n * Builds the file into a Uint8Array\r\n * @return {Uint8Array}\r\n */\r\n\r\n\r\n _createClass(Writer, [{\r\n key: \"buildFile\",\r\n value: function buildFile() {\r\n var build = []; // Data consists of chunks which consists of data\r\n\r\n this.data.forEach(function (d) {\r\n return build = build.concat(d.type, d.size, d.data);\r\n });\r\n return new Uint8Array(build);\r\n }\r\n /**\r\n * Convert file buffer to a base64 string. Different methods depending on if browser or node.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"base64\",\r\n value: function base64() {\r\n if (typeof btoa === 'function') return btoa(String.fromCharCode.apply(null, this.buildFile()));\r\n return Buffer.from(this.buildFile()).toString('base64');\r\n }\r\n /**\r\n * Get the data URI.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"dataUri\",\r\n value: function dataUri() {\r\n return 'data:audio/midi;base64,' + this.base64();\r\n }\r\n /**\r\n * Output to stdout\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"stdout\",\r\n value: function stdout() {\r\n return process.stdout.write(new Buffer(this.buildFile()));\r\n }\r\n /**\r\n * Save to MIDI file\r\n * @param {string} filename\r\n */\r\n\r\n }, /* {\r\n key: \"saveMIDI\",\r\n value: function saveMIDI(filename) {\r\n var fs = require('fs');\r\n\r\n var buffer = new Buffer.from(this.buildFile());\r\n fs.writeFile(filename + '.mid', buffer, function (err) {\r\n if (err) throw err;\r\n });\r\n } \r\n } */ \r\n]); \r\n\r\n return Writer;\r\n}();\r\n\r\nvar main = {\r\n Constants: Constants,\r\n NoteOnEvent: NoteOnEvent,\r\n NoteOffEvent: NoteOffEvent,\r\n NoteEvent: NoteEvent,\r\n PitchBendEvent: PitchBendEvent,\r\n ProgramChangeEvent: ProgramChangeEvent,\r\n Track: Track,\r\n Utils: Utils,\r\n VexFlow: VexFlow,\r\n Writer: Writer\r\n};\r\nwindow.MidiWriter = main;\r\n};\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiRenderState } from \"../render/sui/renderState\";\r\n\r\nexport type promiseFunction = () => void;\r\nexport type promiseCondition = () => boolean;\r\nexport type promiseInstance = () => Promise;\r\nexport interface PromiseParameters {\r\n endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number\r\n}\r\n\r\nexport function TEmptyPromise(obj: T): Promise {\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(obj);\r\n }, 1);\r\n });\r\n}\r\nexport class PromiseHelpers {\r\n // ### makePromise\r\n // poll on endCondition at a rate of pollTime. Resolve the promise\r\n // when endCondition is met, calling preResolveMethod first. On\r\n // polls where the end condition is not met, call pollMethod\r\n // Resolve method and pollMethod are optional\r\n static makePromise(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number): Promise {\r\n return new Promise((resolve: any) => {\r\n const checkit = () => {\r\n setTimeout(() => {\r\n if (endCondition()) {\r\n if (preResolveMethod) {\r\n preResolveMethod();\r\n }\r\n resolve();\r\n }\r\n else {\r\n if (pollMethod) {\r\n pollMethod();\r\n }\r\n checkit();\r\n }\r\n }, pollTime);\r\n }\r\n checkit();\r\n });\r\n }\r\n\r\n static makePromiseObj(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number) {\r\n return {\r\n endCondition,\r\n preResolveMethod,\r\n pollMethod,\r\n pollTime\r\n };\r\n }\r\n // ### promiseChainThen\r\n // Call a chain of promises in array order, with parameters of makePromise\r\n static async promiseChainThen(params: PromiseParameters[]) {\r\n const promiseArray: promiseInstance[] = [];\r\n params.forEach((param) => {\r\n promiseArray.push(\r\n async () => {\r\n return PromiseHelpers.makePromise(\r\n param.endCondition,\r\n param.preResolveMethod,\r\n param.pollMethod,\r\n param.pollTime\r\n );\r\n });\r\n });\r\n let result: Promise;\r\n for (const f of promiseArray) {\r\n result = await f();\r\n }\r\n\r\n\t\treturn result!;\r\n }\r\n static emptyPromise(): Promise {\r\n return new Promise((resolve: any) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, 1);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## smoSerialize\r\n// Helper functions that perform serialized merges, general JSON\r\n// types of routines.\r\n// ---\r\nexport class smoSerialize {\r\n static vexMerge(dest, src) {\r\n if (typeof (src) === 'undefined') {\r\n return;\r\n }\r\n const keys = Object.keys(src);\r\n keys.forEach((key) => {\r\n dest[key] = src[key];\r\n }); \r\n }\r\n static tryParseUnicode(text) {\r\n let rv = text;\r\n try {\r\n eval('rv=\"' + text + '\"');\r\n } catch (ex) {\r\n console.log('bad unicode');\r\n }\r\n return rv;\r\n }\r\n\r\n // ### filteredMerge\r\n // Like vexMerge, but only for specific attributes.\r\n static filteredMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n dest[attr] = src[attr];\r\n }\r\n });\r\n }\r\n\r\n static get localScore() {\r\n return '_smoosicScore';\r\n }\r\n\r\n static loadRemoteFile(path) {\r\n const req = new XMLHttpRequest();\r\n req.addEventListener('load', () => {\r\n callback(req.responseText);\r\n });\r\n req.open('GET', path);\r\n req.send();\r\n }\r\n\r\n // This is the token map we use to reduce the size of\r\n // serialized data.\r\n static get tokenMap() {\r\n var _tm = `{\r\n \"a\": \"score\",\r\n \"b\": \"layout\",\r\n \"c\": \"leftMargin\",\r\n \"d\": \"rightMargin\",\r\n \"e\": \"topMargin\",\r\n \"f\": \"bottomMargin\",\r\n \"g\": \"pageWidth\",\r\n \"h\": \"pageHeight\",\r\n \"i\": \"orientation\",\r\n \"j\": \"interGap\",\r\n \"k\": \"intraGap\",\r\n \"l\": \"svgScale\",\r\n \"m\": \"zoomScale\",\r\n \"n\": \"zoomMode\",\r\n \"o\": \"pages\",\r\n \"p\": \"pageSize\",\r\n \"q\": \"startIndex\",\r\n \"r\": \"renumberingMap\",\r\n \"s\": \"staves\",\r\n \"t\": \"staffId\",\r\n \"u\": \"staffX\",\r\n \"v\": \"staffY\",\r\n \"w\": \"adjY\",\r\n \"x\": \"staffWidth\",\r\n \"y\": \"staffHeight\",\r\n \"z\": \"keySignatureMap\",\r\n \"aa\": \"instrumentInfo\",\r\n \"ba\": \"instrumentName\",\r\n \"ca\": \"keyOffset\",\r\n \"da\": \"clef\",\r\n \"ea\": \"modifiers\",\r\n \"fa\": \"startSelector\",\r\n \"ga\": \"staff\",\r\n \"ha\": \"measure\",\r\n \"ia\": \"voice\",\r\n \"ja\": \"tick\",\r\n \"ka\": \"pitches\",\r\n \"la\": \"endSelector\",\r\n \"ma\": \"xOffset\",\r\n \"na\": \"cp1y\",\r\n \"oa\": \"cp2y\",\r\n \"pa\": \"attrs\",\r\n \"qa\": \"id\",\r\n \"ra\": \"type\",\r\n \"sa\": \"ctor\",\r\n \"ta\": \"yOffset\",\r\n \"ua\": \"position\",\r\n \"va\": \"measures\",\r\n \"wa\": \"timeSignature\",\r\n \"xa\": \"keySignature\",\r\n \"ya\": \"measureNumber\",\r\n \"za\": \"measureIndex\",\r\n \"ab\": \"systemIndex\",\r\n \"bb\": \"adjX\",\r\n \"cb\": \"tuplets\",\r\n \"db\": \"voices\",\r\n \"eb\": \"notes\",\r\n \"fb\": \"ticks\",\r\n \"gb\": \"numerator\",\r\n \"hb\": \"denominator\",\r\n \"ib\": \"remainder\",\r\n \"jb\": \"letter\",\r\n \"kb\": \"octave\",\r\n \"lb\": \"accidental\",\r\n \"mb\": \"symbol\",\r\n \"nb\": \"bpm\",\r\n \"ob\": \"display\",\r\n \"pb\": \"beatDuration\",\r\n \"qb\": \"beamBeats\",\r\n \"rb\": \"endBeam\",\r\n \"sb\": \"textModifiers\",\r\n \"tb\": \"text\",\r\n \"ub\": \"endChar\",\r\n \"vb\": \"fontInfo\",\r\n \"wb\": \"size\",\r\n \"xb\": \"family\",\r\n \"yb\": \"style\",\r\n \"zb\": \"weight\",\r\n \"ac\": \"classes\",\r\n \"bc\": \"verse\",\r\n \"cc\": \"fill\",\r\n \"dc\": \"scaleX\",\r\n \"ec\": \"scaleY\",\r\n \"fc\": \"translateX\",\r\n \"gc\": \"translateY\",\r\n \"hc\": \"selector\",\r\n \"ic\": \"renderedBox\",\r\n \"jc\": \"x\",\r\n \"kc\": \"y\",\r\n \"lc\": \"width\",\r\n \"mc\": \"height\",\r\n \"nc\": \"logicalBox\",\r\n \"oc\": \"noteType\",\r\n \"pc\": \"cautionary\",\r\n \"qc\": \"articulations\",\r\n \"rc\": \"articulation\",\r\n \"sc\": \"activeVoice\",\r\n \"tc\": \"flagState\",\r\n \"uc\": \"invert\",\r\n \"vc\": \"fontSize\",\r\n \"wc\": \"yOffsetLine\",\r\n \"xc\": \"yOffsetPixels\",\r\n \"yc\": \"scoreText\",\r\n \"zc\": \"backup\",\r\n \"ad\": \"edited\",\r\n \"bd\": \"pagination\",\r\n \"cd\": \"boxModel\",\r\n \"dd\": \"justification\",\r\n \"ed\": \"autoLayout\",\r\n \"fd\": \"ornaments\",\r\n \"gd\": \"offset\",\r\n \"hd\": \"ornament\",\r\n \"id\": \"tempoMode\",\r\n \"jd\": \"tempoText\",\r\n \"kd\": \"barline\",\r\n \"ld\": \"systemBreak\",\r\n \"md\": \"graceNotes\",\r\n \"nd\": \"tones\",\r\n \"od\": \"tuplet\",\r\n \"pd\": \"beam_group\",\r\n \"qd\": \"renderId\",\r\n \"rd\": \"numNotes\",\r\n \"sd\": \"totalTicks\",\r\n \"td\": \"stemTicks\",\r\n \"ud\": \"durationMap\",\r\n \"vd\": \"bracketed\",\r\n \"wd\": \"ratioed\",\r\n \"xd\": \"location\",\r\n \"yd\": \"systemGroups\",\r\n \"zd\": \"leftConnector\",\r\n \"ae\": \"padLeft\",\r\n \"be\": \"customStretch\",\r\n \"ce\": \"engravingFont\",\r\n \"de\": \"customProportion\",\r\n \"ee\": \"columnAttributeMap\",\r\n \"fe\": \"tempo\",\r\n \"ge\": \"textGroups\",\r\n \"he\": \"textBlocks\",\r\n \"ie\": \"backupBlocks\",\r\n \"je\": \"blocks\",\r\n \"ke\": \"_text\",\r\n \"le\": \"parser\",\r\n \"me\": \"fonts\",\r\n \"ne\": \"name\",\r\n \"oe\": \"purpose\",\r\n \"pe\": \"custom\",\r\n \"qe\": \"transposeIndex\",\r\n \"re\": \"noteHead\",\r\n \"se\": \"slash\",\r\n \"te\": \"pointSize\",\r\n \"ue\": \"spacing\",\r\n \"ve\": \"relativePosition\",\r\n \"we\": \"activeText\",\r\n \"xe\": \"attachToSelector\",\r\n \"ye\": \"musicXOffset\",\r\n \"ze\": \"musicYOffset\",\r\n \"af\": \"formattingIterations\",\r\n \"bf\": \"startBar\",\r\n \"cf\": \"endBar\",\r\n \"df\": \"endingId\",\r\n \"ef\": \"autoJustify\",\r\n \"ff\": \"thickness\",\r\n \"gf\": \"number\",\r\n \"hf\": \"preferences\",\r\n \"if\": \"autoPlay\",\r\n \"jf\": \"autoAdvance\",\r\n \"kf\": \"defaultDupleDuration\",\r\n \"lf\": \"defaultTripleDuration\",\r\n \"mf\": \"scoreInfo\",\r\n \"nf\": \"version\",\r\n \"of\": \"title\",\r\n \"pf\": \"subTitle\",\r\n \"qf\": \"composer\",\r\n \"rf\": \"copyright\",\r\n \"sf\": \"localIndex\",\r\n \"tf\": \"hairpinType\",\r\n \"uf\": \"customText\",\r\n \"vf\": \"noteSpacing\",\r\n \"wf\": \"lines\",\r\n \"xf\": \"from\",\r\n \"yf\": \"layoutManager\",\r\n \"zf\": \"pageLayouts\",\r\n \"ag\": \"fillStyle\",\r\n \"bg\": \"hidden\",\r\n \"cg\": \"adjustNoteWidthLyric\",\r\n \"dg\": \"xOffsetStart\",\r\n \"eg\": \"xOffsetEnd\",\r\n \"fg\": \"measureFormats\",\r\n \"gg\": \"format\",\r\n \"hg\": \"pageBreak\",\r\n \"ig\": \"xOffsetLeft\",\r\n \"jg\": \"xOffsetRight\",\r\n \"kg\": \"padAllInSystem\",\r\n \"lg\": \"rotate\",\r\n \"mg\": \"actualBeats\",\r\n \"ng\": \"useSymbol\",\r\n \"og\": \"showPiano\",\r\n \"pg\": \"globalLayout\",\r\n \"qg\": \"measureInstrumentMap\",\r\n \"rg\": \"partInfo\",\r\n \"sg\": \"partName\",\r\n \"tg\": \"partAbbreviation\",\r\n \"ug\": \"stavesAfter\",\r\n \"vg\": \"stavesBefore\",\r\n \"wg\": \"measureFormatting\",\r\n \"xg\": \"preserveTextGroups\",\r\n \"yg\": \"cueInScore\",\r\n \"zg\": \"tie_spacing\",\r\n \"ah\": \"position_end\",\r\n \"bh\": \"transposingScore\",\r\n \"ch\": \"proportionality\",\r\n \"dh\": \"maxMeasureSystem\",\r\n \"eh\": \"cp2x\",\r\n \"fh\": \"restBreak\",\r\n \"gh\": \"expandMultimeasureRests\",\r\n \"hh\": \"midiInstrument\",\r\n \"ih\": \"channel\",\r\n \"jh\": \"program\",\r\n \"kh\": \"volume\",\r\n \"lh\": \"pan\",\r\n \"mh\": \"midiDevice\"\r\n }`;\r\n return JSON.parse(_tm);\r\n }\r\n\r\n static get valueTokens() {\r\n var vm = `{\"@sn\",\"SmoNote\"}`;\r\n return JSON.parse(vm);\r\n }\r\n\r\n static reverseMap(map) {\r\n const rv = {};\r\n const keys = Object.keys(map);\r\n keys.forEach((key) => {\r\n rv[map[key]] = key;\r\n });\r\n return rv;\r\n }\r\n\r\n static get tokenValues() {\r\n return smoSerialize.reverseMap(smoSerialize.tokenMap);\r\n }\r\n\r\n // ## detokenize\r\n // If we are saving, replace token values with keys, since the keys are smaller.\r\n // if we are loading, replace the token keys with values so the score can\r\n // deserialize it\r\n static detokenize(json, dictionary) {\r\n const rv = {};\r\n const smoKey = (key) => {\r\n return typeof (dictionary[key]) !== 'undefined' ? dictionary[key] : key;\r\n }\r\n const _tokenRecurse = (input, output) => {\r\n if (input === null) {\r\n return;\r\n }\r\n const keys = Object.keys(input);\r\n keys.forEach((key) => {\r\n const val = input[key];\r\n const dkey = smoKey(key);\r\n if (typeof (val) == 'string' || typeof (val) == 'number' || typeof (val) == 'boolean') {\r\n output[dkey] = val;\r\n // console.log('240: output[' + dkey + '] = ' + val);\r\n }\r\n if (typeof (val) == 'object' && key != 'dictionary') {\r\n if (Array.isArray(val)) {\r\n output[dkey] = [];\r\n // console.log('245: processing array ' + dkey);\r\n val.forEach((arobj) => {\r\n if (typeof (arobj) === 'string' || typeof (arobj) === 'number' || typeof (arobj) === 'boolean') {\r\n output[dkey].push(arobj);\r\n // console.log('249: ar element ' + arobj);\r\n }\r\n else if (arobj && typeof (arobj) === 'object') {\r\n const nobj = {};\r\n _tokenRecurse(arobj, nobj);\r\n output[dkey].push(nobj);\r\n }\r\n });\r\n } else {\r\n const nobj = {};\r\n // console.log('259: processing child object of ' + dkey);\r\n _tokenRecurse(val, nobj);\r\n output[dkey] = nobj;\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json, rv);\r\n // console.log(JSON.stringify(rv,null,' '));\r\n return rv;\r\n }\r\n\r\n static incrementIdentifier(label) {\r\n const increcurse = (ar, ix) => {\r\n const n1 = (ar[ix].charCodeAt(0) - 97) + 1;\r\n if (n1 > 25) {\r\n ar[ix] = 'a';\r\n if (ar.length <= ix + 1) {\r\n ar.push('a');\r\n } else {\r\n increcurse(ar, ix + 1);\r\n }\r\n } else {\r\n ar[ix] = String.fromCharCode(97 + n1);\r\n }\r\n }\r\n if (!label) {\r\n label = 'a';\r\n }\r\n const ar = label.split('');\r\n increcurse(ar, 0);\r\n label = ar.join('');\r\n return label;\r\n }\r\n\r\n // used to generate a tokenization scheme that I will use to make\r\n // saved files smaller\r\n static jsonTokens(json) {\r\n const map = {};\r\n const valmap = {};\r\n const startKeys = Object.keys(smoSerialize.tokenMap);\r\n let keyLabel = startKeys[startKeys.length - 1];\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n\r\n const exist = smoSerialize.tokenValues;\r\n const addMap = (key) => {\r\n if (!exist[key] && !map[key] && key.length > keyLabel.length) {\r\n map[key] = keyLabel;\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n }\r\n };\r\n const _tokenRecurse = (obj) => {\r\n if (!obj) {\r\n console.warn('failure to parse');\r\n return;\r\n }\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n const val = obj[key];\r\n if (val !== null) {\r\n if (typeof (val) === 'string' || typeof (val) === 'number'\r\n || typeof (val) === 'boolean') {\r\n addMap(key);\r\n }\r\n if (typeof (val) == 'object') {\r\n if (Array.isArray(val)) {\r\n addMap(key);\r\n val.forEach((arobj) => {\r\n if (arobj && typeof (arobj) === 'object') {\r\n _tokenRecurse(arobj);\r\n }\r\n });\r\n } else {\r\n addMap(key);\r\n _tokenRecurse(val);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json);\r\n const mkar = Object.keys(map);\r\n const m2 = {};\r\n mkar.forEach((mk) => {\r\n m2[map[mk]] = mk;\r\n })\r\n console.log(JSON.stringify(m2, null, ' '));\r\n }\r\n\r\n // ### serializedMerge\r\n // serialization-friendly, so merged, copied objects are deep-copied\r\n static serializedMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) !== 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n dest[attr] = src[attr];\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Only serialize non-default values.\r\n * @param {*} defaults - the class-defined defaults\r\n * @param {*} attrs - the list of attributes (untyped)\r\n * @param {*} src - the object we're serializing\r\n * @param {*} dest - the output json\r\n */\r\n static serializedMergeNonDefault(defaults, attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n // always persist object type so it can be deserialized\r\n if (src[attr] !== defaults[attr] || attr === 'ctor') {\r\n dest[attr] = src[attr];\r\n }\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n if (src[attr] != defaults[attr]) {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n static stringifyAttrs(attrs, obj) {\r\n let rv = '';\r\n attrs.forEach((attr) => {\r\n if (obj[attr]) {\r\n rv += attr + ':' + obj[attr] + ', ';\r\n } else {\r\n rv += attr + ': null,';\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class) {\r\n const xxx = Smo.getClass(_class + '.printTranslate');\r\n if (typeof (xxx) === 'function') {\r\n xxx();\r\n }\r\n }\r\n}\r\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\r\n// MIT License\r\n\r\nimport { FontInfo, VexFlow } from '../common/vex';\r\nconst VF = VexFlow;\r\nexport interface FontGlyph {\r\n xMin: number,\r\n xMax: number,\r\n yMin: number,\r\n yMax: number,\r\n ha: number,\r\n leftSideBearing: number,\r\n advanceWidth: number\r\n}\r\nexport interface TextFormatterInfo extends Record {\r\n family: string;\r\n resolution?: number;\r\n glyphs?: Record;\r\n serifs: boolean;\r\n monospaced: boolean;\r\n italic: boolean;\r\n bold: boolean;\r\n maxSizeGlyph?: string;\r\n superscriptOffset?: number;\r\n subscriptOffset?: number;\r\n description: string;\r\n}\r\n\r\n/**\r\n * Y information, 0 is baseline, yMin is lowest point.\r\n */\r\nexport interface yExtent {\r\n yMin: number;\r\n yMax: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Text widths are stored in a cache, so we don't have to recompute widths\r\n * for the same font + string combination.\r\n *\r\n * The cache is first keyed by the font information. The key is of the form:\r\n * `${family}-${size}-${weight}-${style}`\r\n * The second level key is the specific text to be measured.\r\n *\r\n * The stored value is the measured width in `em` units.\r\n * textWidth == textWidthCache[cacheKey][textToMeasure]\r\n */\r\nconst textWidthCache: Record | undefined> = {};\r\nconst textHeightCache: Record | undefined> = {};\r\n/**\r\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\r\n * The metrics for those fonts will be made available to the application.\r\n */\r\nconst registry: Record = {};\r\n\r\nexport class TextFormatter {\r\n\r\n /**\r\n * Return all registered font families.\r\n */\r\n static getFontFamilies(): TextFormatterInfo[] {\r\n const registeredFonts: TextFormatterInfo[] = [];\r\n for (const fontFamily in registry) {\r\n const formatterInfo = registry[fontFamily];\r\n registeredFonts.push({ ...formatterInfo });\r\n }\r\n return registeredFonts;\r\n }\r\n\r\n /**\r\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\r\n *\r\n * This method creates a formatter for the font that most closely matches the requested font.\r\n * We compare font family, bold, and italic attributes.\r\n * This method will return a fallback formatter if there are no matches.\r\n */\r\n static create(requestedFont: FontInfo = {}): TextFormatter {\r\n if (!requestedFont.family) {\r\n requestedFont.family = 'Sans Serif';\r\n }\r\n\r\n // TODO: One potential (small) optimization is to cache the TextFormatter object\r\n // returned for each font info. We would probably want to clear the cache if\r\n // the registry is ever updated.\r\n\r\n const candidates: TextFormatterInfo[] = [];\r\n // The incoming font family is a string of comma-separated font family names.\r\n // (e.g., `PetalumaScript, Arial, sans-serif`).\r\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\r\n for (const requestedFamily of requestedFamilies) {\r\n for (const fontFamily in registry) {\r\n // Support cases where the registry contains 'Roboto Slab Medium',\r\n // but the requestedFont.family is 'Roboto Slab'.\r\n if (fontFamily.startsWith(requestedFamily)) {\r\n candidates.push(registry[fontFamily]);\r\n }\r\n }\r\n if (candidates.length > 0) {\r\n break;\r\n }\r\n }\r\n\r\n let formatter;\r\n if (candidates.length === 0) {\r\n // No match, so return a fallback text formatter.\r\n formatter = new TextFormatter(Object.values(registry)[0]);\r\n } else if (candidates.length === 1) {\r\n formatter = new TextFormatter(candidates[0]);\r\n } else {\r\n const bold = VF.Font.isBold(requestedFont.weight);\r\n const italic = VF.Font.isItalic(requestedFont.style);\r\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\r\n if (perfectMatch) {\r\n formatter = new TextFormatter(perfectMatch);\r\n } else {\r\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\r\n if (partialMatch) {\r\n formatter = new TextFormatter(partialMatch);\r\n } else {\r\n formatter = new TextFormatter(candidates[0]);\r\n }\r\n }\r\n }\r\n\r\n const fontSize = requestedFont.size;\r\n if (typeof fontSize !== 'undefined') {\r\n const fontSizeInPt = VF.Font.convertSizeToPointValue(fontSize);\r\n formatter.setFontSize(fontSizeInPt);\r\n }\r\n return formatter;\r\n }\r\n\r\n /**\r\n * @param fontFamily used as a key to the font registry.\r\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\r\n */\r\n static getInfo(fontFamily: string): TextFormatterInfo | undefined {\r\n return registry[fontFamily];\r\n }\r\n\r\n /**\r\n * Apps may register their own fonts and metrics, and those metrics\r\n * will be available to the app for formatting.\r\n *\r\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\r\n * @param info\r\n * @param overwrite\r\n */\r\n static registerInfo(info: TextFormatterInfo, overwrite: boolean = false): void {\r\n const fontFamily = info.family;\r\n const currFontInfo = registry[fontFamily];\r\n if (currFontInfo === undefined || overwrite) {\r\n registry[fontFamily] = info;\r\n }\r\n }\r\n\r\n /** Font family. */\r\n protected family: string = '';\r\n\r\n /** Specified in `pt` units. */\r\n protected size: number = 14;\r\n\r\n /** Font metrics are extracted at 1000 upem (units per em). */\r\n protected resolution: number = 1000;\r\n\r\n /**\r\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\r\n * bounding box metrics such as:\r\n * ```\r\n * {\r\n * x_min: 48,\r\n * x_max: 235,\r\n * y_min: -17,\r\n * y_max: 734,\r\n * ha: 751,\r\n * leftSideBearing: 48,\r\n * advanceWidth: 286,\r\n * }\r\n * ```\r\n */\r\n protected glyphs: Record = {};\r\n protected description?: string;\r\n protected serifs: boolean = false;\r\n protected monospaced: boolean = false;\r\n protected italic: boolean = false;\r\n protected bold: boolean = false;\r\n protected superscriptOffset: number = 0;\r\n protected subscriptOffset: number = 0;\r\n protected maxSizeGlyph: string = '@';\r\n\r\n // This is an internal key used to index the `textWidthCache`.\r\n protected cacheKey: string = '';\r\n\r\n /**\r\n * Use `TextFormatter.create(...)` to build an instance from information previously\r\n * registered via `TextFormatter.registerInfo(info)`.\r\n */\r\n private constructor(formatterInfo: TextFormatterInfo) {\r\n this.updateParams(formatterInfo);\r\n }\r\n get localHeightCache(): Record {\r\n if (textHeightCache[this.cacheKey] === undefined) {\r\n textHeightCache[this.cacheKey] = {};\r\n }\r\n return textHeightCache[this.cacheKey] ?? {};\r\n }\r\n updateParams(params: TextFormatterInfo): void {\r\n if (params.family) this.family = params.family;\r\n if (params.resolution) this.resolution = params.resolution;\r\n if (params.glyphs) this.glyphs = params.glyphs;\r\n if (params.serifs) this.serifs = params.serifs;\r\n if (params.monospaced) this.monospaced = params.monospaced;\r\n if (params.italic) this.italic = params.italic;\r\n if (params.bold) this.bold = params.bold;\r\n if (params.maxSizeGlyph) this.maxSizeGlyph = params.maxSizeGlyph;\r\n if (params.superscriptOffset) this.superscriptOffset = params.superscriptOffset;\r\n if (params.subscriptOffset) this.subscriptOffset = params.subscriptOffset;\r\n this.updateCacheKey();\r\n }\r\n\r\n /** Create a hash with the current font data, so we can cache computed widths. */\r\n updateCacheKey(): void {\r\n const family = this.family.replace(/\\s+/g, '_');\r\n const size = this.size;\r\n const weight = this.bold ? VF.FontWeight.BOLD : VF.FontWeight.NORMAL;\r\n const style = this.italic ? VF.FontStyle.ITALIC : VF.FontStyle.NORMAL;\r\n // Use the same key format as SVGContext.\r\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\r\n }\r\n\r\n /**\r\n * The glyphs table is indexed by the character (e.g., 'C', '@').\r\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\r\n */\r\n getGlyphMetrics(character: string): FontGlyph {\r\n if (this.glyphs[character]) {\r\n return this.glyphs[character];\r\n } else {\r\n return this.glyphs[this.maxSizeGlyph];\r\n }\r\n }\r\n\r\n get maxHeight(): number {\r\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\r\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\r\n * For the space character ' ' as defined in the:\r\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\r\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\r\n */\r\n getWidthForCharacterInEm(c: string): number {\r\n const metrics = this.getGlyphMetrics(c);\r\n if (!metrics) {\r\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\r\n return 0.65;\r\n } else {\r\n const advanceWidth = metrics.advanceWidth ?? 0;\r\n return advanceWidth / this.resolution;\r\n }\r\n }\r\n /**\r\n * Retrieve the character's y bounds (ymin, ymax) and height.\r\n */\r\n getYForCharacterInPx(c: string): yExtent {\r\n const metrics = this.getGlyphMetrics(c);\r\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n if (!metrics) {\r\n return rv;\r\n } else {\r\n if (typeof metrics.yMin === 'number') {\r\n rv.yMin = (metrics.yMin / this.resolution) * this.fontSizeInPixels;\r\n }\r\n if (typeof metrics.yMax === 'number') {\r\n rv.yMax = (metrics.yMax / this.resolution) * this.fontSizeInPixels;\r\n }\r\n rv.height = rv.yMax - rv.yMin;\r\n return rv;\r\n }\r\n }\r\n getYForStringInPx(str: string): yExtent {\r\n const entry = this.localHeightCache;\r\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n const cache = entry[str];\r\n if (cache !== undefined) {\r\n return cache;\r\n }\r\n for (let i = 0; i < str.length; ++i) {\r\n const curY = this.getYForCharacterInPx(str[i]);\r\n extent.yMin = Math.min(extent.yMin, curY.yMin);\r\n extent.yMax = Math.max(extent.yMax, curY.yMax);\r\n extent.height = extent.yMax - extent.yMin;\r\n }\r\n entry[str] = extent;\r\n return extent;\r\n }\r\n /**\r\n * Retrieve the total width of `text` in `em` units.\r\n */\r\n getWidthForTextInEm(text: string): number {\r\n const key = this.cacheKey;\r\n // Get the cache for this specific font family, size, weight, style combination.\r\n // The cache contains previously computed widths for different `text` strings.\r\n let cachedWidths = textWidthCache[key];\r\n if (cachedWidths === undefined) {\r\n cachedWidths = {};\r\n textWidthCache[key] = cachedWidths;\r\n }\r\n\r\n let width = cachedWidths[text];\r\n if (width === undefined) {\r\n width = 0;\r\n for (let i = 0; i < text.length; ++i) {\r\n width += this.getWidthForCharacterInEm(text[i]);\r\n }\r\n cachedWidths[text] = width;\r\n }\r\n return width;\r\n }\r\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\r\n getWidthForTextInPx(text: string): number {\r\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * @param size in pt.\r\n */\r\n setFontSize(size: number): this {\r\n this.size = size;\r\n // The width cache key depends on the current font size.\r\n this.updateCacheKey();\r\n return this;\r\n }\r\n\r\n /** `this.size` is specified in points. Convert to pixels. */\r\n get fontSizeInPixels(): number {\r\n return this.size * VF.Font.scaleToPxFrom.pt;\r\n }\r\n\r\n getResolution(): number {\r\n return this.resolution;\r\n }\r\n}\r\n","import { Vex as SmoVex, Note as VexNote, StaveNote as VexStaveNote, StemmableNote as VexStemmableNote, Beam as VexBeam, Tuplet as VexTuplet, \r\n Voice as VexVoice, Formatter as VexFormatter, Accidental as VexAccidental, \r\n Annotation as VexAnnotation, StaveNoteStruct as VexStaveNoteStruct, \r\n StaveText as VexStaveText, StaveModifier as VexStaveModifier,\r\nStave as VexStave, StaveModifierPosition as VexStaveModifierPosition,\r\nFont as VexFont, FontInfo as VexFontInfo, FontStyle as VexFontStyle, FontWeight as VexFontWeight,\r\nTupletOptions as VexTupletOptions, Curve as VexCurve, StaveTie as VexStaveTie,\r\n Music as VexMusic, ChordSymbol as VexChordSymbol, ChordSymbolBlock as VexChordSymbolBlock } from \"vexflow_smoosic\";\r\n\r\n /**\r\n * Module vex.ts. This handles vexflow calls and structures that have changed \r\n * between v4 and v5. There will be a custom version of this file for each.\r\n * Most of the differences are trivial - e.g. different naming conventions for variables.\r\n */\r\nimport { smoSerialize } from \"./serializationHelpers\";\r\n// export type Vex = SmoVex;\r\nexport const VexFlow = SmoVex.Flow;\r\nconst VF = VexFlow;\r\nexport type Music = VexMusic;\r\nexport type Note = VexNote;\r\nexport type StaveNote = VexStaveNote;\r\nexport type StemmableNote = VexStemmableNote;\r\nexport type Beam = VexBeam;\r\nexport type Tuplet = VexTuplet;\r\nexport type TupletOptions = VexTupletOptions;\r\nexport type Voice = VexVoice;\r\nexport type Accidental = VexAccidental;\r\nexport type Font = VexFont;\r\nexport type FontInfo = VexFontInfo;\r\nexport type FontStyle = VexFontStyle;\r\nexport type FontWeight = VexFontWeight;\r\nexport type Formatter = VexFormatter;\r\nexport type Annotation = VexAnnotation;\r\nexport type StaveNoteStruct = VexStaveNoteStruct;\r\nexport type StaveModifier = VexStaveModifier;\r\nexport type StaveText = VexStaveText;\r\nexport type Stave = VexStave;\r\nexport type Curve = VexCurve;\r\nexport type StaveTie = VexStaveTie;\r\nexport type StaveModifierPosition = VexStaveModifierPosition;\r\n\r\n\r\nexport interface GlyphInfo {\r\n width: number,\r\n height: number,\r\n yTop: number,\r\n yBottom: number,\r\n spacingRight: number,\r\n vexGlyph: string | null\r\n}\r\n\r\n// DI interfaces to create vexflow objects\r\nexport interface CreateVexNoteParams {\r\n isTuplet: boolean, measureIndex: number, clef: string,\r\n closestTicks: string, exactTicks: string, keys: string[],\r\n noteType: string\r\n}; \r\n\r\n export interface SmoVexTupletParams {\r\n vexNotes: Note[],\r\n numNotes: number,\r\n notesOccupied: number,\r\n location: number\r\n};\r\n\r\nexport function chordSubscriptOffset() {\r\n return VF.ChordSymbol.subscriptOffset;\r\n}\r\nexport function chordSuperscriptOffset() {\r\n return VF.ChordSymbol.superscriptOffset;\r\n}\r\nexport interface SmoVexVoiceParams {\r\n actualBeats: number,\r\n beatDuration: number,\r\n notes: Note[]\r\n}\r\nexport function createVoice(params: SmoVexVoiceParams) {\r\n const voice = new VF.Voice({\r\n num_beats: params.actualBeats,\r\n beat_value: params.beatDuration\r\n }).setMode(VF.Voice.Mode.SOFT);\r\n voice.addTickables(params.notes);\r\n return voice;\r\n}\r\nexport interface SmoVexStaveParams {\r\n x: number,\r\n y: number,\r\n padLeft: number,\r\n id: string,\r\n staffX: number,\r\n staffY: number,\r\n staffWidth: number,\r\n forceClef: boolean,\r\n clef: string,\r\n forceKey: boolean,\r\n key: string,\r\n canceledKey: string | null,\r\n startX: number,\r\n adjX: number,\r\n context: any\r\n}\r\n/**\r\n * Vex4 and Vex5 handle width differently. Vex5, width comes directly from the \r\n * font glyph, vex4 the glyph is a path so it comes from the stored information about \r\n * the path.\r\n * \r\n * @param smoGlyph \r\n * @returns \r\n */\r\nexport function getGlyphWidth(smoGlyph: GlyphInfo) {\r\n if (smoGlyph.vexGlyph) {\r\n /* const vexGlyph = (VF.Glyphs as Record)[smoGlyph.vexGlyph];\r\n if (vexGlyph) {\r\n return VF.Element.measureWidth(vexGlyph);\r\n }\r\n return VF.Element.measureWidth(smoGlyph.vexGlyph); */\r\n const vf = VF.Glyph.MUSIC_FONT_STACK[0].getGlyphs()[smoGlyph.vexGlyph];\r\n return (vf.x_max - vf.x_min) * glyphPixels();\r\n } \r\n return smoGlyph.width;\r\n}\r\n/**\r\n * V4 uses the glyph name, V5 uses the unicode value\r\n * @returns \r\n */\r\nexport function getSlashGlyph() {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getRepeatBar() {\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getMultimeasureRest(multimeasureLength: number) {\r\n return new VF.MultiMeasureRest(multimeasureLength,\r\n // { numberOfMeasures: this.smoMeasure.svg.multimeasureLength });\r\n { number_of_measures: multimeasureLength });\r\n}\r\nexport function pitchToLedgerLine(vexPitch: string, clef: string) {\r\n return -1.0 * (VF.keyProperties(vexPitch).line - 4.5)\r\n - VF.clefProperties(clef).line_shift;\r\n}\r\nexport function vexCanonicalNotes(): any {\r\n // return VF.Music.canonicalNotes[SmoMusic.noteValues[vexKey].int_val];\r\n return VF.Music.canonical_notes;\r\n}\r\nexport function createStave(params: SmoVexStaveParams) {\r\n const stave = new VF.Stave(params.x, params.y, params.staffWidth - params.padLeft);\r\n stave.setAttribute('id', params.id);\r\n // If there is padLeft, draw an invisible box so the padding is included in the measure box\r\n if (params.padLeft) {\r\n params.context.rect(params.staffX, params.y, params.padLeft, 50, {\r\n fill: 'none', 'stroke-width': 1, stroke: 'white'\r\n });\r\n }\r\n // stave.options.spaceAboveStaffLn = 0; // don't let vex place the staff, we want to.\r\n stave.options.space_above_staff_ln = 0; // don't let vex place the staff, we want to.\r\n // Add a clef and time signature.\r\n if (params.forceClef) {\r\n stave.addClef(params.clef);\r\n }\r\n if (params.forceKey) {\r\n const sig = new VF.KeySignature(params.key);\r\n if (params.canceledKey) {\r\n sig.cancelKey(params.canceledKey);\r\n }\r\n sig.addToStave(stave);\r\n }\r\n const curX = stave.getNoteStartX();\r\n stave.setNoteStartX(curX + (params.startX - params.adjX)); \r\n\r\n return stave;\r\n}\r\n\r\nexport function getVexTuplets(params: SmoVexTupletParams) {\r\n const vexTuplet = new VF.Tuplet(params.vexNotes, {\r\n num_notes: params.numNotes,\r\n notes_occupied: params.notesOccupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: params.location\r\n });\r\n return vexTuplet;\r\n}\r\nexport function getVexNoteParameters(params: CreateVexNoteParams) {\r\n // If this is a tuplet, we only get the duration so the appropriate stem\r\n // can be rendered. Vex calculates the actual ticks later when the tuplet is made\r\n var duration =\r\n params.isTuplet ?\r\n params.closestTicks :\r\n params.exactTicks;\r\n if (typeof (duration) === 'undefined') {\r\n console.warn('bad duration in measure ' + params.measureIndex);\r\n duration = '8';\r\n } \r\n // transpose for instrument-specific keys\r\n const noteParams: StaveNoteStruct = {\r\n clef: params.clef,\r\n keys: params.keys,\r\n duration: duration + params.noteType\r\n };\r\n return { noteParams, duration };\r\n}\r\nexport interface SmoVexStemParams {\r\n voiceCount: number,\r\n voiceIx: number,\r\n isAuto: boolean,\r\n isUp: boolean\r\n}\r\nexport function applyStemDirection(params: SmoVexStemParams, vxParams: StaveNoteStruct) {\r\n if (params.voiceCount === 1 && params.isAuto) {\r\n vxParams.auto_stem = true;\r\n } else if (!params.isAuto) {\r\n vxParams.stem_direction = params.isUp ? 1 : -1;\r\n } else if (params.voiceIx % 2) {\r\n vxParams.stem_direction = -1;\r\n } else {\r\n vxParams.stem_direction = 1;\r\n }\r\n}\r\nconst setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n};\r\nexport function createStaveText(text: string, position: number, options: any) {\r\n return new VexStaveText(text, position, options);\r\n}\r\nexport interface SmoVexHairpinParams {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n hairpinType: number,\r\n height: number,\r\n yOffset: number,\r\n leftShiftPx: number,\r\n rightShiftPx: number\r\n}\r\nexport function createHairpin(params: SmoVexHairpinParams) {\r\n const vexParams: Record = {};\r\n if (params.vxStart) {\r\n vexParams.first_note = params.vxStart;\r\n }\r\n if (params.vxEnd) {\r\n vexParams.last_note = params.vxEnd;\r\n }\r\n const hairpin = new VF.StaveHairpin(\r\n vexParams, params.hairpinType);\r\n hairpin.setRenderOptions({\r\n height: params.height,\r\n y_shift: params.yOffset,\r\n left_shift_px: params.leftShiftPx,\r\n right_shift_px: params.rightShiftPx\r\n });\r\n return hairpin;\r\n}\r\nexport interface SmoVexSlurParameters {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n thickness: number,\r\n xShift: number,\r\n yShift: number,\r\n cps: DOMPoint[],\r\n invert: boolean,\r\n position: number,\r\n positionEnd: number\r\n}\r\nexport const defaultMeasurePadding = VF.Stave.defaultPadding;\r\nexport function createSlur(params: SmoVexSlurParameters): Curve {\r\n if (params.vxStart === null && params.vxEnd === null) {\r\n throw(' slur with no points');\r\n }\r\n const vxStart = setSameIfNull(params.vxStart, params.vxEnd);\r\n const vxEnd = setSameIfNull(params.vxEnd, params.vxStart);\r\n const curve = new VF.Curve(vxStart!, vxEnd!,\r\n {\r\n thickness: params.thickness,\r\n x_shift: params.xShift,\r\n y_shift: params.yShift,\r\n cps: params.cps,\r\n invert: params.invert,\r\n position: params.position,\r\n position_end: params.positionEnd\r\n });\r\n return curve;\r\n}\r\nexport interface SmoVexTieParams {\r\n fromLines: number[],\r\n toLines: number[],\r\n firstNote: Note | null,\r\n lastNote: Note | null,\r\n vexOptions: any\r\n}\r\nexport function createTie(params: SmoVexTieParams): StaveTie {\r\n const fromLines = params.fromLines;\r\n const toLines = params.toLines;\r\n const tie = new VF.StaveTie({\r\n first_note: params.firstNote,\r\n last_note: params.lastNote,\r\n first_indices: fromLines,\r\n last_indices: toLines\r\n });\r\n smoSerialize.vexMerge(tie.render_options, params.vexOptions);\r\n return tie;\r\n}\r\nexport const defaultNoteScale: number = 30;\r\nexport const defaultCueScale: number = 19.8;\r\n\r\nexport function glyphPixels() {\r\n return 96 * (defaultNoteScale / (VF.Glyph.MUSIC_FONT_STACK[0].getResolution() * 72));\r\n // return defaultNoteScale;\r\n}\r\n\r\nexport function setFontStack(font: string) {\r\n const fs: Record void> = {\r\n /* Bravura: () => { VexFlow.setFonts('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setFonts('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setFonts('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setFonts('Leland', 'Bravura', 'Gonville', 'Custom'); } */\r\n Bravura: () => { VexFlow.setMusicFont('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setMusicFont('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setMusicFont('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setMusicFont('Leland', 'Bravura', 'Gonville', 'Custom'); }\r\n };\r\n fs[font]();\r\n}\r\n/**\r\n * Render a dynamics glyph. Return the height of width/height of the glyph\r\n * @param context \r\n * @param text \r\n * @param fontSize \r\n * @param x \r\n * @param y \r\n * @returns \r\n */\r\nexport function renderDynamics(context: any, text: string, fontSize: number, x: number, y: number) {\r\n /* const glyph = new VF.Element();\r\n glyph.setText(text);\r\n glyph.setFontSize(fontSize);\r\n glyph.renderText(context, x, y);\r\n return { width: glyph.getWidth(), height: glyph.getHeight() };*/\r\n const glyph = new VF.Glyph(text, fontSize);\r\n glyph.render(context, x, y);\r\n // vex 5 incompatibility.\r\n // x += VF.TextDynamics.GLYPHS[text].width;\r\n const metrics = glyph.getMetrics();\r\n return { width: metrics.width, height: metrics.height }; \r\n}\r\nexport function getOrnamentGlyph(glyph: string) {\r\n return glyph;\r\n // return vexOrnaments[glyph];\r\n}\r\n\r\nexport function addChordGlyph(cs: VexChordSymbol, symbol: string) {\r\n cs.addGlyph(symbol);\r\n}\r\n/**\r\n * get a glyph code to render\r\n * @param code \r\n * @returns \r\n */\r\nexport function getVexGlyphFromChordCode(code: string) {\r\n if (code === 'csymDiminished' || code === 'csymHalfDiminished' || code === 'csymAugmented' || code === 'csymMajorSeventh') {\r\n return code;\r\n }\r\n return ChordSymbolGlyphs[code].code;\r\n}\r\n/**\r\n * Get the chord symbol glyph from the vex glyph\r\n * @export\r\n * @param {string} code\r\n * @return {*} \r\n */\r\nexport function getChordSymbolGlyphFromCode(code: string) {\r\n const keys = Object.keys(ChordSymbolGlyphs);\r\n const rv = keys.find((key) => ChordSymbolGlyphs[key].code === code);\r\n if (typeof(rv) === 'string') {\r\n return rv;\r\n }\r\n return code;\r\n}\r\nexport function getChordSymbolMetricsForGlyph(code: string) {\r\n if (code === 'b') {\r\n code = 'accidentalFlat';\r\n }\r\n if (code === '#') {\r\n code = 'accidentalSharp';\r\n }\r\n const glyphMetrics = VexChordSymbol.metrics.glyphs;\r\n return glyphMetrics[code];\r\n}\r\n/**\r\n * Vex 5 compatibility. yShift\r\n */\r\nexport function blockMetricsYShift(metrics: any) {\r\n return metrics.y_shift;\r\n}\r\n// Glyph data. Note Vex4 and Vex5 have different requirements. Vex5 expects the unicode identifier (16-bit number)\r\n// where vex4 expects a string glyph\r\nexport const ChordSymbolGlyphs: Record = {\r\n diminished: {\r\n code: 'csymDiminished',\r\n },\r\n dim: {\r\n code: 'csymDiminished',\r\n },\r\n halfDiminished: {\r\n code: 'csymHalfDiminished',\r\n },\r\n '+': {\r\n code: 'csymAugmented',\r\n },\r\n augmented: {\r\n code: 'csymAugmented',\r\n },\r\n majorSeventh: {\r\n code: 'csymMajorSeventh',\r\n },\r\n csymMinor: {\r\n code: 'csymMinor',\r\n },\r\n minor: {\r\n code: 'csymMinor',\r\n },\r\n '-': {\r\n code: 'csymMinor',\r\n },\r\n '(': {\r\n code: 'csymParensLeftTall',\r\n }, \r\n leftParen: {\r\n code: 'csymParensLeftTall',\r\n },\r\n ')': {\r\n code: 'csymParensRightTall',\r\n },\r\n rightParen: {\r\n code: 'csymParensRightTall',\r\n },\r\n leftBracket: {\r\n code: 'csymBracketLeftTall',\r\n },\r\n rightBracket: {\r\n code: 'csymBracketRightTall',\r\n }, \r\n leftParenTall: {\r\n code: 'csymParensLeftVeryTall',\r\n }, rightParenTall: {\r\n code: 'csymParensRightVeryTall',\r\n },\r\n '/': {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n over: {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n '#': {\r\n code: 'accidentalSharp',\r\n },\r\n b: {\r\n code: 'accidentalFlat',\r\n },\r\n};\r\nexport const vexOrnaments: Record = {\r\n mordent: '\\ue56c' /*ornamentShortTrill*/,\r\n mordent_inverted: '\\ue56d' /*ornamentMordent*/,\r\n turn: '\\ue567' /*ornamentTurn*/,\r\n turn_inverted: '\\ue569' /*ornamentTurnSlash*/,\r\n tr: '\\ue566' /*ornamentTrill*/,\r\n upprall: '\\ue5b5' /*ornamentPrecompSlideTrillDAnglebert*/,\r\n downprall: '\\ue5c3' /*ornamentPrecompDoubleCadenceUpperPrefix*/,\r\n prallup: '\\ue5bb' /*ornamentPrecompTrillSuffixDandrieu*/,\r\n pralldown: '\\ue5c8' /*ornamentPrecompTrillLowerSuffix*/,\r\n upmordent: '\\ue5b8' /*ornamentPrecompSlideTrillBach*/,\r\n downmordent: '\\ue5c4' /*ornamentPrecompDoubleCadenceUpperPrefixTurn*/,\r\n lineprall: '\\ue5b2' /*ornamentPrecompAppoggTrill*/,\r\n prallprall: '\\ue56e' /*ornamentTremblement*/,\r\n scoop: '\\ue5d0' /*brassScoop*/,\r\n doit: '\\ue5d5' /*brassDoitMedium*/,\r\n fall: '\\ue5d7' /*brassFallLipShort*/,\r\n doitLong: '\\ue5d2' /*brassLiftMedium*/,\r\n fallLong: '\\ue5de' /*brassFallRoughMedium*/,\r\n bend: '\\ue5e3' /*brassBend*/,\r\n plungerClosed: '\\ue5e5' /*brassMuteClosed*/,\r\n plungerOpen: '\\ue5e7' /*brassMuteOpen*/,\r\n flip: '\\ue5e1' /*brassFlip*/,\r\n jazzTurn: '\\ue5e4' /*brassJazzTurn*/,\r\n smear: '\\ue5e2' /*brassSmear*/,\r\n}","import { SmoSelector, SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\n\r\n/**\r\n * A generic function that can be sent used to animate playback\r\n */\r\nexport type AudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => void;\r\n/**\r\n * A generic function that can be sent used to clean up playback animation\r\n */\r\nexport type ClearAudioAnimationHandler = (delay: number) => void;\r\n\r\n/**\r\n * Allow users to specify their own music playback animations.\r\n * @category SuiAudio\r\n*/\r\nexport interface SuiAudioAnimationParams {\r\n audioAnimationHandler: AudioAnimationHandler,\r\n clearAudioAnimationHandler: ClearAudioAnimationHandler\r\n}\r\nexport const defaultClearAudioAnimationHandler = (delay: number) => {\r\n if (delay < 1) {\r\n const ell = document.getElementById('vf-music-cursor');\r\n if (ell) {\r\n ell.remove();\r\n }\r\n } else {\r\n setTimeout(() => {\r\n defaultClearAudioAnimationHandler(0);\r\n }, delay);\r\n }\r\n}\r\n /**\r\n * default implementation of playback animation.\r\n * @param selector \r\n * @returns \r\n */\r\n export const defaultAudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => {\r\n const score = view.renderer.score;\r\n \r\n if (!score) {\r\n return;\r\n }\r\n const scroller = view.scroller;\r\n const renderer = view.renderer;\r\n // Get note from 0th staff if we can\r\n const measureSel = SmoSelection.measureSelection(score,\r\n score.staves.length - 1, selector.measure);\r\n const zmeasureSel = SmoSelection.measureSelection(score,\r\n 0, selector.measure);\r\n const measure = measureSel?.measure as SmoMeasure;\r\n if (measure.svg.logicalBox && zmeasureSel?.measure?.svg?.logicalBox) {\r\n const context = renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n const topBox = SvgHelpers.smoBox(zmeasureSel.measure.svg.logicalBox);\r\n topBox.y -= context.box.y;\r\n const botBox = SvgHelpers.smoBox(measure.svg.logicalBox);\r\n botBox.y -= context.box.y;\r\n const height = (botBox.y + botBox.height) - topBox.y;\r\n const measureWidth = botBox.width - measure.svg.adjX;\r\n const nhWidth = 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n let width = measureWidth * durationPct - 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n width = Math.max(nhWidth, width);\r\n const y = topBox.y;\r\n let x = topBox.x + measure.svg.adjX + offsetPct * measureWidth;\r\n const noteBox = score.staves[selector.staff].measures[selector.measure].voices[selector.voice].notes[selector.tick];\r\n if (noteBox && noteBox.logicalBox) {\r\n x = noteBox.logicalBox.x;\r\n }\r\n const screenBox = SvgHelpers.boxPoints(x, y, width, height);\r\n const fillParams: Record = {};\r\n fillParams['fill-opacity'] = '0.5';\r\n fillParams['fill'] = '#4444ff';\r\n const ctx = context.getContext();\r\n defaultClearAudioAnimationHandler(0);\r\n ctx.save();\r\n ctx.openGroup('music-cursor', 'music-cursor');\r\n ctx.rect(x, screenBox.y, width, screenBox.height, fillParams);\r\n ctx.closeGroup();\r\n ctx.restore();\r\n layoutDebug.updatePlayDebug(selector, measure.svg.logicalBox);\r\n scroller.scrollVisibleBox(zmeasureSel.measure.svg.logicalBox); \r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoOscillatorInfo } from '../../smo/data/staffModifiers';\r\nimport { SuiSampleMedia, AudioSample } from './samples';\r\n\r\n/**\r\n * Create audio reverb node.\r\n * @category SuiAudio\r\n */\r\nexport class SuiReverb {\r\n static get defaults() {\r\n return { length: 0.2, decay: 2 };\r\n }\r\n static impulse: AudioBuffer | null;\r\n\r\n connect(destination: AudioNode) {\r\n this.output.connect(destination);\r\n }\r\n\r\n disconnect() {\r\n this.output.disconnect();\r\n this.input.disconnect();\r\n }\r\n\r\n // credit: https://github.com/nick-thompson\r\n _buildImpulse() {\r\n let n = 0;\r\n let i = 0;\r\n if (SuiReverb.impulse) {\r\n this.input.buffer = SuiReverb.impulse;\r\n return;\r\n }\r\n\r\n const rate = this._context.sampleRate;\r\n const length = rate * this.length;\r\n const decay = this.decay;\r\n const impulse = this._context.createBuffer(2, length, rate);\r\n const impulseL = impulse.getChannelData(0);\r\n const impulseR = impulse.getChannelData(1);\r\n\r\n for (i = 0; i < length; i++) {\r\n n = this.reverse ? length - i : i;\r\n impulseL[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n impulseR[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n }\r\n SuiReverb.impulse = impulse;\r\n\r\n this.input.buffer = impulse;\r\n }\r\n output: ConvolverNode;\r\n input: ConvolverNode;\r\n length: number;\r\n decay: number;\r\n damp: number = 1.0;\r\n reverse: boolean = false;\r\n _context: AudioContext;\r\n constructor(context: AudioContext) {\r\n this.input = this.output = context.createConvolver();\r\n this.length = SuiReverb.defaults.length;\r\n this.decay = SuiReverb.defaults.decay;\r\n this._context = context;\r\n this._buildImpulse();\r\n }\r\n}\r\n\r\n/**\r\n * Audio custom osc node. Not used much.\r\n */\r\nexport interface WaveTable {\r\n real: number[],\r\n imaginary: number[]\r\n}\r\n/**\r\n * Parameters to create an oscillator for a single note of music\r\n * @category SuiAudio\r\n */\r\nexport interface SuiOscillatorParams {\r\n duration: number,\r\n frequency: number,\r\n attackEnv: number,\r\n decayEnv: number,\r\n sustainEnv: number,\r\n releaseEnv: number,\r\n sustainLevel: number,\r\n releaseLevel: number,\r\n waveform: OscillatorType,\r\n gain: number,\r\n wavetable?: WaveTable,\r\n useReverb: boolean,\r\n instrument: string\r\n}\r\n\r\nexport const SynthWavetable: WaveTable = {\r\n real: [0,\r\n 0.3, 0.3, 0, 0, 0,\r\n 0.1, 0, 0, 0, 0,\r\n 0.05, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0],\r\n imaginary: [0,\r\n 0, 0.05, 0, 0, 0,\r\n 0, 0.01, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0]\r\n};\r\n/**\r\n * Simple waveform synthesizer thing that plays notes. Oscillator works in either\r\n * analog synthisizer or sampler mode.\r\n * @category SuiAudio\r\n */\r\nexport abstract class SuiOscillator {\r\n static audio: AudioContext = new AudioContext();\r\n static created: number = 0;\r\n static get defaults(): SuiOscillatorParams {\r\n const wavetable: WaveTable = {\r\n real: [], imaginary: []\r\n };\r\n const obj = {\r\n duration: 1000,\r\n frequency: 440,\r\n attackEnv: 0.05,\r\n decayEnv: 0.4,\r\n sustainEnv: 0.8,\r\n releaseEnv: 0.25,\r\n sustainLevel: 0.5,\r\n releaseLevel: 0.1,\r\n waveform: 'custom',\r\n gain: 0.2,\r\n wavetable,\r\n useReverb: false,\r\n instrument: 'piano'\r\n };\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n static sampleFiles: string[] = ['bb4', 'cn4'];\r\n static samples: AudioSample[] = [];\r\n static playSelectionNow(selection: SmoSelection, score: SmoScore, gain: number) {\r\n // In the midst of re-rendering...\r\n if (!selection.note) {\r\n return;\r\n }\r\n if (selection.note.isRest() || selection.note.isSlash() || selection.note.isHidden()) {\r\n return;\r\n }\r\n const soundInfo = selection.staff.getStaffInstrument(selection.selector.measure);\r\n const oscInfo = SuiSampleMedia.getSmoOscillatorInfo(soundInfo.instrument);\r\n setTimeout(() => {\r\n const ar = SuiOscillator.fromNote(selection.measure, selection.note!, score, oscInfo[0], gain);\r\n ar.forEach((osc) => {\r\n osc.play();\r\n });\r\n }, 1);\r\n }\r\n\r\n static get attackTime() {\r\n return 25;\r\n }\r\n static get decayTime() {\r\n return 15;\r\n }\r\n // ### fromNote\r\n // Create an areray of oscillators for each pitch in a note\r\n static fromNote(measure: SmoMeasure, note: SmoNote, score: SmoScore, soundInfo: SmoOscillatorInfo, gain: number): SuiOscillator[] {\r\n let frequency = 0;\r\n let duration = 0;\r\n const tempo = measure.getTempo();\r\n const bpm = tempo.bpm;\r\n const beats = note.tickCount / 4096;\r\n duration = (beats / bpm) * 60000;\r\n\r\n // adjust if bpm is over something other than 1/4 note\r\n duration = duration * (4096 / tempo.beatDuration);\r\n if (soundInfo.waveform === 'sample') {\r\n duration = 250;\r\n }\r\n\r\n const ar: SuiOscillator[] = [];\r\n gain = isNaN(gain) ? 0.2 : gain;\r\n gain = gain / note.pitches.length;\r\n if (note.noteType === 'r') {\r\n gain = 0.001;\r\n }\r\n note.pitches.forEach((pitch, pitchIx) => {\r\n const mtone: SmoMicrotone | null = note.getMicrotone(pitchIx) ?? null;\r\n frequency = SmoAudioPitch.smoPitchToFrequency(pitch, -1 * measure.transposeIndex, mtone);\r\n const def = SuiOscillator.defaults;\r\n def.instrument = soundInfo.instrument;\r\n def.frequency = frequency;\r\n def.duration = duration;\r\n def.gain = gain;\r\n if (soundInfo.waveform !== 'sample') {\r\n def.waveform = soundInfo.waveform;\r\n if (def.waveform === 'custom') {\r\n def.wavetable = SynthWavetable;\r\n }\r\n const osc = new SuiWavetable(def);\r\n ar.push(osc);\r\n } else {\r\n const osc = new SuiSampler(def);\r\n ar.push(osc);\r\n }\r\n });\r\n\r\n return ar;\r\n }\r\n\r\n static get attributes() {\r\n return ['duration', 'frequency', 'pitch', 'attackEnv', 'sustainEnv', 'decayEnv',\r\n 'releaseEnv', 'sustainLevel', 'releaseLevel', 'waveform', 'wavetable', 'gain'];\r\n }\r\n \r\n static resolveAfter(time: number) {\r\n return new Promise((resolve) => {\r\n const timerFunc = () => {\r\n resolve();\r\n }\r\n setTimeout(() => {\r\n timerFunc();\r\n }, time);\r\n });\r\n }\r\n _playPromise(duration: number, gain: GainNode) {\r\n const audio = SuiOscillator.audio;\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, duration + 500);\r\n });\r\n return promise;\r\n }\r\n\r\n static toFloatArray(ar: number[]): Float32Array {\r\n const rv = new Float32Array(ar.length);\r\n let i = 0;\r\n for (i = 0; i < ar.length; ++i) {\r\n rv[i] = ar[i];\r\n }\r\n return rv;\r\n }\r\n reverb: SuiReverb | null;\r\n attack: number;\r\n decay: number;\r\n sustain: number;\r\n release: number;\r\n waveform: OscillatorType;\r\n attackEnv: number = -1;\r\n duration: number = -1;\r\n decayEnv: number = -1;\r\n sustainEnv: number = -1;\r\n releaseEnv: number = -1;\r\n gain: number = 1.0;\r\n sustainLevel: number = 0;\r\n releaseLevel: number = 0;\r\n frequency: number = -1;\r\n wavetable: WaveTable | null = null;\r\n useReverb: boolean;\r\n gainNode: GainNode | undefined;\r\n delayNode: DelayNode | undefined;\r\n instrument: string;\r\n osc: AudioScheduledSourceNode | undefined;\r\n constructor(parameters: SuiOscillatorParams) {\r\n smoSerialize.serializedMerge(SuiOscillator.attributes, parameters, this);\r\n this.reverb = null;\r\n // this.reverb = null;\r\n this.attack = this.attackEnv * SuiOscillator.attackTime;\r\n this.decay = this.decayEnv * SuiOscillator.decayTime;\r\n this.sustain = this.sustainEnv * this.duration;\r\n this.release = this.releaseEnv * this.duration;\r\n this.instrument = parameters.instrument;\r\n if (parameters.wavetable) {\r\n this.wavetable = parameters.wavetable;\r\n }\r\n this.useReverb = parameters.useReverb;\r\n // this.frequency = this.frequency / 2; // Overtones below partial\r\n this.waveform = parameters.waveform;\r\n if (!parameters.wavetable && this.waveform === 'custom') {\r\n this.waveform = 'sine';\r\n }\r\n }\r\n abstract play(): Promise;\r\n abstract createAudioNode(): AudioScheduledSourceNode;\r\n\r\n disconnect() {\r\n if (this.osc) {\r\n this.osc.disconnect();\r\n }\r\n if (this.gainNode) {\r\n this.gainNode.disconnect();\r\n }\r\n if (this.delayNode) {\r\n this.delayNode.disconnect();\r\n }\r\n if (this.reverb) {\r\n this.reverb.disconnect();\r\n }\r\n SuiOscillator.created -= 1;\r\n }\r\n\r\n /**\r\n * Connect the audio sound source to the output, combining other\r\n * nodes in the mix such as convolver (reverb), delay, and gain.\r\n * Also set up the envelope\r\n * @returns - a promise that tis resolved when `duration` time has expired\r\n */\r\n async createAudioGraph(): Promise {\r\n if (this.frequency === 0) {\r\n return SuiSampler.resolveAfter(this.duration);\r\n }\r\n const audio = SuiOscillator.audio;\r\n const attack = this.attack / 1000;\r\n const decay = this.decay / 1000;\r\n const sustain = this.sustain / 1000;\r\n const release = this.release / 1000;\r\n this.gainNode = audio.createGain();\r\n this.osc = this.createAudioNode();\r\n const gp1 = this.gain;\r\n\r\n if (this.useReverb) {\r\n this.reverb = new SuiReverb(SuiOscillator.audio);\r\n }\r\n\r\n if (this.useReverb && this.reverb) {\r\n this.delayNode = audio.createDelay(this.reverb.length);\r\n }\r\n this.gainNode.gain.exponentialRampToValueAtTime(gp1, audio.currentTime + attack);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.sustainLevel * gp1, audio.currentTime + attack + decay);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.releaseLevel * gp1, audio.currentTime + attack + decay + sustain);\r\n this.gainNode.gain.exponentialRampToValueAtTime(0.001, audio.currentTime + attack + decay + sustain + release);\r\n\r\n // osc.connect(gain1);\r\n if (this.useReverb && this.reverb && this.osc) {\r\n this.osc.connect(this.reverb.input);\r\n }\r\n this.osc.connect(this.gainNode);\r\n if (this.delayNode && this.reverb) {\r\n this.reverb.connect(this.delayNode);\r\n this.delayNode.connect(audio.destination);\r\n }\r\n this.gainNode.connect(audio.destination);\r\n SuiOscillator.created += 1;\r\n return this.playPromise(this.duration);\r\n }\r\n playPromise(duration: number): Promise {\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, Math.round(duration * 1.05));\r\n });\r\n return promise;\r\n }\r\n}\r\n/**\r\n * An audio output that uses browser audio api OscillatorNode as a sound source\r\n * @category SuiAudio\r\n */\r\nexport class SuiWavetable extends SuiOscillator {\r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createOscillator();\r\n if (this.wavetable && this.wavetable.imaginary.length > 0 && this.wavetable.real.length > 0 && this.waveform === 'custom') {\r\n const wave = SuiOscillator.audio.createPeriodicWave(SuiOscillator.toFloatArray(this.wavetable.real),\r\n SuiOscillator.toFloatArray(this.wavetable.imaginary),\r\n { disableNormalization: false });\r\n node.setPeriodicWave(wave);\r\n } else {\r\n node.type = this.waveform;\r\n }\r\n node.frequency.value = this.frequency;\r\n return node;\r\n }\r\n // play the audio oscillator for the specified duration. Return a promise that\r\n // resolves after the duration. Also dispose of the audio resources after the play is complete.\r\n async play() {\r\n return this.createAudioGraph();\r\n }\r\n}\r\n\r\n/**\r\n * An audio output primitive that uses frequency-adjusted sampled sounds\r\n */\r\nexport class SuiSampler extends SuiOscillator {\r\n constructor(params: SuiOscillatorParams) {\r\n super(params);\r\n if (SuiSampleMedia.sampleOscMap[this.instrument]) {\r\n const sampleInfo = SuiSampleMedia.sampleOscMap[this.instrument];\r\n if (sampleInfo.length) {\r\n if (sampleInfo[0].sustain === 'sustained') {\r\n this.attack = 0.1 * this.duration;\r\n }\r\n }\r\n }\r\n }\r\n // Note: samplePromise must be complete before you call this \r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createBufferSource();\r\n const chooserParams = {\r\n instrument: this.instrument,\r\n frequency: this.frequency,\r\n duration: this.duration,\r\n gain: this.gain\r\n }\r\n const sample = SuiSampleMedia.matchedSample(chooserParams);\r\n if (!sample) {\r\n return node;\r\n }\r\n \r\n const cents = 1200 * (Math.log(this.frequency / sample!.frequency))\r\n / Math.log(2);\r\n this.gain = this.gain * sample.gain;\r\n node.buffer = sample!.sample;\r\n node.detune.value = cents; \r\n return node;\r\n }\r\n async play() {\r\n const self = this;\r\n return SuiSampleMedia.samplePromise(SuiOscillator.audio).then(() => {\r\n self.createAudioGraph();\r\n });\r\n }\r\n\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiOscillator, SuiSampler, SuiWavetable, SynthWavetable } from './oscillator';\r\nimport { SmoAudioScore } from '../../smo/xform/audioTrack';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SuiAudioAnimationParams } from './musicCursor';\r\n\r\n/**\r\n * Create audio player for the score from the start point\r\n * @category SuiAudio\r\n */\r\nexport interface SuiAudioPlayerParams {\r\n startIndex: number,\r\n view: SuiScoreView,\r\n score: SmoScore,\r\n audioAnimation: SuiAudioAnimationParams\r\n}\r\n/**\r\n * Parameters used to create just-in-time oscillators\r\n * @category SuiAudio\r\n */\r\nexport interface SoundParams {\r\n frequencies: number[],\r\n duration: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n volume: number,\r\n noteType: string,\r\n instrument: string,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of sound parameters for just-in-time oscillator creation\r\n * @category SuiAudio\r\n */\r\n export interface SoundParamMeasureLink {\r\n soundParams: Record,\r\n endTicks: number,\r\n next: SoundParamMeasureLink | null\r\n}\r\n/**\r\n * A set of oscillators to be played at a certain time.\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioContext {\r\n oscs: SuiOscillator[],\r\n playMeasureIndex: number,\r\n playTickIndex: number,\r\n waitTime: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of oscillators. We keep them in a list until played so we \r\n * can GC them if playing is cancelled\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioLink {\r\n sound: CuedAudioContext;\r\n next: CuedAudioLink | null;\r\n}\r\n/**\r\n * Maintain a list of buffers ready to play, since this is a \r\n * system resource.\r\n * @category SuiAudio\r\n */\r\nexport class CuedAudioContexts {\r\n soundHead: CuedAudioLink | null = null;\r\n soundTail: CuedAudioLink | null = null;\r\n paramLinkHead: SoundParamMeasureLink | null = null;\r\n paramLinkTail: SoundParamMeasureLink | null = null;\r\n soundListLength = 0;\r\n playWaitTimer = 0; \r\n playMeasureIndex: number = 0; // index of the measure we are playing\r\n cueMeasureIndex: number = 0; // measure index we are populating\r\n complete: boolean = false;\r\n addToTail(cuedSound: CuedAudioContext) {\r\n const tail = { sound: cuedSound, next: null };\r\n if (this.soundTail === null) {\r\n this.soundTail = tail;\r\n this.soundHead = tail;\r\n } else {\r\n this.soundTail.next = { sound: cuedSound, next: null };\r\n this.soundTail = this.soundTail.next;\r\n }\r\n this.soundListLength += cuedSound.oscs.length;\r\n }\r\n advanceHead(): CuedAudioContext | null {\r\n if (this.soundHead === null) {\r\n return null;\r\n }\r\n const cuedSound = this.soundHead.sound;\r\n this.soundHead = this.soundHead.next;\r\n this.soundListLength -= cuedSound.oscs.length;\r\n return cuedSound;\r\n }\r\n get soundCount() {\r\n return this.soundListLength;\r\n }\r\n reset() {\r\n this.soundHead = null;\r\n this.soundTail = null;\r\n this.paramLinkHead = null;\r\n this.paramLinkTail = null;\r\n this.soundListLength = 0;\r\n this.playWaitTimer = 0;\r\n this.playMeasureIndex = 0;\r\n this.cueMeasureIndex = 0;\r\n this.complete = false;\r\n }\r\n}\r\n/**\r\n * Play the music, ja!\r\n * @category SuiAudio\r\n */\r\nexport class SuiAudioPlayer {\r\n static _playing: boolean = false;\r\n static instanceId: number = 0;\r\n static duplicatePitchThresh = 4;\r\n static voiceThresh = 16;\r\n static _playingInstance: SuiAudioPlayer | null = null;\r\n static set playing(val) {\r\n SuiAudioPlayer._playing = val;\r\n }\r\n static get audioBufferSize() {\r\n return 512;\r\n }\r\n static incrementInstanceId() {\r\n const id = SuiAudioPlayer.instanceId + 1;\r\n SuiAudioPlayer.instanceId = id;\r\n return id;\r\n }\r\n static get playing() {\r\n if (typeof (SuiAudioPlayer._playing) === 'undefined') {\r\n SuiAudioPlayer._playing = false;\r\n }\r\n return SuiAudioPlayer._playing;\r\n }\r\n\r\n static pausePlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.paused = true;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n }\r\n SuiAudioPlayer.playing = false;\r\n\r\n }\r\n instanceId: number;\r\n paused: boolean;\r\n view: SuiScoreView;\r\n score: SmoScore;\r\n cuedSounds: CuedAudioContexts;\r\n audioDefaults = SuiOscillator.defaults;\r\n openTies: Record = {};\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(parameters: SuiAudioPlayerParams) {\r\n this.instanceId = SuiAudioPlayer.incrementInstanceId();\r\n this.paused = false;\r\n this.view = parameters.view;\r\n this.score = parameters.score;\r\n // Assume tempo is same for all measures\r\n this.cuedSounds = new CuedAudioContexts();\r\n this.audioAnimation = parameters.audioAnimation;\r\n }\r\n\r\n getNoteSoundData(measureIndex: number) {\r\n const measureNotes: Record = {};\r\n let measureTicks = this.score.staves[0].measures[measureIndex].getMaxTicksVoice();\r\n const freqDuplicates: Record> = {};\r\n const voiceCount: Record = {};\r\n this.score.staves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[measureIndex];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let curTick = 0;\r\n const instrument = staff.getStaffInstrument(measure.measureNumber.measureIndex);\r\n voice.notes.forEach((smoNote, tickIx) => {\r\n const frequencies: number[] = [];\r\n const xpose = -1 * measure.transposeIndex;\r\n const selector: SmoSelector = SmoSelector.default;\r\n selector.measure = measureIndex;\r\n selector.staff = staffIx;\r\n selector.voice = voiceIx;\r\n selector.tick = tickIx;\r\n let ties: SmoTie[] = [];\r\n const tieIx = '' + staffIx + '-' + measureIndex + '-' + voiceIx;\r\n let tiedNote = false;\r\n if (smoNote.noteType === 'n' && !smoNote.isHidden()) {\r\n ties = staff.getTiesStartingAt(selector);\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n const freq = SmoAudioPitch.smoPitchToFrequency(pitch, xpose, smoNote.getMicrotone(pitchIx) ?? null);\r\n const freqRound = Math.round(freq);\r\n if (!freqDuplicates[curTick]) {\r\n freqDuplicates[curTick] = {};\r\n voiceCount[curTick] = 0;\r\n }\r\n const freqBeat = freqDuplicates[curTick];\r\n if (!freqBeat[freqRound]) {\r\n freqBeat[freqRound] = 0;\r\n }\r\n if (freqBeat[freqRound] < SuiAudioPlayer.duplicatePitchThresh && voiceCount[curTick] < SuiAudioPlayer.voiceThresh) {\r\n frequencies.push(freq);\r\n freqBeat[freqRound] += 1;\r\n voiceCount[curTick] += 1;\r\n }\r\n });\r\n const duration = smoNote.tickCount;\r\n const volume = SmoAudioScore.volumeFromNote(smoNote, SmoAudioScore.dynamicVolumeMap.mf);\r\n const soundData: SoundParams = {\r\n frequencies,\r\n volume,\r\n offsetPct: curTick / measureTicks,\r\n durationPct: duration / measureTicks,\r\n noteType: smoNote.noteType,\r\n duration,\r\n instrument: instrument.instrument,\r\n selector\r\n };\r\n const pushTickArray = (curTick: number, soundData: SoundParams) => {\r\n if (typeof(measureNotes[curTick]) === 'undefined') {\r\n measureNotes[curTick] = [];\r\n }\r\n measureNotes[curTick].push(soundData);\r\n }\r\n // If this is continuation of tied note, just change duration\r\n if (this.openTies[tieIx]) {\r\n this.openTies[tieIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[tieIx] = null;\r\n }\r\n } else if (ties.length) {\r\n // If start of tied note, record the tie note, the next note in this voice\r\n // will adjust duration\r\n this.openTies[tieIx] = soundData;\r\n pushTickArray(curTick, soundData);\r\n } else {\r\n pushTickArray(curTick, soundData);\r\n }\r\n }\r\n curTick += Math.round(smoNote.tickCount);\r\n });\r\n });\r\n });\r\n const keys = Object.keys(measureNotes).map((x) => parseInt(x, 10));\r\n if (keys.length) {\r\n measureTicks -= keys.reduce((a, b) => a > b ? a : b);\r\n }\r\n return { endTicks: measureTicks, measureNotes };\r\n }\r\n \r\n createCuedSound(measureIndex: number) {\r\n let i = 0;\r\n let j = 0;\r\n let measureBeat = 0;\r\n if (!SuiAudioPlayer.playing || this.cuedSounds.paramLinkHead === null) {\r\n return;\r\n }\r\n // TODO base on the selection start.\r\n const { endTicks, measureNotes } = { endTicks: this.cuedSounds.paramLinkHead.endTicks, measureNotes: this.cuedSounds.paramLinkHead.soundParams };\r\n this.cuedSounds.paramLinkHead = this.cuedSounds.paramLinkHead.next;\r\n const maxMeasures = this.score.staves[0].measures.length;\r\n const smoTemp = this.score.staves[0].measures[measureIndex].getTempo();\r\n const tempo = smoTemp.bpm * (smoTemp.beatDuration / 4096);\r\n const keys: number[] = [];\r\n Object.keys(measureNotes).forEach((key) => {\r\n keys.push(parseInt(key, 10));\r\n }); \r\n // There is a key for each note in the measure. The value is the number of ticks before that note is played\r\n for (j = 0; j < keys.length; ++j) {\r\n const beatTime = keys[j];\r\n const soundData = measureNotes[beatTime];\r\n let durationPct = 0;\r\n let offsetPct = 0;\r\n if (soundData.length === 0) {\r\n console.log('empty sound measure');\r\n continue;\r\n }\r\n soundData.forEach((ss) => {\r\n if (durationPct === 0) {\r\n durationPct = ss.durationPct;\r\n offsetPct = ss.offsetPct;\r\n }\r\n durationPct = Math.min(durationPct, ss.durationPct);\r\n offsetPct = Math.min(offsetPct, ss.offsetPct);\r\n });\r\n const cuedSound: CuedAudioContext = { oscs: [], waitTime: 0, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n const timeRatio = 60000 / (tempo * 4096);\r\n // If there is complete silence here, put a silent beat\r\n if (beatTime > measureBeat) {\r\n const params = this.audioDefaults;\r\n params.frequency = 0;\r\n params.duration = (beatTime - measureBeat) * timeRatio;\r\n params.gain = 0;\r\n params.useReverb = false;\r\n const silence: CuedAudioContext = { oscs: [], waitTime: params.duration, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n silence.oscs.push(new SuiSampler(params));\r\n this.cuedSounds.addToTail(silence);\r\n measureBeat = beatTime;\r\n }\r\n this.cuedSounds.addToTail(cuedSound);\r\n soundData.forEach((sound) => {\r\n const adjDuration = Math.round(sound.duration * timeRatio) + 150;\r\n for (i = 0; i < sound.frequencies.length && sound.noteType === 'n'; ++i) {\r\n const freq = sound.frequencies[i];\r\n const params = this.audioDefaults;\r\n params.frequency = freq;\r\n params.duration = adjDuration;\r\n params.gain = sound.volume;\r\n params.instrument = sound.instrument;\r\n params.useReverb = this.score.audioSettings.reverbEnable;\r\n if (this.score.audioSettings.playerType === 'synthesizer') {\r\n params.wavetable = SynthWavetable;\r\n params.waveform = this.score.audioSettings.waveform;\r\n cuedSound.oscs.push(new SuiWavetable(params));\r\n } else {\r\n cuedSound.oscs.push(new SuiSampler(params));\r\n }\r\n }\r\n });\r\n if (j + 1 < keys.length) {\r\n const diff = (keys[j + 1] - keys[j]);\r\n cuedSound.waitTime = diff * timeRatio;\r\n measureBeat += diff;\r\n } else if (measureIndex + 1 < maxMeasures) {\r\n // If the next measure, calculate the frequencies for the next track.\r\n this.cuedSounds.cueMeasureIndex += 1;\r\n cuedSound.waitTime = endTicks * timeRatio;\r\n } else {\r\n this.cuedSounds.complete = true;\r\n }\r\n // }, 1);\r\n }\r\n }\r\n populateSounds(measureIndex: number) {\r\n if (!SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n const interval = 20;\r\n let draining = false;\r\n const buffer = SuiAudioPlayer.audioBufferSize;\r\n const timer = setInterval(() => {\r\n if (this.cuedSounds.complete || SuiAudioPlayer.playing === false) {\r\n clearInterval(timer);\r\n return;\r\n }\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.complete = true;\r\n return;\r\n }\r\n if (draining && this.cuedSounds.soundCount > buffer / 4) {\r\n return;\r\n }\r\n if (this.cuedSounds.soundCount > buffer) {\r\n draining = true;\r\n return;\r\n }\r\n draining = false;\r\n this.createCuedSound(measureIndex);\r\n measureIndex += 1;\r\n }, interval);\r\n }\r\n playSounds() {\r\n this.cuedSounds.playMeasureIndex = 0;\r\n this.cuedSounds.playWaitTimer = 0;\r\n let previousDuration = 0;\r\n const timer = () => {\r\n setTimeout(() => {\r\n const cuedSound = this.cuedSounds.advanceHead();\r\n if (cuedSound === null) {\r\n SuiAudioPlayer._playing = false;\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (SuiAudioPlayer._playing === false) {\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (cuedSound.oscs.length === 0) {\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n console.warn('empty oscs in playback');\r\n timer(); \r\n return;\r\n }\r\n previousDuration = cuedSound.oscs[0].duration;\r\n SuiAudioPlayer._playChord(cuedSound.oscs);\r\n this.audioAnimation.audioAnimationHandler(this.view, cuedSound.selector,\r\n cuedSound.offsetPct, cuedSound.durationPct);\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n timer();\r\n }, this.cuedSounds.playWaitTimer);\r\n }\r\n timer();\r\n }\r\n playAfter(milliseconds: number, oscs: SuiOscillator[]) {\r\n setTimeout(() => {\r\n SuiAudioPlayer._playChord(oscs);\r\n }, milliseconds)\r\n }\r\n startPlayer(measureIndex: number) {\r\n this.openTies = {};\r\n this.cuedSounds.reset();\r\n this.cuedSounds.cueMeasureIndex = measureIndex;\r\n this.cuedSounds.playMeasureIndex = this.cuedSounds.cueMeasureIndex;\r\n this.cuedSounds.paramLinkHead = null;\r\n this.cuedSounds.paramLinkTail = null;\r\n const endMeasure = this.score.staves[0].measures.length;\r\n let i = 0;\r\n for (i = this.cuedSounds.cueMeasureIndex; i < endMeasure; ++i) {\r\n const { endTicks, measureNotes } = this.getNoteSoundData(i);\r\n const node = {\r\n soundParams: measureNotes,\r\n endTicks,\r\n next: null\r\n };\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.paramLinkHead = node;\r\n this.cuedSounds.paramLinkTail = node;\r\n } else {\r\n this.cuedSounds.paramLinkTail!.next = node;\r\n this.cuedSounds.paramLinkTail = this.cuedSounds.paramLinkTail!.next;\r\n }\r\n }\r\n setTimeout(() => {\r\n this.populateSounds(measureIndex);\r\n }, 1);\r\n const bufferThenPlay = () => {\r\n setTimeout(() => {\r\n if (this.cuedSounds.soundListLength >= SuiAudioPlayer.audioBufferSize || this.cuedSounds.complete) {\r\n this.playSounds();\r\n } else {\r\n bufferThenPlay();\r\n }\r\n }, 50);\r\n }\r\n bufferThenPlay();\r\n }\r\n\r\n static stopPlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n a.paused = false;\r\n a.cuedSounds.reset();\r\n }\r\n SuiAudioPlayer.playing = false;\r\n }\r\n\r\n static get playingInstance() {\r\n if (!SuiAudioPlayer._playingInstance) {\r\n return null;\r\n }\r\n return SuiAudioPlayer._playingInstance;\r\n }\r\n\r\n // the oscAr contains an oscillator for each pitch in the chord.\r\n // each inner oscillator is a promise, the combined promise is resolved when all\r\n // the beats have completed.\r\n static _playChord(oscAr: SuiOscillator[]) {\r\n var par: Promise[] = [];\r\n oscAr.forEach((osc) => {\r\n par.push(osc.play());\r\n });\r\n return Promise.all(par);\r\n }\r\n\r\n // Starts the player.\r\n play() {\r\n let i = 0;\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n SuiAudioPlayer._playingInstance = this;\r\n SuiAudioPlayer.playing = true;\r\n const startIndex = this.view.tracker.getFirstMeasureOfSelection()?.measureNumber.measureIndex ?? 0;\r\n //for (i = this.startIndex; i < this.score.staves[0].measures.length; ++i) {\r\n // this.tracks.push(SuiAudioPlayer.getTrackSounds(this.audio.tracks, i));\r\n // }\r\n // const sounds = SuiAudioPlayer.getTrackSounds(this.audio.tracks, this.startIndex);\r\n // this.playSoundsAtOffset(sounds, 0);\r\n this.startPlayer(startIndex);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoOscillatorInfo, SmoInstrument, SmoOscillatorInfoAllTypes,\r\n SmoOscillatorInfoNumberType, SmoOscillatorInfoNumberArType, SmoOscillatorInfoStringType, SmoOscillatorInfoStringNullType,\r\n SmoOscillatorInfoWaveformType, SmoOscillatorInfoSustainType, SmoOscillatorInfoOptionsType } from '../../smo/data/staffModifiers';\r\n/**\r\n * A set of parameters from the instrument interface used to create audio from samples.\r\n * @category SuiAudio\r\n */\r\n export interface SampleChooserParams {\r\n family?: string,\r\n instrument: string,\r\n frequency: number,\r\n duration: number,\r\n gain: number,\r\n articulation?: string\r\n}\r\n/**\r\n * A function prototype that chooses from among samples to return the correct one for that note\r\n */\r\nexport type SampleChooser = (params: SampleChooserParams, samples: SmoOscillatorInfo[]) => AudioSample | null;\r\n/**\r\n * A specific audio sample that can be converted into an audio node\r\n * @category SuiAudio\r\n */\r\nexport interface AudioSample {\r\n sample: AudioBuffer,\r\n frequency: number,\r\n patch: string,\r\n gain: number\r\n}\r\n/**\r\n * Interface for a chooser function and a set of samples\r\n * @category SuiAudio\r\n */\r\nexport interface InstrumentSampleChooser {\r\n instrument: string,\r\n sampleChooser: SampleChooser,\r\n samples: SmoOscillatorInfo[]\r\n}\r\n\r\nexport const sampleForPercussion = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.instrument === 'percussion');\r\n let sample: AudioSample | null = null;\r\n if (longSamples.length) {\r\n sample = sampleFromFrequency(params, longSamples);\r\n if (sample) {\r\n return sample;\r\n }\r\n }\r\n return sampleFromFrequency(params, samples);\r\n}\r\n/**\r\n * For instruments like violin that require different samples depending on note duration\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n */\r\nexport const sampleFromMinDuration = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.minDuration < params.duration && ss.minDuration > 0);\r\n if (longSamples.length) {\r\n return sampleFromFrequency(params, longSamples);\r\n }\r\n return sampleFromFrequency(params, samples.filter((ss) => ss.minDuration === 0));\r\n}\r\n\r\n/**\r\n * Give a set of samples, return the one that closest matches the frequency\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n*/\r\nexport const sampleFromFrequency = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n const f = params.frequency;\r\n for (i = 0; i < samples.length; ++i) {\r\n const oscInfo = samples[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const gain = oscInfo.dynamic / 100;\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n}\r\n/**\r\n * Logic to create audio nodes out of HTML5 media elements\r\n * @category SuiAudio\r\n */\r\nexport class SuiSampleMedia {\r\n static sampleFiles: SmoOscillatorInfo[] = [];\r\n static sampleBufferMap: Record = {};\r\n static sampleOscMap: Record = {};\r\n static instrumentChooser: Record = {};\r\n static receivedBuffer: boolean = false;\r\n static getFamilyForInstrument(instKey: string): string {\r\n const sound = SuiSampleMedia.instrumentChooser[instKey];\r\n if (sound && sound.samples.length) {\r\n return sound.samples[0].family;\r\n }\r\n return 'keyboard';\r\n }\r\n static insertIntoMap(sample: Partial) {\r\n const oscInfo = SmoInstrument.defaultOscillatorParam;\r\n const populatePartial = (partial: Partial, full: SmoOscillatorInfo, \r\n param: SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | SmoOscillatorInfoOptionsType | SmoOscillatorInfoSustainType | SmoOscillatorInfoWaveformType) => {\r\n (full[param] as any) = typeof(partial[param]) === 'undefined' ? full[param] : partial[param];\r\n }\r\n SmoOscillatorInfoAllTypes.forEach((paramType) => {\r\n populatePartial(sample, oscInfo, paramType as any);\r\n });\r\n if (!this.sampleOscMap[oscInfo.instrument]) {\r\n this.sampleOscMap[oscInfo.instrument] = [];\r\n }\r\n this.sampleOscMap[oscInfo.instrument].push(oscInfo);\r\n SuiSampleMedia.sampleFiles.push(oscInfo);\r\n }\r\n static populateSampleMap() {\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'samplecn4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'samplebb4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'b', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-a2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-fs2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: '#', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c2-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c3-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-e3',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-d4',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a1',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 1 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a3',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-c4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-b5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e6',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-bb3',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-c4',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-g5-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-e4-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-e4',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-g3',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g3-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g4-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c2',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c3',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c5',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c6',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c4',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c5',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-d2-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 2 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-c3-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 12, null) - 5,\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c4-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c5-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-hh-closed',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-snare',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom1',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom2',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-kick',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n const instrumentMap = Object.keys(SuiSampleMedia.sampleOscMap);\r\n instrumentMap.forEach((instrumentKey) => {\r\n SuiSampleMedia.instrumentChooser[instrumentKey] = {\r\n instrument: instrumentKey,\r\n samples: SuiSampleMedia.sampleOscMap[instrumentKey],\r\n sampleChooser: sampleFromFrequency\r\n }\r\n });\r\n SuiSampleMedia.instrumentChooser['violin'].sampleChooser = sampleFromMinDuration;\r\n SuiSampleMedia.instrumentChooser['percussion'].sampleChooser = sampleForPercussion;\r\n }\r\n static getSmoOscillatorInfo(instrument: string) {\r\n if (!SuiSampleMedia.sampleOscMap[instrument]) {\r\n return SuiSampleMedia.sampleOscMap['piano'];\r\n }\r\n return SuiSampleMedia.sampleOscMap[instrument];\r\n }\r\n /**\r\n * Load samples so we can play the music\r\n * @returns - promise, resolved when loaded\r\n */\r\n static samplePromise(audio: AudioContext): Promise {\r\n const mediaElements: HTMLMediaElement[] = [];\r\n let i = 0;\r\n if (SuiSampleMedia.receivedBuffer) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n SuiSampleMedia.populateSampleMap();\r\n const loadedSamples: Record = {};\r\n for (i = 0; i < SuiSampleMedia.sampleFiles.length; ++i) {\r\n const file = SuiSampleMedia.sampleFiles[i];\r\n if (!file.sample) {\r\n continue;\r\n }\r\n const sampleName = file.sample;\r\n const audioElement: HTMLMediaElement | null = document.getElementById(file.sample) as HTMLMediaElement;\r\n if (!loadedSamples[file.sample] && audioElement) {\r\n loadedSamples[file.sample] = true;\r\n const media = audio.createMediaElementSource(audioElement);\r\n mediaElements.push(audioElement);\r\n const req = new XMLHttpRequest();\r\n req.open('GET', media.mediaElement.src, true);\r\n req.responseType = 'arraybuffer';\r\n req.send();\r\n req.onload = () => {\r\n const audioData = req.response;\r\n audio.decodeAudioData(audioData, (decoded) => {\r\n SuiSampleMedia.sampleBufferMap[sampleName] = decoded;\r\n SuiSampleMedia.receivedBuffer = true;\r\n });\r\n };\r\n }\r\n if (mediaElements.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n const checkSample = () => {\r\n setTimeout(() => {\r\n if (!SuiSampleMedia.receivedBuffer) {\r\n checkSample();\r\n } else {\r\n resolve();\r\n }\r\n }, 100);\r\n };\r\n checkSample();\r\n });\r\n return rv;\r\n }\r\n\r\n static sampleForFrequency(f: number, oscs: SmoOscillatorInfo[]): AudioSample | null {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n for (i = 0; i < oscs.length; ++i) {\r\n const oscInfo = oscs[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n const gain = oscInfo.dynamic / 100;\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n }\r\n static matchedSample(params: SampleChooserParams): AudioSample | null {\r\n let instrumentKey = params.instrument;\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n instrumentKey = 'piano';\r\n }\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n const keys = Object.keys(SuiSampleMedia.sampleOscMap);\r\n if (keys.length === 0) {\r\n return null;\r\n }\r\n instrumentKey = keys[0];\r\n }\r\n return SuiSampleMedia.instrumentChooser[instrumentKey].sampleChooser(params, SuiSampleMedia.instrumentChooser[instrumentKey].samples);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Utilities for formatting the music by estimating the geometry of the music.\r\n * @module /render/sui/formatter\r\n */\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { vexGlyph } from '../vex/glyphDimensions';\r\nimport { SmoDynamicText, SmoLyric, SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoStaffHairpin, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { ScaledPageLayout, SmoLayoutManager, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../../smo/data/measure';\r\nimport { TimeSignature, SmoTempoText } from '../../smo/data//measureModifiers';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, defaultMeasurePadding } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\nconst VF = VexFlow;\r\n\r\nexport interface SuiTickContext {\r\n widths: number[],\r\n tickCounts: number[]\r\n}\r\n/**\r\n * Estimated x, y position of the measure\r\n * @category SuiRender\r\n */\r\nexport interface MeasureEstimate {\r\n measures: SmoMeasure[], x: number, y: number\r\n}\r\nexport interface LineRender {\r\n systems: Record\r\n}\r\n\r\n/**\r\n * Keep track of start/end measures on a page. If the page\r\n * content doesn't change, and the measures don't change, we don't\r\n * need to re-render the content\r\n * @catgegory SuiRender\r\n */\r\nexport interface RenderedPage {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\n/**\r\n * Utilities for estimating measure/system/page width and height\r\n * @category SuiRender\r\n */\r\nexport class SuiLayoutFormatter {\r\n score: SmoScore;\r\n systems: Record = {};\r\n columnMeasureMap: Record;\r\n currentPage: number = 0;\r\n svg: SvgPageMap;\r\n renderedPages: Record;\r\n lines: number[] = [];\r\n constructor(score: SmoScore, svg: SvgPageMap, renderedPages: Record) {\r\n this.score = score;\r\n this.svg = svg;\r\n this.columnMeasureMap = {};\r\n this.renderedPages = renderedPages;\r\n this.score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (!this.columnMeasureMap[measure.measureNumber.measureIndex]) {\r\n this.columnMeasureMap[measure.measureNumber.measureIndex] = [];\r\n }\r\n this.columnMeasureMap[measure.measureNumber.measureIndex].push(measure);\r\n });\r\n });\r\n }\r\n \r\n /**\r\n * Once we know which line a measure is going on, make a map for it for easy\r\n * looking during rendering\r\n * @param measures \r\n * @param lineIndex \r\n * @param systemIndex \r\n */\r\n updateSystemMap(measures: SmoMeasure[], lineIndex: number, systemIndex: number) {\r\n if (!this.systems[lineIndex]) {\r\n const nextLr: LineRender = {\r\n systems: {}\r\n };\r\n this.systems[lineIndex] = nextLr;\r\n }\r\n const systemRender = this.systems[lineIndex];\r\n if (!systemRender.systems[systemIndex]) {\r\n systemRender.systems[systemIndex] = measures;\r\n }\r\n }\r\n trimPages(startPageCount: number): boolean {\r\n let pl: SmoPageLayout[] | undefined = this.score?.layoutManager?.pageLayouts;\r\n if (pl) {\r\n if (this.currentPage < pl.length - 1) {\r\n this.score!.layoutManager!.trimPages(this.currentPage);\r\n pl = this.score?.layoutManager?.pageLayouts;\r\n }\r\n if (pl && pl.length !== startPageCount) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * see if page breaks this boundary. If it does, bump the current page and move the system down\r\n * to the new page\r\n * @param scoreLayout \r\n * @param currentLine \r\n * @param bottomMeasure \r\n * @returns \r\n */\r\n checkPageBreak(scoreLayout: ScaledPageLayout, currentLine: SmoMeasure[], bottomMeasure: SmoMeasure): ScaledPageLayout {\r\n let pageAdj = 0;\r\n const lm: SmoLayoutManager = this.score!.layoutManager!;\r\n // See if this measure breaks a page.\r\n const maxY = bottomMeasure.svg.logicalBox.y + bottomMeasure.svg.logicalBox.height;\r\n if (maxY > ((this.currentPage + 1) * scoreLayout.pageHeight) - scoreLayout.bottomMargin) {\r\n this.currentPage += 1;\r\n // If this is a new page, make sure there is a layout for it.\r\n lm.addToPageLayouts(this.currentPage);\r\n scoreLayout = lm.getScaledPageLayout(this.currentPage);\r\n\r\n // When adjusting the page, make it so the top staff of the system\r\n // clears the bottom of the page.\r\n const topMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y < b.svg.logicalBox.y ? a : b\r\n );\r\n const minMaxY = topMeasure.svg.logicalBox.y;\r\n pageAdj = (this.currentPage * scoreLayout.pageHeight) - minMaxY;\r\n pageAdj = pageAdj + scoreLayout.topMargin;\r\n\r\n // For each measure on the current line, move it down past the page break;\r\n currentLine.forEach((measure) => {\r\n measure.setBox(SvgHelpers.boxPoints(\r\n measure.svg.logicalBox.x, measure.svg.logicalBox.y + pageAdj, measure.svg.logicalBox.width, measure.svg.logicalBox.height), '_checkPageBreak');\r\n measure.setY(measure.staffY + pageAdj, '_checkPageBreak');\r\n measure.svg.pageIndex = this.currentPage;\r\n });\r\n }\r\n return scoreLayout;\r\n }\r\n measureToLeft(measure: SmoMeasure) {\r\n const j = measure.measureNumber.staffId;\r\n const i = measure.measureNumber.measureIndex;\r\n return (i > 0 ? this.score!.staves[j].measures[i - 1] : null);\r\n }\r\n // {measures,y,x} the x and y at the left/bottom of the render\r\n /**\r\n * Estimate the dimensions of a column when it's rendered.\r\n * @param scoreLayout \r\n * @param measureIx \r\n * @param systemIndex \r\n * @param lineIndex \r\n * @param x \r\n * @param y \r\n * @returns { MeasureEstimate } - the measures in the column and the x, y location\r\n */\r\n estimateColumn(scoreLayout: ScaledPageLayout, measureIx: number, systemIndex: number, lineIndex: number, x: number, y: number): MeasureEstimate {\r\n const s: any = {};\r\n const measures = this.columnMeasureMap[measureIx];\r\n let rowInSystem = 0;\r\n let voiceCount = 0;\r\n let unalignedCtxCount = 0;\r\n let wsum = 0;\r\n let dsum = 0;\r\n let maxCfgWidth = 0;\r\n let isPickup = false;\r\n // Keep running tab of accidental widths for justification\r\n const contextMap: Record = {};\r\n let forceClefCount = 0;\r\n let measureToSkip = false;\r\n let maxColumnStartX = 0;\r\n measures.forEach((measure) => {\r\n // use measure to left to figure out whether I need to render key signature, etc.\r\n // If I am the first measure, just use self and we always render them on the first measure.\r\n let measureToLeft = this.measureToLeft(measure);\r\n if (!measureToLeft) {\r\n measureToLeft = measure;\r\n }\r\n s.measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, 0);\r\n s.keySigLast = SmoMusic.vexKeySignatureTranspose(measureToLeft.keySignature, 0);\r\n s.tempoLast = measureToLeft.getTempo();\r\n s.timeSigLast = measureToLeft.timeSignature;\r\n s.clefLast = measureToLeft.clef;\r\n this.calculateBeginningSymbols(systemIndex, measure, s.clefLast, s.keySigLast, s.timeSigLast, s.tempoLast);\r\n const startX = SuiLayoutFormatter.estimateStartSymbolWidth(measure);\r\n measure.svg.adjX = startX;\r\n maxColumnStartX = Math.max(maxColumnStartX, startX);\r\n });\r\n measures.forEach((measure) => {\r\n measure.svg.maxColumnStartX = maxColumnStartX;\r\n SmoBeamer.applyBeams(measure);\r\n voiceCount += measure.voices.length;\r\n if (measure.isPickup()) {\r\n isPickup = true;\r\n }\r\n if (measure.format.skipMeasureCount) {\r\n measureToSkip = true;\r\n }\r\n measure.measureNumber.systemIndex = systemIndex;\r\n measure.svg.rowInSystem = rowInSystem;\r\n measure.svg.lineIndex = lineIndex;\r\n measure.svg.pageIndex = this.currentPage;\r\n\r\n // calculate vertical offsets from the baseline\r\n const offsets = this.estimateMeasureHeight(measure);\r\n measure.setYTop(offsets.aboveBaseline, 'render:estimateColumn');\r\n measure.setY(y - measure.yTop, 'estimateColumns height');\r\n measure.setX(x, 'render:estimateColumn');\r\n\r\n // Add custom width to measure:\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, offsets.belowBaseline - offsets.aboveBaseline), 'render: estimateColumn');\r\n this.estimateMeasureWidth(measure, scoreLayout, contextMap);\r\n y = y + measure.svg.logicalBox.height + scoreLayout.intraGap;\r\n maxCfgWidth = Math.max(maxCfgWidth, measure.staffWidth);\r\n rowInSystem += 1;\r\n });\r\n // justify this column to the maximum width.\r\n const startX = measures[0].staffX;\r\n const adjX = measures[0].svg.maxColumnStartX;\r\n const contexts = Object.keys(contextMap);\r\n const widths: number[] = [];\r\n const durations: number[] = [];\r\n let minTotalWidth = 0;\r\n contexts.forEach((strIx) => {\r\n const ix = parseInt(strIx);\r\n let tickWidth = 0;\r\n const context = contextMap[ix];\r\n if (context.tickCounts.length < voiceCount) {\r\n unalignedCtxCount += 1;\r\n }\r\n context.widths.forEach((w, ix) => {\r\n wsum += w;\r\n dsum += context.tickCounts[ix];\r\n widths.push(w);\r\n durations.push(context.tickCounts[ix]);\r\n tickWidth = Math.max(tickWidth, w);\r\n });\r\n minTotalWidth += tickWidth;\r\n });\r\n // Vex formatter adjusts location of ticks based to keep the justified music aligned. It does this\r\n // by moving notes to the right. We try to add padding to each tick context based on the 'entropy' of the \r\n // music. 4 quarter notes with no accidentals in all voices will have 0 entropy. All the notes need the same\r\n // amount of space, so they don't need additional space to align.\r\n // wvar - the std deviation in the widths or 'width entropy'\r\n // dvar - the std deviation in the duration between voices or 'duration entropy'\r\n const sumArray = (arr: number[]) => arr.reduce((a, b) => a + b, 0);\r\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\r\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\r\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\r\n\r\n const davg = dsum / durations.length;\r\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\r\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\r\n const unalignedPadding = 2;\r\n\r\n const padmax = Math.max(dpads, wpads) * contexts.length * unalignedPadding;\r\n const unalignedPad = unalignedPadding * unalignedCtxCount;\r\n let maxWidth = Math.max(adjX + minTotalWidth + Math.max(unalignedPad, padmax), maxCfgWidth);\r\n if (scoreLayout.maxMeasureSystem > 0 && !isPickup && !measureToSkip) {\r\n // Add 1 because there is some overhead in each measure, \r\n // so there can never be (width/max) measures in the system\r\n const defaultWidth = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1));\r\n maxWidth = Math.max(maxWidth, defaultWidth);\r\n }\r\n const maxX = startX + maxWidth;\r\n measures.forEach((measure) => {\r\n measure.setWidth(maxWidth, 'render:estimateColumn');\r\n // measure.svg.adjX = adjX;\r\n });\r\n const rv = { measures, y, x: maxX };\r\n return rv;\r\n }\r\n /**\r\n * return true if this is the last measure, taking into account multimeasure rest\r\n * @param measureIx \r\n * @returns \r\n */\r\n isLastVisibleMeasure(measureIx: number) {\r\n if (measureIx >= this.score.staves[0].measures.length) {\r\n return true;\r\n }\r\n if (this.score.staves[0].partInfo.expandMultimeasureRests) {\r\n return false;\r\n }\r\n let i = 0;\r\n for (i = measureIx; i < this.score.staves[0].measures.length; ++i) {\r\n const mm = this.score.staves[0].measures[i];\r\n if (!mm.svg.hideMultimeasure) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Calculate the geometry for the entire score, based on estimated measure width and height.\r\n * @returns \r\n */\r\n layout() {\r\n let measureIx = 0;\r\n let systemIndex = 0;\r\n if (!this.score.layoutManager) {\r\n return;\r\n }\r\n let scoreLayout = this.score.layoutManager.getScaledPageLayout(0);\r\n let y = 0;\r\n let x = 0;\r\n let lineIndex = 0;\r\n this.lines = [];\r\n let pageCheck = 0;\r\n // let firstMeasureOnPage = 0;\r\n this.lines.push(lineIndex);\r\n let currentLine: SmoMeasure[] = []; // the system we are esimating\r\n let measureEstimate: MeasureEstimate | null = null;\r\n\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.pre);\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.system);\r\n const timestamp = new Date().valueOf();\r\n\r\n y = scoreLayout.topMargin;\r\n x = scoreLayout.leftMargin;\r\n\r\n while (measureIx < this.score.staves[0].measures.length) {\r\n if (this.score.isPartExposed()) {\r\n if (this.score.staves[0].measures[measureIx].svg.hideMultimeasure) {\r\n measureIx += 1;\r\n continue;\r\n }\r\n }\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n if (systemIndex > 0 &&\r\n (measureEstimate.measures[0].format.systemBreak || measureEstimate.x > (scoreLayout.pageWidth - scoreLayout.leftMargin))) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, false);\r\n // find the measure with the lowest y extend (greatest y value), not necessarily one with lowest\r\n // start of staff.\r\n const bottomMeasure: SmoMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y + a.svg.logicalBox.height > b.svg.logicalBox.y + b.svg.logicalBox.height ? a : b\r\n );\r\n this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n const renderedPage: RenderedPage | null = this.renderedPages[pageCheck];\r\n if (renderedPage) {\r\n if (pageCheck !== this.currentPage) {\r\n // The last measure in the last system of the previous page\r\n const previousSystem = currentLine[0].measureNumber.measureIndex - 1;\r\n if (renderedPage.endMeasure !== previousSystem) {\r\n this.renderedPages[pageCheck] = null;\r\n } \r\n const nextPage = this.renderedPages[this.currentPage];\r\n if (nextPage && nextPage.startMeasure !== previousSystem + 1) {\r\n this.renderedPages[this.currentPage] = null;\r\n } \r\n }\r\n }\r\n pageCheck = this.currentPage;\r\n\r\n const ld = layoutDebug;\r\n const sh = SvgHelpers;\r\n if (layoutDebug.mask & layoutDebug.values.system) {\r\n currentLine.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.system);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Now start rendering on the next system.\r\n y = bottomMeasure.svg.logicalBox.height + bottomMeasure.svg.logicalBox.y + scoreLayout.interGap;\r\n \r\n currentLine = [];\r\n systemIndex = 0;\r\n x = scoreLayout.leftMargin;\r\n lineIndex += 1;\r\n this.lines.push(lineIndex);\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n }\r\n measureEstimate?.measures.forEach((measure) => {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n layoutDebug.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.pre);\r\n }\r\n });\r\n this.updateSystemMap(measureEstimate.measures, lineIndex, systemIndex);\r\n currentLine = currentLine.concat(measureEstimate.measures);\r\n measureIx += 1; \r\n systemIndex += 1;\r\n // If this is the last measure but we have not filled the x extent,\r\n // still justify the vertical staves and check for page break.\r\n if (this.isLastVisibleMeasure(measureIx) && measureEstimate !== null) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, true);\r\n const bottomMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y + a.svg.logicalBox.height > b.svg.logicalBox.y + b.svg.logicalBox.height ? a : b\r\n );\r\n scoreLayout = this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n }\r\n }\r\n // If a measure was added to the last page, make sure we re-render the page\r\n const renderedPage: RenderedPage | null = this.renderedPages[this.currentPage];\r\n if (renderedPage) {\r\n if (renderedPage.endMeasure !== currentLine[0].measureNumber.measureIndex) {\r\n this.renderedPages[this.currentPage] = null;\r\n }\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.COMPUTE, new Date().valueOf() - timestamp);\r\n }\r\n \r\n static estimateMusicWidth(smoMeasure: SmoMeasure, tickContexts: Record): number {\r\n const widths: number[] = [];\r\n // Add up the widths of the music glyphs for each voice, including accidentals etc. We save the widths in a hash by duration\r\n // and later consider overlapping/colliding ticks in each voice\r\n const tmObj = smoMeasure.createMeasureTickmaps();\r\n smoMeasure.voices.forEach((voice) => {\r\n let width = 0;\r\n let duration = 0;\r\n const noteCount = voice.notes.length;\r\n voice.notes.forEach((note) => {\r\n let noteWidth = 0;\r\n const dots: number = (note.dots ? note.dots : 0);\r\n let headWidth: number = vexGlyph.width(vexGlyph.dimensions.noteHead);\r\n // Maybe not the best place for this...ideally we'd get the note head glyph from\r\n // the ntoe.\r\n if (note.tickCount >= 4096 * 4 && note.noteType === 'n') {\r\n headWidth *= 2;\r\n }\r\n const dotWidth: number = vexGlyph.width(vexGlyph.dimensions.dot);\r\n noteWidth += headWidth +\r\n vexGlyph.dimensions.noteHead.spacingRight;\r\n // TODO: Consider engraving font and adjust grace note size?\r\n noteWidth += (headWidth + vexGlyph.dimensions.noteHead.spacingRight) * note.graceNotes.length;\r\n noteWidth += dotWidth * dots + vexGlyph.dimensions.dot.spacingRight * dots;\r\n note.pitches.forEach((pitch) => {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, smoMeasure.keySignature);\r\n const accidentals = tmObj.accidentalArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitch.letter]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitch.letter].pitch.accidental : keyAccidental;\r\n if (declared !== pitch.accidental || pitch.cautionary) {\r\n noteWidth += vexGlyph.accidentalWidth(pitch.accidental);\r\n }\r\n });\r\n\r\n let verse = 0;\r\n let lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n while (lyricBase.length) {\r\n let lyric = lyricBase[0] as SmoLyric;\r\n let lyricWidth = 0;\r\n let i = 0;\r\n // TODO: kerning and all that...\r\n if (!lyric.text.length) {\r\n break;\r\n }\r\n // why did I make this return an array?\r\n // oh...because of voices\r\n const textFont =\r\n TextFormatter.create({ family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal' });\r\n const lyricText = lyric.getText();\r\n for (i = 0; i < lyricText.length; ++i) {\r\n lyricWidth += textFont.getWidthForTextInPx(lyricText[i])\r\n }\r\n if (lyric.isHyphenated()) {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('-');\r\n } else {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('H');\r\n }\r\n noteWidth = Math.max(lyricWidth, noteWidth);\r\n verse += 1;\r\n lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n }\r\n if (!tickContexts[duration]) {\r\n tickContexts[duration] = {\r\n widths: [],\r\n tickCounts: [] \r\n }\r\n }\r\n if (smoMeasure.repeatSymbol) {\r\n noteWidth = vexGlyph.repeatSymbolWidth() / noteCount; \r\n }\r\n tickContexts[duration].widths.push(noteWidth);\r\n tickContexts[duration].tickCounts.push(note.tickCount);\r\n duration += Math.round(note.tickCount);\r\n width += noteWidth;\r\n });\r\n widths.push(width);\r\n });\r\n widths.sort((a, b) => a > b ? -1 : 1);\r\n return widths[0];\r\n }\r\n\r\n static estimateStartSymbolWidth(smoMeasure: SmoMeasure): number {\r\n let width = 0;\r\n // the variables starts and digits used to be in the if statements. I moved them here to fix the resulting error\r\n var starts = smoMeasure.getStartBarline();\r\n var digits = smoMeasure.timeSignature.timeSignature.split('/')[0].length;\r\n if (smoMeasure.svg.forceKeySignature) {\r\n if (smoMeasure.canceledKeySignature) {\r\n width += vexGlyph.keySignatureLength(smoMeasure.canceledKeySignature);\r\n }\r\n width += vexGlyph.keySignatureLength(smoMeasure.keySignature);\r\n }\r\n if (smoMeasure.svg.forceClef) {\r\n const clefGlyph = vexGlyph.clef(smoMeasure.clef);\r\n width += clefGlyph.width + clefGlyph.spacingRight;\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n width += vexGlyph.width(vexGlyph.dimensions.timeSignature) * digits + vexGlyph.dimensions.timeSignature.spacingRight;\r\n }\r\n if (starts) {\r\n width += vexGlyph.barWidth(starts);\r\n }\r\n return width;\r\n }\r\n static estimateEndSymbolWidth(smoMeasure: SmoMeasure) {\r\n var width = 0;\r\n var ends = smoMeasure.getEndBarline();\r\n if (ends) {\r\n width += vexGlyph.barWidth(ends);\r\n }\r\n return width;\r\n }\r\n\r\n estimateMeasureWidth(measure: SmoMeasure, scoreLayout: ScaledPageLayout, tickContexts: Record) {\r\n // Calculate the existing staff width, based on the notes and what we expect to be rendered.\r\n let measureWidth = SuiLayoutFormatter.estimateMusicWidth(measure, tickContexts) + defaultMeasurePadding;\r\n // measure.svg.adjX already set based on max column adjX\r\n measure.svg.adjRight = SuiLayoutFormatter.estimateEndSymbolWidth(measure);\r\n measureWidth += measure.svg.adjX + measure.svg.adjRight + measure.format.customStretch + measure.format.padLeft;\r\n const y = measure.svg.logicalBox.y;\r\n // For systems that start with padding, add width for the padding\r\n measure.setWidth(measureWidth, 'estimateMeasureWidth adjX adjRight');\r\n // Calculate the space for left/right text which displaces the measure.\r\n // measure.setX(measure.staffX + textOffsetBox.x,'estimateMeasureWidth');\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, measure.svg.logicalBox.height),\r\n 'estimate measure width');\r\n }\r\n static _beamGroupForNote(measure: SmoMeasure, note: SmoNote): ISmoBeamGroup | null {\r\n let rv: ISmoBeamGroup | null = null;\r\n if (!note.beam_group) {\r\n return null;\r\n }\r\n measure.beamGroups.forEach((bg) => {\r\n if (!rv) {\r\n if (bg.notes.findIndex((note) => note.beam_group && note.beam_group.id === bg.attrs.id) >= 0) {\r\n rv = bg;\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * A system has gone beyond the page width. Lop the last measure off the end and move it to the first measure of the\r\n * next system. Then seal the last system by justifying the measures vertically and horinzontally\r\n * @param scoreLayout \r\n * @param measureEstimate \r\n * @param currentLine \r\n * @param columnCount \r\n * @param lastSystem \r\n */\r\n justifyY(scoreLayout: ScaledPageLayout, rowCount: number, currentLine: SmoMeasure[], lastSystem: boolean) {\r\n let i = 0;\r\n const sh = SvgHelpers;\r\n // If there are fewer measures in the system than the max, don't justify.\r\n // We estimate the staves at the same absolute y value.\r\n // Now, move them down so the top of the staves align for all measures in a row.\r\n const measuresToHide: SmoMeasure[] = [];\r\n let anyNotes = false;\r\n for (i = 0; i < rowCount; ++i) {\r\n // lowest staff has greatest staffY value.\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n const lowestStaff = rowAdj.reduce((a, b) =>\r\n a.staffY > b.staffY ? a : b\r\n );\r\n const hasNotes = rowAdj.findIndex((x) => x.isRest() === false) >= 0;\r\n if (hasNotes) {\r\n anyNotes = true;\r\n }\r\n rowAdj.forEach((measure) => {\r\n measure.svg.hideEmptyMeasure = false;\r\n if (this.score.preferences.hideEmptyLines && !hasNotes && !this.score.isPartExposed()) {\r\n measuresToHide.push(measure);\r\n }\r\n const adj = lowestStaff.staffY - measure.staffY;\r\n measure.setY(measure.staffY + adj, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x, measure.svg.logicalBox.y + adj, measure.svg.logicalBox.width, measure.svg.logicalBox.height), 'justifyY');\r\n });\r\n const rightStaff = rowAdj.reduce((a, b) =>\r\n a.staffX + a.staffWidth > b.staffX + b.staffWidth ? a : b);\r\n\r\n const ld = layoutDebug;\r\n let justifyX = 0;\r\n let columnCount = rowAdj.length;\r\n // missing offset is for systems that have fewer measures than the default (due to section break or score ending)\r\n let missingOffset = 0;\r\n if (scoreLayout.maxMeasureSystem > 1 && \r\n columnCount < scoreLayout.maxMeasureSystem\r\n && lastSystem) {\r\n missingOffset = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1)) * (scoreLayout.maxMeasureSystem - columnCount);\r\n columnCount = scoreLayout.maxMeasureSystem;\r\n }\r\n if (scoreLayout.maxMeasureSystem > 1 || !lastSystem) {\r\n justifyX = Math.round((scoreLayout.pageWidth - (scoreLayout.leftMargin + scoreLayout.rightMargin + rightStaff.staffX + rightStaff.staffWidth + missingOffset))\r\n / columnCount);\r\n }\r\n let justOffset = 0;\r\n rowAdj.forEach((measure) => {\r\n measure.setWidth(measure.staffWidth + justifyX, '_estimateMeasureDimensions justify');\r\n measure.setX(measure.staffX + justOffset, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x + justOffset,\r\n measure.svg.logicalBox.y, measure.staffWidth, measure.svg.logicalBox.height), 'justifyY');\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.adjust);\r\n }\r\n justOffset += justifyX;\r\n });\r\n }\r\n if (this.score.preferences.hideEmptyLines && anyNotes) {\r\n let adjY = 0;\r\n for (i = 0; i < rowCount; ++i) {\r\n const rowAdj = measuresToHide.filter((mm) => mm.svg.rowInSystem === i);\r\n if (rowAdj.length) {\r\n adjY += rowAdj[0].svg.logicalBox.height;\r\n rowAdj.forEach((mm) => {\r\n mm.svg.logicalBox.height = 0;\r\n mm.svg.hideEmptyMeasure = true;\r\n });\r\n } else {\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n rowAdj.forEach((row) => {\r\n row.setY(row.svg.staffY - adjY, 'format-hide');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * highest value is actually the one lowest on the page\r\n * @param measure \r\n * @param note \r\n * @returns \r\n */\r\n static _highestLowestHead(measure: SmoMeasure, note: SmoNote) {\r\n // note...er warning: Notes always have at least 1 pitch, even a rest\r\n // or glyph has a pitch to indicate the placement\r\n const hilo = { hi: 0, lo: 99999999 }; \r\n note.pitches.forEach((pitch) => { \r\n const line = 5 - SmoMusic.pitchToStaffLine(measure.clef, pitch);\r\n // TODO: use actual note head/rest/glyph. 10 px is space between staff lines\r\n const noteHeight = 10;\r\n const px = (noteHeight * line);\r\n hilo.lo = Math.min(hilo.lo, px - noteHeight / 2);\r\n hilo.hi = Math.max(hilo.hi, px + noteHeight / 2);\r\n });\r\n return hilo;\r\n }\r\n static textFont(lyric: SmoLyric) {\r\n return TextFormatter.create(lyric.fontInfo);\r\n }\r\n\r\n /**\r\n * Calculate the dimensions of symbols based on where in a system we are, like whether we need to show\r\n * the key signature, clef etc.\r\n * @param systemIndex \r\n * @param measure \r\n * @param clefLast \r\n * @param keySigLast \r\n * @param timeSigLast \r\n * @param tempoLast \r\n * @param score \r\n */\r\n calculateBeginningSymbols(systemIndex: number, measure: SmoMeasure,\r\n clefLast: string, keySigLast: string, timeSigLast: TimeSignature, tempoLast: SmoTempoText) {\r\n // The key signature is set based on the transpose index already, i.e. an Eb part in concert C already has 3 sharps.\r\n const xposeScore = this.score?.preferences?.transposingScore && (this.score?.isPartExposed() === false);\r\n const xposeOffset = xposeScore ? measure.transposeIndex : 0;\r\n const measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, xposeOffset);\r\n measure.svg.forceClef = (systemIndex === 0 || measure.clef !== clefLast);\r\n measure.svg.forceTimeSignature = (measure.measureNumber.measureIndex === 0 || \r\n (!SmoMeasure.timeSigEqual(timeSigLast, measure.timeSignature)) || measure.timeSignature.displayString.length > 0);\r\n if (measure.timeSignature.display === false) {\r\n measure.svg.forceTimeSignature = false;\r\n }\r\n measure.svg.forceTempo = false;\r\n const tempo = measure.getTempo();\r\n if (tempo && measure.measureNumber.measureIndex === 0) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n } else if (tempo && tempoLast) {\r\n if (!SmoTempoText.eq(tempo, tempoLast) && measure.svg.rowInSystem === 0) {\r\n measure.svg.forceTempo = tempo.display;\r\n }\r\n } else if (tempo) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n }\r\n if (measureKeySig !== keySigLast && measure.measureNumber.measureIndex > 0) {\r\n measure.canceledKeySignature = SmoMusic.vexKeySigWithOffset(keySigLast, xposeOffset);\r\n measure.svg.forceKeySignature = true;\r\n } else if (systemIndex === 0 && measureKeySig !== 'C') {\r\n measure.svg.forceKeySignature = true;\r\n } else {\r\n measure.svg.forceKeySignature = false;\r\n }\r\n }\r\n\r\n /**\r\n * The baseline is the top line of the staff. aboveBaseline is a negative number\r\n * that indicates how high above the baseline the measure goes. belowBaseline\r\n * is a positive number that indicates how far below the baseline the measure goes.\r\n * the height of the measure is below-above. Vex always renders a staff such that\r\n * the y coordinate passed in for the stave is on the baseline.\r\n * \r\n * Note to past self: this was a really useful comment. Thank you.\r\n * **/\r\n estimateMeasureHeight(measure: SmoMeasure): { aboveBaseline: number, belowBaseline: number } {\r\n let yTop = 0; // highest point, smallest Y value\r\n let yBottom = measure.lines * 10; // lowest point, largest Y value.\r\n let flag: number = -1;\r\n let lyricOffset = 0;\r\n const measureIndex = measure.measureNumber.measureIndex;\r\n const staffIndex = measure.measureNumber.staffId;\r\n const stave = this.score.staves[staffIndex];\r\n stave.renderableModifiers.forEach((mm) => {\r\n if (mm.startSelector.staff === staffIndex && (mm.startSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex) ||\r\n mm.endSelector.staff === staffIndex && \r\n (mm.endSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex && mm.endSelector.measure !== mm.startSelector.measure)) {\r\n if (mm.ctor === 'SmoHairpin') {\r\n const hp = mm as SmoStaffHairpin;\r\n if (hp.position === SmoStaffHairpin.positions.ABOVE) {\r\n yTop = yTop - hp.height;\r\n } else {\r\n yBottom = yBottom + hp.height;\r\n }\r\n } else if (mm.ctor === 'SmoStaffTextBracket') {\r\n const tb = mm as SmoStaffTextBracket;\r\n const tbHeight = 14 + (10 * Math.abs(tb.line - 1)); // 14 default font size\r\n if (tb.position === SmoStaffTextBracket.positions.TOP) {\r\n yTop = yTop - tbHeight;\r\n } else {\r\n yBottom = yBottom + tbHeight;\r\n } \r\n }\r\n }\r\n });\r\n if (measure.svg.forceClef) {\r\n yBottom += vexGlyph.clef(measure.clef).yTop + vexGlyph.clef(measure.clef).yBottom;\r\n yTop = yTop - vexGlyph.clef(measure.clef).yTop;\r\n }\r\n\r\n if (measure.svg.forceTempo) {\r\n yTop = Math.min(-1 * vexGlyph.tempo.yTop, yTop);\r\n }\r\n let yBottomOffset = 0;\r\n let yBottomVoiceZero = 0;\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const bg = SuiLayoutFormatter._beamGroupForNote(measure, note);\r\n flag = SmoNote.flagStates.auto;\r\n if (bg && note.noteType === 'n') {\r\n flag = bg.notes[0].flagState;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = bg.notes[0].pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n } else {\r\n flag = note.flagState;\r\n // odd-numbered voices flip default up/down\r\n const voiceMod = voiceIx % 2;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = note.pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n if (voiceMod === 1) {\r\n flag = (flag === SmoNote.flagStates.down) ? SmoNote.flagStates.up : SmoNote.flagStates.down;\r\n }\r\n }\r\n }\r\n const hiloHead = SuiLayoutFormatter._highestLowestHead(measure, note);\r\n if (flag === SmoNote.flagStates.down) {\r\n yTop = Math.min(hiloHead.lo, yTop);\r\n yBottom = Math.max(hiloHead.hi + vexGlyph.stem.height, yBottom);\r\n } else {\r\n yTop = Math.min(hiloHead.lo - vexGlyph.stem.height, yTop);\r\n yBottom = Math.max(hiloHead.hi, yBottom);\r\n }\r\n // Lyrics will be rendered below the lowest thing on the staff, so add to\r\n // belowBaseline value based on the max number of verses and font size\r\n // it will extend\r\n });\r\n // Vex won't adjust for music in voices > 0 when placing lyrics. \r\n // So we need to adjust here, if voices > 0 have music below lyrics. \r\n if (voiceIx > 0 && yBottomVoiceZero < yBottom) {\r\n yBottomOffset = yBottom - yBottomVoiceZero;\r\n } else {\r\n yBottomVoiceZero = yBottom;\r\n }\r\n });\r\n let lyricsToAdjust: SmoLyric[] = [];\r\n // get the lowest music part, then consider the lyrics\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const lyrics = note.getTrueLyrics();\r\n lyricsToAdjust = lyricsToAdjust.concat(lyrics);\r\n if (lyrics.length) {\r\n const maxLyric = lyrics.reduce((a, b) => a.verse > b.verse ? a : b);\r\n const fontInfo = SuiLayoutFormatter.textFont(maxLyric);\r\n lyricOffset = Math.max((maxLyric.verse + 2) * fontInfo.maxHeight, lyricOffset);\r\n }\r\n const dynamics = note.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n dynamics.forEach((dyn) => {\r\n yBottom = Math.max((10 * dyn.yOffsetLine - 50) + 11, yBottom);\r\n yTop = Math.min(10 * dyn.yOffsetLine - 50, yTop);\r\n });\r\n note.articulations.forEach((articulation) => {\r\n if (articulation.position === SmoArticulation.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n });\r\n note.ornaments.forEach((ornament) => {\r\n if (ornament.position === SmoOrnament.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n })\r\n });\r\n });\r\n yBottom += lyricOffset;\r\n if (lyricsToAdjust.length > 0) {\r\n lyricsToAdjust.forEach((lyric: SmoLyric) => {\r\n lyric.musicYOffset = yBottomOffset;\r\n });\r\n }\r\n return { belowBaseline: yBottom, aboveBaseline: yTop };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\ndeclare var $: any;\r\n\r\nexport interface CodeRegion {\r\n time: number,\r\n percent: number\r\n}\r\nexport class layoutDebug {\r\n static get values(): Record {\r\n return {\r\n pre: 1,\r\n play: 2,\r\n adjust: 4,\r\n system: 8,\r\n scroll: 16,\r\n artifactMap: 32,\r\n mouseDebug: 64,\r\n dragDebug: 128,\r\n dialogEvents: 256,\r\n cursor: 512\r\n };\r\n }\r\n\r\n static get classes(): Record {\r\n return {\r\n 1: 'measure-place-dbg',\r\n 2: 'measure-play-dbg',\r\n 4: 'measure-adjust-dbg',\r\n 8: 'system-place-dbg',\r\n 16: 'scroll-box-debug',\r\n 32: 'measure-adjustHeight-dbg',\r\n 64: 'mouse-debug',\r\n 128: 'drag-debug',\r\n 256: '',\r\n 512: 'cursor-adj-dbg',\r\n };\r\n }\r\n static get codeRegions(): Record {\r\n return {\r\n COMPUTE: 0,\r\n PREFORMATA: 1,\r\n PREFORMATB: 2,\r\n PREFORMATC: 3,\r\n FORMAT: 4,\r\n RENDER: 5,\r\n UPDATE_MAP: 6,\r\n POST_RENDER: 7,\r\n MAP: 8,\r\n LAST: 8\r\n };\r\n }\r\n static get codeRegionStrings(): string[] {\r\n return ['COMPUTE', 'PREFORMATA', 'PREFORMATB', 'PREFORMATC', 'FORMAT', 'RENDER', 'UPDATE_MAP', 'POST_RENDER', 'MAP'];\r\n }\r\n static mask: number = 0;\r\n static _textDebug: number[] = [];\r\n static timestampHash: Record = {};\r\n static _dialogEvents: string[] = [];\r\n\r\n static clearTimestamps() {\r\n for (var i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n layoutDebug.timestampHash[i] = 0;\r\n }\r\n }\r\n\r\n static setTimestamp(region: number, millis: number) {\r\n layoutDebug.timestampHash[region] += millis;\r\n }\r\n static printTimeReport() {\r\n let total = 0;\r\n let report: Record = {};\r\n let i = 0;\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n total += layoutDebug.timestampHash[i];\r\n report[layoutDebug.codeRegionStrings[i]] = {\r\n time: layoutDebug.timestampHash[i], percent: 0\r\n };\r\n }\r\n report['total'] = { time: total, percent: 100 };\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n report[layoutDebug.codeRegionStrings[i]].percent =\r\n Math.round((report[layoutDebug.codeRegionStrings[i]].time * 100) / report.total.time);\r\n }\r\n console.log(JSON.stringify(report, null, ' '));\r\n }\r\n\r\n static flagSet(value: number) {\r\n return layoutDebug.mask & value;\r\n }\r\n\r\n static clearAll() {\r\n layoutDebug.mask = 0;\r\n }\r\n static setAll() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256;\r\n }\r\n static setRenderFlags() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32;\r\n }\r\n static clearDebugBoxes(value: number) {\r\n if (layoutDebug.flagSet(value)) {\r\n var selector = 'g.' + layoutDebug.classes[value];\r\n $(selector).remove();\r\n }\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, flag: number) {\r\n if (!box) {\r\n return;\r\n }\r\n if (!box.height) {\r\n box.height = 1;\r\n }\r\n if (layoutDebug.flagSet(flag)) {\r\n SvgHelpers.debugBox(svg, box, layoutDebug.classes[flag], 0);\r\n }\r\n }\r\n\r\n static setFlag(value: number) {\r\n var flag = layoutDebug.values[value];\r\n if (typeof (layoutDebug.mask) == 'undefined') {\r\n layoutDebug.mask = flag;\r\n return;\r\n }\r\n layoutDebug.mask |= flag;\r\n layoutDebug.setFlagDivs();\r\n }\r\n static setFlagDivs() {\r\n $('.scroll-box-debug').remove();\r\n $('.drag-debug').remove();\r\n $('.mouse-debug').remove();\r\n $('.play-debug').remove();\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.mouseDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.dragDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.play) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n }\r\n static updateScrollDebug(point: SvgPoint) {\r\n const displayString = 'X: ' + point.x + ' Y: ' + point.y;\r\n $('.scroll-box-debug').text(displayString);\r\n $('.scroll-box-debug').css('left', '2%').css('top', '20px');\r\n }\r\n static updateMouseDebug(client: SvgPoint, logical: SvgPoint, offset: SvgPoint) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) offset (${offset.x}, ${offset.y})`;\r\n $('.mouse-debug').text(displayString);\r\n $('.mouse-debug').css('left', '2%').css('top', '60px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updateDragDebug(client: SvgPoint, logical: SvgPoint, state: string) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) state ${state})`;\r\n $('.drag-debug').text(displayString);\r\n $('.drag-debug').css('left', '2%').css('top', '80px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updatePlayDebug(selector: SmoSelector, logical: SvgBox) {\r\n const displayString = `mm: ${selector.measure} tick: ${selector.tick} svg: (${logical.x},${logical.y}, ${logical.width}, ${logical.height})`;\r\n $('.play-debug').text(displayString);\r\n $('.play-debug').css('left', '2%').css('top', '100px').css('position','absolute').css('font-size','11px');\r\n }\r\n\r\n static addTextDebug(value: number) {\r\n layoutDebug._textDebug.push(value);\r\n console.log(value);\r\n }\r\n\r\n static addDialogDebug(value: string) {\r\n layoutDebug._dialogEvents.push(value);\r\n console.log(value);\r\n }\r\n\r\n static measureHistory(measure: SmoMeasure, oldVal: string, newVal: any, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n var oldExp = (typeof ((measure as any).svg[oldVal]) == 'object') ?\r\n JSON.stringify((measure as any).svg[oldVal]).replace(/\"/g, '') : (measure as any).svg[oldVal];\r\n var newExp = (typeof (newVal) == 'object') ? JSON.stringify(newVal).replace(/\"/g, '') : newVal;\r\n measure.svg.history.push(oldVal + ': ' + oldExp + '=> ' + newExp + ' ' + description);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelector, SmoSelection, ModifierTab } from '../../smo/xform/selections';\r\nimport { OutlineInfo, SvgHelpers } from './svgHelpers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNoteModifierBase, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore, SmoModifier } from '../../smo/data/score';\r\nimport { SvgPageMap } from './svgPageMap';\r\n\r\n/**\r\n * DI information about renderer, so we can notify renderer and it can contain\r\n * a tracker object\r\n * @param pageMap {@link SvgPageMap}: SvgPageMap - container of SVG elements and vex renderers\r\n * @param score {@link SmoScore}\r\n * @param dirty lets the caller know the display needs update\r\n * @param passState state machine in rendering part/all of the score\r\n * @param renderPromise awaits on render all\r\n * @param addToReplaceQueue adds a measure to the quick update queue\r\n * @param renderElement a little redundant with svg\r\n * @category SuiRender\r\n */\r\nexport interface SuiRendererBase {\r\n pageMap: SvgPageMap,\r\n score: SmoScore | null,\r\n dirty: boolean,\r\n passState: number,\r\n renderPromise(): Promise,\r\n addToReplaceQueue(mm: SmoSelection[]): void,\r\n renderElement: Element\r\n}\r\n// used to perform highlights in the backgroundd\r\nexport interface HighlightQueue {\r\n selectionCount: number, deferred: boolean\r\n}\r\n/**\r\n * Map the notes in the svg so they can respond to events and interact\r\n * with the mouse/keyboard\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiMapper {\r\n renderer: SuiRendererBase;\r\n scroller: SuiScroller;\r\n // measure to selector map\r\n measureNoteMap: Record = {};\r\n // notes currently selected. Something is always selected\r\n // modifiers (text etc.) that have been selected\r\n modifierSelections: ModifierTab[] = [];\r\n selections: SmoSelection[] = [];\r\n // The list of modifiers near the current selection\r\n localModifiers: ModifierTab[] = [];\r\n modifierIndex: number = -1;\r\n modifierSuggestion: ModifierTab | null = null;\r\n pitchIndex: number = -1;\r\n // By default, defer highlights for performance.\r\n deferHighlightMode: boolean = true;\r\n suggestion: SmoSelection | null = null;\r\n pasteBuffer: PasteBuffer;\r\n highlightQueue: HighlightQueue;\r\n mouseHintBox: OutlineInfo | null = null;\r\n selectionRects: Record = {};\r\n outlines: Record = {};\r\n mapping: boolean = false;\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller, pasteBuffer: PasteBuffer) {\r\n // renderer renders the music when it changes\r\n this.renderer = renderer;\r\n this.scroller = scroller;\r\n this.modifierIndex = -1;\r\n this.localModifiers = [];\r\n // index if a single pitch of a chord is selected\r\n this.pitchIndex = -1;\r\n // the current selection, which is also the copy/paste destination\r\n this.pasteBuffer = pasteBuffer;\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n abstract highlightSelection(): void;\r\n abstract _growSelectionRight(hold?: boolean): number; \r\n abstract _setModifierAsSuggestion(sel: ModifierTab): void;\r\n abstract _setArtifactAsSuggestion(sel: SmoSelection): void;\r\n abstract getIdleTime(): number;\r\n updateHighlight() {\r\n const self = this;\r\n if (this.selections.length === 0) {\r\n this.highlightQueue.deferred = false;\r\n this.highlightQueue.selectionCount = 0;\r\n return;\r\n }\r\n if (this.highlightQueue.selectionCount === this.selections.length) {\r\n this.highlightSelection();\r\n this.highlightQueue.deferred = false;\r\n } else {\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n deferHighlight() {\r\n if (!this.deferHighlightMode) {\r\n this.highlightSelection();\r\n }\r\n const self = this;\r\n if (!this.highlightQueue.deferred) {\r\n this.highlightQueue.deferred = true;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n _createLocalModifiersList() {\r\n this.localModifiers = [];\r\n let index = 0;\r\n this.selections.forEach((sel) => {\r\n sel.note?.getGraceNotes().forEach((gg) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: gg, box: gg.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.note?.getModifiers('SmoDynamicText').forEach((dyn) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: dyn, box: dyn.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoVolta').forEach((volta) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: volta, box: volta.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoTempoText').forEach((tempo) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: tempo, box: tempo.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.staff.renderableModifiers.forEach((mod) => {\r\n if (SmoSelector.gteq(sel.selector, mod.startSelector) &&\r\n SmoSelector.lteq(sel.selector, mod.endSelector) && mod.logicalBox) {\r\n const exists = this.localModifiers.find((mm) => mm.modifier.ctor === mod.ctor);\r\n if (!exists) {\r\n this.localModifiers.push({ index, selection: sel, modifier: mod, box: mod.logicalBox });\r\n index += 1;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * When a modifier is selected graphically, update the selection list\r\n * and create a local modifier list\r\n * @param modifierTabs \r\n */\r\n createLocalModifiersFromModifierTabs(modifierTabs: ModifierTab[]) {\r\n const selections: SmoSelection[] = [];\r\n const modMap: Record = {};\r\n modifierTabs.forEach((mt) => {\r\n if (mt.selection) {\r\n const key = SmoSelector.getNoteKey(mt.selection.selector);\r\n if (!modMap[key]) {\r\n selections.push(mt.selection);\r\n modMap[key] = true;\r\n }\r\n }\r\n });\r\n if (selections.length) {\r\n this.selections = selections;\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n }\r\n }\r\n // used by remove dialogs to clear removed thing\r\n clearModifierSelections() {\r\n this.modifierSelections = [];\r\n this._createLocalModifiersList();\r\n this.modifierIndex = -1;\r\n if (this.outlines['staffModifier'] && this.outlines['staffModifier'].element) {\r\n this.outlines['staffModifier'].element.remove();\r\n this.outlines['staffModifier'].element = undefined;\r\n }\r\n // this.eraseRect('staffModifier'); not sure where this should go\r\n }\r\n // ### loadScore\r\n // We are loading a new score. clear the maps so we can rebuild them after\r\n // rendering\r\n loadScore() {\r\n this.measureNoteMap = {};\r\n this.clearModifierSelections();\r\n this.selections = [];\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n // ### _clearMeasureArtifacts\r\n // clear the measure from the measure and note maps so we can rebuild it.\r\n clearMeasureMap(measure: SmoMeasure) {\r\n const selector = { staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] };\r\n\r\n // Unselect selections in this measure so we can reselect them when re-tracked\r\n const ar: SmoSelection[] = [];\r\n this.selections.forEach((selection) => {\r\n if (selection.selector.staff !== selector.staff || selection.selector.measure !== selector.measure) {\r\n ar.push(selection);\r\n }\r\n });\r\n this.selections = ar;\r\n }\r\n\r\n _copySelectionsByMeasure(staffIndex: number, measureIndex: number) {\r\n const rv = this.selections.filter((sel) => sel.selector.staff === staffIndex && sel.selector.measure === measureIndex);\r\n const ticks = rv.length < 1 ? 0 : rv.map((sel) => (sel.note as SmoNote).tickCount).reduce((a, b) => a + b);\r\n const selectors: SmoSelector[] = [];\r\n rv.forEach((sel) => {\r\n const nsel = JSON.parse(JSON.stringify(sel.selector));\r\n if (!nsel.pitches) {\r\n nsel.pitches = [];\r\n }\r\n selectors.push(nsel);\r\n });\r\n return { ticks, selectors };\r\n }\r\n deleteMeasure(selection: SmoSelection) {\r\n const selCopy = this._copySelectionsByMeasure(selection.selector.staff, selection.selector.measure)\r\n .selectors;\r\n this.clearMeasureMap(selection.measure);\r\n if (selCopy.length) {\r\n selCopy.forEach((selector) => {\r\n const nsel = JSON.parse(JSON.stringify(selector));\r\n if (selector.measure === 0) {\r\n nsel.measure += 1;\r\n } else {\r\n nsel.measure -= 1;\r\n }\r\n this.selections.push(this._getClosestTick(nsel));\r\n });\r\n }\r\n }\r\n _updateNoteModifier(selection: SmoSelection, modMap: Record, modifier: SmoNoteModifierBase, ix: number) {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab(\r\n {\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n }\r\n );\r\n ix += 1;\r\n const context = this.renderer.pageMap.getRendererFromModifier(modifier);\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n return ix;\r\n }\r\n\r\n _updateModifiers() {\r\n let ix = 0;\r\n const modMap: Record = {};\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n this.renderer.score.textGroups.forEach((modifier) => {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection: null,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n }\r\n });\r\n const keys = Object.keys(this.measureNoteMap); \r\n keys.forEach((selKey) => {\r\n const selection = this.measureNoteMap[selKey];\r\n selection.staff.renderableModifiers.forEach((modifier) => {\r\n if (SmoSelector.contains(selection.selector, modifier.startSelector, modifier.endSelector)) {\r\n if (!modMap[modifier.attrs.id]) {\r\n if (modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n }\r\n }\r\n });\r\n selection.measure.modifiers.forEach((modifier) => {\r\n if (modifier.attrs.id\r\n && !modMap[modifier.attrs.id]\r\n && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: SvgHelpers.smoBox(modifier.logicalBox),\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n });\r\n selection.note?.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox) {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n }\r\n });\r\n\r\n selection.note?.graceNotes.forEach((modifier) => {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n });\r\n });\r\n }\r\n // ### _getClosestTick\r\n // given a musical selector, find the note artifact that is closest to it,\r\n // if an exact match is not available\r\n _getClosestTick(selector: SmoSelector): SmoSelection {\r\n let tickKey: string | undefined = '';\r\n const measureKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameMeasure(this.measureNoteMap[k].selector, selector)\r\n && this.measureNoteMap[k].selector.tick === 0);\r\n tickKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameNote(this.measureNoteMap[k].selector, selector));\r\n const firstObj = this.measureNoteMap[Object.keys(this.measureNoteMap)[0]];\r\n\r\n if (tickKey) {\r\n return this.measureNoteMap[tickKey];\r\n }\r\n if (measureKey) {\r\n return this.measureNoteMap[measureKey];\r\n }\r\n return firstObj;\r\n }\r\n\r\n // ### _setModifierBoxes\r\n // Create the DOM modifiers for the lyrics and other modifiers\r\n _setModifierBoxes(measure: SmoMeasure) {\r\n const context = this.renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n measure.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((smoNote: SmoNote) => {\r\n if (context) {\r\n const el = context.svg.getElementById(smoNote.renderId as string);\r\n if (el) {\r\n SvgHelpers.updateArtifactBox(context, (el as any), smoNote);\r\n // TODO: fix this, only works on the first line.\r\n smoNote.getModifiers('SmoLyric').forEach((lyrict: SmoNoteModifierBase) => {\r\n const lyric: SmoLyric = lyrict as SmoLyric;\r\n if (lyric.getText().length || lyric.isHyphenated()) {\r\n const lyricElement = context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (lyricElement) {\r\n SvgHelpers.updateArtifactBox(context, lyricElement, lyric as any);\r\n }\r\n }\r\n });\r\n }\r\n smoNote.graceNotes.forEach((g) => {\r\n if (g.element) {\r\n }\r\n var gel = context.svg.getElementById('vf-' + g.renderId) as SVGSVGElement;\r\n SvgHelpers.updateArtifactBox(context, gel, g);\r\n });\r\n smoNote.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox && modifier.element) {\r\n SvgHelpers.updateArtifactBox(context, modifier.element, modifier as any);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * returns true of the selections are adjacent\r\n * @param s1 a selections\r\n * @param s2 another election\r\n * @returns \r\n */\r\n isAdjacentSelection(s1: SmoSelection, s2: SmoSelection) {\r\n if (!this.renderer.score) {\r\n return false;\r\n }\r\n const nextSel = SmoSelection.advanceTicks(this.renderer.score, s1, 1);\r\n if (!nextSel) {\r\n return false;\r\n }\r\n return SmoSelector.eq(nextSel.selector, s2.selector);\r\n }\r\n areSelectionsAdjacent() {\r\n let selectionIx = 0;\r\n for (selectionIx = 0; this.selections.length > 1 && selectionIx < this.selections.length - 1; ++selectionIx) {\r\n if (!this.isAdjacentSelection(this.selections[selectionIx], this.selections[selectionIx + 1])) {\r\n return false;\r\n }\r\n }\r\n return true; \r\n }\r\n // ### updateMeasure\r\n // A measure has changed. Update the music geometry for it\r\n mapMeasure(staff: SmoSystemStaff, measure: SmoMeasure, printing: boolean) {\r\n let voiceIx = 0;\r\n let selectedTicks = 0;\r\n\r\n // We try to restore block selections. If all the selections in this block are not adjacent, only restore individual selections\r\n // if possible\r\n let adjacentSels = this.areSelectionsAdjacent();\r\n const lastResortSelection: SmoSelection[] = [];\r\n let selectionChanged = false;\r\n let vix = 0;\r\n let replacedSelectors = 0;\r\n if (!measure.svg.logicalBox) {\r\n return;\r\n }\r\n this._setModifierBoxes(measure);\r\n const timestamp = new Date().valueOf();\r\n // Keep track of any current selections in this measure, we will try to restore them.\r\n const sels = this._copySelectionsByMeasure(staff.staffId, measure.measureNumber.measureIndex);\r\n this.clearMeasureMap(measure);\r\n if (sels.selectors.length) {\r\n vix = sels.selectors[0].voice;\r\n }\r\n sels.selectors.forEach((sel) => {\r\n sel.voice = vix;\r\n });\r\n\r\n measure.voices.forEach((voice) => {\r\n let tick = 0;\r\n voice.notes.forEach((note) => {\r\n const selector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: voiceIx,\r\n tick,\r\n pitches: []\r\n };\r\n if (typeof(note.logicalBox) === 'undefined') {\r\n console.warn('note has no box');\r\n }\r\n // create a selection for the newly rendered note\r\n const selection = new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n box: SvgHelpers.smoBox(SvgHelpers.smoBox(note.logicalBox)),\r\n type: 'rendered'\r\n });\r\n // and add it to the map\r\n this._updateMeasureNoteMap(selection, printing);\r\n\r\n // If this note is the same location as something that was selected, reselect it\r\n if (replacedSelectors < sels.selectors.length && selection.selector.tick === sels.selectors[replacedSelectors].tick &&\r\n selection.selector.voice === vix) {\r\n this.selections.push(selection);\r\n // Reselect any pitches.\r\n if (sels.selectors[replacedSelectors].pitches.length > 0) {\r\n sels.selectors[replacedSelectors].pitches.forEach((pitchIx) => {\r\n if (selection.note && selection.note.pitches.length > pitchIx) {\r\n selection.selector.pitches.push(pitchIx);\r\n }\r\n });\r\n }\r\n const note = selection.note as SmoNote;\r\n selectedTicks += note.tickCount;\r\n replacedSelectors += 1;\r\n selectionChanged = true;\r\n } else if (adjacentSels && selectedTicks > 0 && selectedTicks < sels.ticks && selection.selector.voice === vix) {\r\n // try to select the same length of music as was previously selected. So a 1/4 to 2 1/8, both\r\n // are selected\r\n replacedSelectors += 1;\r\n this.selections.push(selection);\r\n selectedTicks += note.tickCount;\r\n } else if (this.selections.length === 0 && sels.selectors.length === 0 && lastResortSelection.length === 0) {\r\n lastResortSelection.push(selection);\r\n }\r\n tick += 1;\r\n });\r\n voiceIx += 1;\r\n });\r\n // We deleted all the notes that were selected, select something else\r\n if (this.selections.length === 0) {\r\n selectionChanged = true;\r\n this.selections = lastResortSelection;\r\n }\r\n // If there were selections on this measure, highlight them.\r\n if (selectionChanged) {\r\n this.deferHighlight();\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.MAP, new Date().valueOf() - timestamp);\r\n }\r\n\r\n _getTicksFromSelections(): number {\r\n let rv = 0;\r\n this.selections.forEach((sel) => {\r\n if (sel.note) {\r\n rv += sel.note.tickCount;\r\n }\r\n });\r\n return rv;\r\n }\r\n _copySelections(): SmoSelector[] {\r\n const rv: SmoSelector[] = [];\r\n this.selections.forEach((sel) => {\r\n rv.push(sel.selector);\r\n });\r\n return rv;\r\n }\r\n // ### getExtremeSelection\r\n // Get the rightmost (1) or leftmost (-1) selection\r\n getExtremeSelection(sign: number): SmoSelection {\r\n let i = 0;\r\n let rv = this.selections[0];\r\n for (i = 1; i < this.selections.length; ++i) {\r\n const sa = this.selections[i].selector;\r\n if (sa.measure * sign > rv.selector.measure * sign) {\r\n rv = this.selections[i];\r\n } else if (sa.measure === rv.selector.measure && sa.tick * sign > rv.selector.tick * sign) {\r\n rv = this.selections[i];\r\n }\r\n }\r\n return rv;\r\n }\r\n _selectClosest(selector: SmoSelector) {\r\n var artifact = this._getClosestTick(selector);\r\n if (!artifact) {\r\n return;\r\n }\r\n if (this.selections.find((sel) => JSON.stringify(sel.selector)\r\n === JSON.stringify(artifact.selector))) {\r\n return;\r\n }\r\n const note = artifact.note as SmoNote;\r\n if (selector.pitches && selector.pitches.length && selector.pitches.length <= note.pitches.length) {\r\n // If the old selection had only a single pitch, try to recreate that.\r\n artifact.selector.pitches = JSON.parse(JSON.stringify(selector.pitches));\r\n }\r\n this.selections.push(artifact);\r\n }\r\n // ### updateMap\r\n // This should be called after rendering the score. It updates the score to\r\n // graphics map and selects the first object.\r\n updateMap() {\r\n const ts = new Date().valueOf();\r\n this.mapping = true;\r\n let tickSelected = 0;\r\n const selCopy = this._copySelections();\r\n const ticksSelectedCopy = this._getTicksFromSelections();\r\n const firstSelection = this.getExtremeSelection(-1);\r\n this._updateModifiers();\r\n\r\n // Try to restore selection. If there were none, just select the fist\r\n // thing in the score\r\n const firstKey = SmoSelector.getNoteKey(SmoSelector.default);\r\n if (!selCopy.length && this.renderer.score) {\r\n // If there is nothing rendered, don't update tracker\r\n if (typeof(this.measureNoteMap[firstKey]) !== 'undefined' && !firstSelection)\r\n this.selections = [this.measureNoteMap[firstKey]];\r\n } else if (this.areSelectionsAdjacent() && this.selections.length > 1) {\r\n // If there are adjacent selections, restore selections to the ticks that are in the score now\r\n if (!firstSelection) {\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n return;\r\n }\r\n this.selections = [];\r\n this._selectClosest(firstSelection.selector);\r\n const first = this.selections[0];\r\n tickSelected = (first.note as SmoNote).tickCount ?? 0;\r\n while (tickSelected < ticksSelectedCopy && first) {\r\n let delta: number = this._growSelectionRight(true);\r\n if (!delta) {\r\n break;\r\n }\r\n tickSelected += delta;\r\n }\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n this.mapping = false;\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n }\r\n createMousePositionBox(logicalBox: SvgBox) {\r\n const pageMap = this.renderer.pageMap;\r\n const page = pageMap.getRendererFromPoint(logicalBox);\r\n if (page) {\r\n const cof = (pageMap.zoomScale * pageMap.renderScale); \r\n const debugBox = SvgHelpers.smoBox(logicalBox);\r\n debugBox.y -= (page.box.y + 5 / cof);\r\n debugBox.x -= (page.box.x + 5 / cof)\r\n debugBox.width = 10 / cof;\r\n debugBox.height = 10 / cof;\r\n if (!this.mouseHintBox) {\r\n this.mouseHintBox = {\r\n stroke: SvgPageMap.strokes['debug-mouse-box'],\r\n classes: 'hide-print',\r\n box: debugBox,\r\n scroll: { x: 0, y: 0 },\r\n context: page,\r\n timeOff: 1000\r\n };\r\n }\r\n this.mouseHintBox.context = page;\r\n this.mouseHintBox.box = debugBox;\r\n SvgHelpers.outlineRect(this.mouseHintBox);\r\n } \r\n }\r\n eraseMousePositionBox() {\r\n if (this.mouseHintBox && this.mouseHintBox.element) {\r\n this.mouseHintBox.element.remove();\r\n this.mouseHintBox.element = undefined;\r\n }\r\n }\r\n /**\r\n * Find any musical elements at the supplied screen coordinates and set them as the selection\r\n * @param bb \r\n * @returns \r\n */\r\n intersectingArtifact(bb: SvgBox) {\r\n const scrollState = this.scroller.scrollState;\r\n bb = SvgHelpers.boxPoints(bb.x + scrollState.x, bb.y + scrollState.y, bb.width ? bb.width : 1, bb.height ? bb.height : 1);\r\n const logicalBox = this.renderer.pageMap.clientToSvg(bb);\r\n const { selections, page } = this.renderer.pageMap.findArtifact(logicalBox);\r\n if (page) {\r\n const artifacts = selections;\r\n // const artifacts = SvgHelpers.findIntersectingArtifactFromMap(bb, this.measureNoteMap, SvgHelpers.smoBox(this.scroller.scrollState.scroll));\r\n // TODO: handle overlapping suggestions\r\n if (!artifacts.length) {\r\n const sel = this.renderer.pageMap.findModifierTabs(logicalBox);\r\n if (sel.length) {\r\n this._setModifierAsSuggestion(sel[0]);\r\n this.eraseMousePositionBox();\r\n } else {\r\n // no intersection, show mouse hint \r\n this.createMousePositionBox(logicalBox);\r\n }\r\n return;\r\n }\r\n const artifact = artifacts[0];\r\n this.eraseMousePositionBox();\r\n this._setArtifactAsSuggestion(artifact);\r\n }\r\n }\r\n _getRectangleChain(selection: SmoSelection) {\r\n const rv: number[] = [];\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n rv.push(selection.measure.svg.pageIndex);\r\n rv.push(selection.measure.svg.lineIndex);\r\n rv.push(selection.measure.measureNumber.measureIndex);\r\n return rv;\r\n }\r\n _updateMeasureNoteMap(artifact: SmoSelection, printing: boolean) {\r\n const note = artifact.note as SmoNote;\r\n const noteKey = SmoSelector.getNoteKey(artifact.selector);\r\n const activeVoice = artifact.measure.getActiveVoice();\r\n // not has not been drawn yet.\r\n if ((!artifact.box) || (!artifact.measure.svg.logicalBox)) {\r\n return;\r\n }\r\n this.measureNoteMap[noteKey] = artifact;\r\n this.renderer.pageMap.addArtifact(artifact);\r\n artifact.scrollBox = { x: artifact.box.x,\r\n y: artifact.measure.svg.logicalBox.y };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, SvgBuilder } from \"./svgHelpers\";\r\nimport { buildDom } from \"../../common/htmlHelpers\";\r\nimport { SuiScoreViewOperations } from \"./scoreViewOperations\";\r\nimport { SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport interface PianoKey {\r\n box: SvgBox,\r\n keyElement: SVGSVGElement\r\n}\r\nexport class SuiPiano {\r\n renderElement: SVGSVGElement | null;\r\n view: SuiScoreViewOperations;\r\n octaveOffset: number = 0;\r\n chordPedal: boolean = false;\r\n objects: PianoKey[] = [];\r\n suggestFadeTimer: NodeJS.Timer | null = null;\r\n elementId: string = 'piano-svg';\r\n constructor(view: SuiScoreViewOperations) {\r\n this.renderElement = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n this.view = view;\r\n this.render();\r\n }\r\n\r\n static get dimensions() {\r\n return {\r\n wwidth: 23,\r\n bwidth: 13,\r\n wheight: 120,\r\n bheight: 80,\r\n octaves: 1\r\n };\r\n }\r\n // 7 white keys per octave\r\n static get wkeysPerOctave() {\r\n return 7;\r\n }\r\n static get owidth() {\r\n return SuiPiano.dimensions.wwidth * SuiPiano.wkeysPerOctave;\r\n }\r\n static createAndDisplay() {\r\n // Called by ribbon button.\r\n $('body').trigger('show-piano-event');\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n\r\n _mapKeys() {\r\n this.objects = [];\r\n var keys: SVGSVGElement[] = [].slice.call(this.renderElement!.getElementsByClassName('piano-key'));\r\n keys.forEach((key) => {\r\n var rect = SvgHelpers.smoBox(key.getBoundingClientRect());\r\n var id = key.getAttributeNS('', 'id');\r\n var artifact = {\r\n keyElement: key,\r\n box: rect,\r\n id: id\r\n };\r\n this.objects.push(artifact);\r\n });\r\n }\r\n _removeClass(classes: string) {\r\n Array.from(this.renderElement!.getElementsByClassName('piano-key')).forEach((el) => {\r\n $(el).removeClass(classes);\r\n });\r\n }\r\n _removeGlow() {\r\n this._removeClass('glow-key');\r\n }\r\n _fadeGlow(el: SVGSVGElement) {\r\n if (this.suggestFadeTimer) {\r\n clearTimeout(this.suggestFadeTimer as any);\r\n }\r\n // Make selection fade if there is a selection.\r\n this.suggestFadeTimer = setTimeout(() => {\r\n $(el).removeClass('glow-key');\r\n }, 1000);\r\n }\r\n bind() {\r\n // The menu option to toggle piano state\r\n $('body').off('show-piano-event').on('show-piano-event', () => {\r\n const isVisible = $('body').hasClass('show-piano');\r\n $('body').toggleClass('show-piano');\r\n this._mapKeys();\r\n });\r\n $('#piano-8va-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8vb-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = 1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-8vb-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8va-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = -1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-xpose-up').off('click').on('click', () => {\r\n this.view.transposeSelections(1);\r\n });\r\n $('#piano-xpose-down').off('click').on('click', () => {\r\n this.view.transposeSelections(-1);\r\n });\r\n $('#piano-enharmonic').off('click').on('click', () => {\r\n this.view.toggleEnharmonic();\r\n });\r\n $('button.jsLeft').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionLeft();\r\n });\r\n $('button.jsRight').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionRight(this.view.score, null, false);\r\n });\r\n $('button.jsGrowDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('doubleDuration');\r\n });\r\n $('button.jsGrowDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('dotDuration');\r\n });\r\n $('button.jsShrinkDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('halveDuration');\r\n });\r\n $('button.jsShrinkDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('undotDuration');\r\n });\r\n $('button.jsChord').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).toggleClass('activated');\r\n this.chordPedal = !this.chordPedal;\r\n });\r\n $(this.renderElement).off('mousemove').on('mousemove', (ev: any) => {\r\n if (Math.abs(this.objects[0].box.x - this.objects[0].keyElement.getBoundingClientRect().x)\r\n > this.objects[0].box.width / 2) {\r\n console.log('remap piano');\r\n this._mapKeys();\r\n }\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const clientBox = SvgHelpers.smoBox(SvgHelpers.boxPoints(ev.clientX, ev.clientY, 1, 1)); // last param is scroll offset\r\n\r\n var keyPressed = SvgHelpers.findSmallestIntersection(\r\n clientBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n const el: SVGSVGElement = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n if ($(el).hasClass('glow-key')) {\r\n return;\r\n }\r\n this._removeGlow();\r\n $(el).addClass('glow-key');\r\n this._fadeGlow(el);\r\n });\r\n $(this.renderElement).off('blur').on('blur', () => {\r\n this._removeGlow();\r\n });\r\n $(this.renderElement).off('click').on('click', (ev: any) => {\r\n this._updateSelections(ev);\r\n });\r\n // the close button on piano itself\r\n $('.close-piano').off('click').on('click', () => {\r\n this.view.score.preferences.showPiano = false;\r\n this.view.updateScorePreferences(this.view.score.preferences);\r\n });\r\n }\r\n static hidePiano() {\r\n if ($('body').hasClass('show-piano')) {\r\n $('body').removeClass('show-piano');\r\n }\r\n }\r\n static showPiano() {\r\n if ($('body').hasClass('show-piano') === false) {\r\n $('body').addClass('show-piano');\r\n // resize the work area.\r\n // $('body').trigger('forceResizeEvent');\r\n }\r\n }\r\n static get isShowing() {\r\n return $('body').hasClass('show-piano');\r\n }\r\n _updateSelections(ev: any) {\r\n // fake a scroller (piano scroller w/b cool tho...)\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const logicalBox = SvgHelpers.smoBox({ x: ev.clientX, y: ev.clientY });\r\n\r\n var keyPressed =\r\n SvgHelpers.findSmallestIntersection(logicalBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n if (!ev.shiftKey && !this.chordPedal) {\r\n this._removeClass('glow-key pressed-key');\r\n } else {\r\n var el = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n $(el).addClass('pressed-key');\r\n }\r\n const key = keyPressed.keyElement.id.substr(6, keyPressed.keyElement.id.length - 6);\r\n const pitch: Pitch = {\r\n letter: key[0].toLowerCase() as PitchLetter,\r\n octave: this.octaveOffset,\r\n accidental: key.length > 1 ? key[1] : 'n'\r\n };\r\n\r\n this.view.setPitchPiano(pitch, this.chordPedal);\r\n }\r\n _renderControls() {\r\n var b = buildDom;\r\n var r = b('button').classes('icon icon-cross close close-piano');\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDuration').append(b('span').classes('icon icon-duration_grow'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDuration').append(b('span').classes('icon icon-duration_less'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDot').append(b('span').classes('icon icon-duration_grow_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDot').append(b('span').classes('icon icon-duration_less_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n\r\n r = b('button').classes('key-ctrl jsLeft').append(b('span').classes('icon icon-arrow-left'));\r\n $('.piano-container .piano-keys').prepend(r.dom());\r\n r = b('button').classes('key-ctrl jsRight').append(b('span').classes('icon icon-arrow-right'));\r\n $('.piano-container .piano-keys').append(r.dom());\r\n\r\n r = b('button').classes('piano-ctrl').attr('id', 'piano-8va-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('va'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl ').attr('id', 'piano-8vb-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('vb'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeUp').attr('id', 'piano-xpose-up').append(\r\n b('span').classes('bold').text('+'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeDown').attr('id', 'piano-xpose-down').append(\r\n b('span').classes('bold').text('-'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsEnharmonic').attr('id', 'piano-enharmonic').append(\r\n b('span').classes('bold icon icon-accident'));\r\n\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsChord')\r\n .append(b('span').classes('icon icon-chords'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n }\r\n handleResize() {\r\n this._mapKeys();\r\n }\r\n playNote() {\r\n }\r\n render() {\r\n $('body').addClass('show-piano');\r\n var b = SvgBuilder.b;\r\n var d = SuiPiano.dimensions;\r\n // https://www.mathpages.com/home/kmath043.htm\r\n\r\n // Width of white key at back for C,D,E\r\n var b1off = d.wwidth - (d.bwidth * 2 / 3);\r\n\r\n // Width of other white keys at the back.\r\n var b2off = d.wwidth - (d.bwidth * 3) / 4;\r\n\r\n var xwhite = [{\r\n note: 'C',\r\n x: 0\r\n }, {\r\n note: 'D',\r\n x: d.wwidth\r\n }, {\r\n note: 'E',\r\n x: 2 * d.wwidth\r\n }, {\r\n note: 'F',\r\n x: 3 * d.wwidth\r\n }, {\r\n note: 'G',\r\n x: 4 * d.wwidth\r\n }, {\r\n note: 'A',\r\n x: 5 * d.wwidth\r\n }, {\r\n note: 'B',\r\n x: 6 * d.wwidth\r\n }\r\n ];\r\n var xblack = [{\r\n note: 'Db',\r\n x: b1off\r\n }, {\r\n note: 'Eb',\r\n x: 2 * b1off + d.bwidth\r\n }, {\r\n note: 'Gb',\r\n x: 3 * d.wwidth + b2off\r\n }, {\r\n note: 'Ab',\r\n x: (3 * d.wwidth + b2off) + b2off + d.bwidth\r\n }, {\r\n note: 'Bb',\r\n x: SuiPiano.owidth - (b2off + d.bwidth)\r\n }\r\n ];\r\n var wwidth = d.wwidth;\r\n var bwidth = d.bwidth;\r\n var wheight = d.wheight;\r\n var bheight = d.bheight;\r\n var owidth = SuiPiano.wkeysPerOctave * wwidth;\r\n\r\n // Start on C2 to C6 to reduce space\r\n var octaveOff = 7 - d.octaves;\r\n\r\n var x = 0;\r\n var y = 0;\r\n var r = b('g');\r\n for (var i = 0; i < d.octaves; ++i) {\r\n x = i * owidth;\r\n xwhite.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key white-key';\r\n if (nt == 'C4') {\r\n classes += ' middle-c';\r\n }\r\n var rect = b('rect').attr('id', 'keyId-' + nt).rect(x + key.x, y, wwidth, wheight, classes);\r\n r.append(rect);\r\n\r\n var tt = b('text').text(x + key.x + (wwidth / 5), bheight + 16, 'note-text', nt);\r\n r.append(tt);\r\n });\r\n xblack.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key black-key';\r\n var rect = b('rect').attr('id', 'keyId-' + nt).attr('fill', 'url(#piano-grad)').rect(x + key.x, 0, bwidth, bheight, classes);\r\n r.append(rect);\r\n });\r\n }\r\n var el = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n SvgHelpers.gradient(el, 'piano-grad', 'vertical', [{ color: '#000', offset: '0%', opacity: 1 },\r\n { color: '#777', offset: '50%', opacity: 1 }, { color: '#ddd', offset: '100%', opacity: 1 }]);\r\n el.appendChild(r.dom());\r\n this._renderControls();\r\n this._mapKeys();\r\n this.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support the state machine associated with background music rendering.\r\n * @module renderState\r\n */\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { UndoBuffer, UndoEntry } from '../../smo/xform/undo';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SuiMapper } from './mapper';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SuiScoreRender, ScoreRenderParams } from './scoreRender';\r\nimport { SuiExceptionHandler } from '../../ui/exceptions';\r\nimport { VexFlow, setFontStack } from '../../common/vex';\r\ndeclare var $: any;\r\n\r\n\r\nexport var scoreChangeEvent = 'smoScoreChangeEvent';\r\n/**\r\n * Manage the state of the score rendering. The score can be rendered either completely,\r\n * or partially for editing. This class works with the RenderDemon to decide when to\r\n * render the score after it has been modified, and keeps track of what the current\r\n * render state is (dirty, etc.)\r\n * @category SuiRender\r\n * */\r\nexport class SuiRenderState {\r\n dirty: boolean;\r\n replaceQ: SmoSelection[];\r\n stateRepCount: 0;\r\n viewportChanged: boolean;\r\n _resetViewport: boolean;\r\n measureMapper: SuiMapper | null;\r\n passState: number = SuiRenderState.passStates.initial;\r\n _score: SmoScore | null = null;\r\n _backupZoomScale: number = 0;\r\n renderer: SuiScoreRender;\r\n idleRedrawTime: number;\r\n idleLayoutTimer: number = 0; // how long the score has been idle\r\n demonPollTime: number;\r\n handlingRedraw: boolean = false;\r\n // signal to render demon that we have suspended background\r\n // rendering because we are recording or playing actions.\r\n suspendRendering: boolean = false;\r\n undoBuffer: UndoBuffer;\r\n undoStatus: number = 0;\r\n\r\n constructor(config: ScoreRenderParams) {\r\n this.dirty = true;\r\n this.replaceQ = [];\r\n this.stateRepCount = 0;\r\n this.setPassState(SuiRenderState.passStates.initial, 'ctor');\r\n this.viewportChanged = false;\r\n this._resetViewport = false;\r\n this.measureMapper = null;\r\n this.renderer = new SuiScoreRender(config);\r\n this.idleRedrawTime = config.config.idleRedrawTime;\r\n this.demonPollTime = config.config.demonPollTime;\r\n this.undoBuffer = config.undoBuffer;\r\n }\r\n get elementId() {\r\n return this.renderer.elementId;\r\n }\r\n get pageMap() {\r\n return this.renderer.vexContainers;\r\n }\r\n // ### setMeasureMapper\r\n // DI/notifier pattern. The measure mapper/tracker is updated when the score is rendered\r\n // so the UI stays in sync with the location of elements in the score.\r\n setMeasureMapper(mapper: SuiMapper) {\r\n this.measureMapper = mapper;\r\n this.renderer.measureMapper = mapper;\r\n }\r\n set stepMode(value: boolean) {\r\n this.suspendRendering = value;\r\n this.renderer.autoAdjustRenderTime = !value;\r\n if (this.measureMapper) {\r\n this.measureMapper.deferHighlightMode = !value;\r\n }\r\n }\r\n\r\n // ### createScoreRenderer\r\n // ### Description;\r\n // to get the score to appear, a div and a score object are required. The layout takes care of creating the\r\n // svg element in the dom and interacting with the vex library.\r\n static createScoreRenderer(config: SmoRenderConfiguration, renderElement: Element, score: SmoScore, undoBuffer: UndoBuffer): SuiRenderState {\r\n const ctorObj: ScoreRenderParams = {\r\n config,\r\n elementId: renderElement,\r\n score,\r\n undoBuffer\r\n };\r\n const renderer = new SuiRenderState(ctorObj);\r\n return renderer;\r\n }\r\n static get passStates(): Record {\r\n return { initial: 0, clean: 2, replace: 3 };\r\n }\r\n get renderElement(): Element {\r\n return this.elementId;\r\n }\r\n notifyFontChange() {\r\n setFontStack(this.score!.engravingFont);\r\n }\r\n addToReplaceQueue(selection: SmoSelection | SmoSelection[]) {\r\n if (this.passState === SuiRenderState.passStates.clean ||\r\n this.passState === SuiRenderState.passStates.replace) { \r\n if (Array.isArray(selection)) {\r\n this.replaceQ = this.replaceQ.concat(selection);\r\n } else {\r\n this.replaceQ.push(selection);\r\n }\r\n this.setDirty();\r\n }\r\n }\r\n\r\n setDirty() {\r\n if (!this.dirty) {\r\n this.dirty = true;\r\n if (this.passState === SuiRenderState.passStates.clean) {\r\n this.setPassState(SuiRenderState.passStates.replace, 'setDirty');\r\n }\r\n }\r\n }\r\n setRefresh() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'setRefresh');\r\n }\r\n rerenderAll() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'rerenderAll');\r\n this._resetViewport = true;\r\n }\r\n clearLine(measure: SmoMeasure) {\r\n const page = measure.svg.pageIndex;\r\n this.renderer.clearRenderedPage(page);\r\n }\r\n get renderStateClean() {\r\n return this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false;\r\n }\r\n get renderStateRendered() {\r\n return (this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false) ||\r\n (this.passState === SuiRenderState.passStates.replace && this.replaceQ.length === 0 && this.renderer.backgroundRender === false);\r\n }\r\n /**\r\n * Do a quick re-render of a measure that has changed, defer the whole score.\r\n * @returns \r\n */\r\n replaceMeasures() {\r\n const staffMap: Record = {};\r\n if (this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n this.replaceQ.forEach((change) => {\r\n this.renderer.replaceSelection(staffMap, change);\r\n });\r\n Object.keys(staffMap).forEach((key) => {\r\n const obj = staffMap[key];\r\n this.renderer.renderModifiers(obj.staff, obj.system);\r\n obj.system.renderEndings(this.measureMapper!.scroller);\r\n obj.system.updateLyricOffsets();\r\n });\r\n this.replaceQ = [];\r\n }\r\n async preserveScroll() {\r\n const scrollState = this.measureMapper!.scroller.scrollState;\r\n await this.renderPromise();\r\n this.measureMapper!.scroller.restoreScrollState(scrollState);\r\n }\r\n\r\n _renderStatePromise(condition: () => boolean): Promise {\r\n const oldSuspend = this.suspendRendering;\r\n this.suspendRendering = false;\r\n const self = this;\r\n const endAction = () => {\r\n self.suspendRendering = oldSuspend;\r\n };\r\n return PromiseHelpers.makePromise(condition, endAction, null, this.demonPollTime);\r\n }\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n renderPromise(): Promise {\r\n return this._renderStatePromise(() => this.renderStateClean);\r\n }\r\n\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n updatePromise() {\r\n this.replaceMeasures();\r\n return this._renderStatePromise(() => this.renderStateRendered);\r\n }\r\n async handleRedrawTimer() {\r\n if (this.handlingRedraw) {\r\n return;\r\n }\r\n if (this.suspendRendering) {\r\n return;\r\n }\r\n this.handlingRedraw = true;\r\n const redrawTime = Math.max(this.renderer.renderTime, this.idleRedrawTime);\r\n // If there has been a change, redraw the score\r\n if (this.passState === SuiRenderState.passStates.initial) {\r\n this.dirty = true;\r\n this.undoStatus = this.undoBuffer.opCount;\r\n this.idleLayoutTimer = Date.now();\r\n\r\n // indicate the display is 'dirty' and we will be refreshing it.\r\n $('body').addClass('refresh-1');\r\n try {\r\n // Sort of a hack. If the viewport changed, the scroll state is already reset\r\n // so we can't preserver the scroll state.\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n await this.render();\r\n } catch (ex) {\r\n console.error(ex);\r\n SuiExceptionHandler.instance.exceptionHandler(ex);\r\n this.handlingRedraw = false;\r\n }\r\n } else if (this.passState === SuiRenderState.passStates.replace && this.undoStatus === this.undoBuffer.opCount) {\r\n // Consider navigation as activity when deciding to refresh\r\n this.idleLayoutTimer = Math.max(this.idleLayoutTimer, this.measureMapper!.getIdleTime());\r\n $('body').addClass('refresh-1');\r\n // Do we need to refresh the score?\r\n if (this.renderer.backgroundRender === false && Date.now() - this.idleLayoutTimer > redrawTime) {\r\n this.passState = SuiRenderState.passStates.initial;\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n this.render();\r\n }\r\n } else {\r\n this.idleLayoutTimer = Date.now();\r\n this.undoStatus = this.undoBuffer.opCount;\r\n if (this.replaceQ.length > 0) {\r\n this.render();\r\n }\r\n }\r\n this.handlingRedraw = false;\r\n }\r\n pollRedraw() {\r\n setTimeout(() => {\r\n this.handleRedrawTimer();\r\n this.pollRedraw();\r\n }, this.demonPollTime);\r\n }\r\n\r\n startDemon() {\r\n this.pollRedraw();\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n this.renderer.renderTextGroup(gg);\r\n }\r\n /**\r\n * Set the SVG viewport\r\n * @param reset whether to re-render the entire SVG DOM\r\n * @returns \r\n */\r\n setViewport() {\r\n if (!this.score || !this.renderer) {\r\n return;\r\n }\r\n this.renderer.setViewport();\r\n this.score!.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n measure.svg.history = ['reset'];\r\n }\r\n });\r\n });\r\n }\r\n renderForPrintPromise(): Promise {\r\n $('body').addClass('print-render');\r\n const self = this;\r\n if (!this.score) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const layoutMgr = this.score!.layoutManager!;\r\n const layout = layoutMgr.getGlobalLayout();\r\n this._backupZoomScale = layout.zoomScale;\r\n layout.zoomScale = 1.0;\r\n layoutMgr.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n\r\n const promise = new Promise((resolve) => {\r\n const poll = () => {\r\n setTimeout(() => {\r\n if (!self.dirty && !self.renderer.backgroundRender) {\r\n // tracker.highlightSelection();\r\n $('body').removeClass('print-render');\r\n $('.vf-selection').remove();\r\n $('body').addClass('printing');\r\n $('.musicRelief').css('height', '');\r\n resolve();\r\n } else {\r\n poll();\r\n }\r\n }, 500);\r\n };\r\n poll();\r\n });\r\n return promise;\r\n }\r\n\r\n restoreLayoutAfterPrint() {\r\n const layout = this.score!.layoutManager!.getGlobalLayout();\r\n layout.zoomScale = this._backupZoomScale;\r\n this.score!.layoutManager!.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n }\r\n\r\n setPassState(st: number, location: string) {\r\n const oldState = this.passState;\r\n let msg = '';\r\n if (oldState !== st) {\r\n this.stateRepCount = 0;\r\n } else {\r\n this.stateRepCount += 1;\r\n }\r\n\r\n msg = location + ': passState ' + this.passState + '=>' + st;\r\n if (this.stateRepCount > 0) {\r\n msg += ' (' + this.stateRepCount + ')';\r\n }\r\n console.log(msg);\r\n this.passState = st;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this._score;\r\n }\r\n\r\n // used for debugging and drawing dots.\r\n dbgDrawDot(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean) {\r\n const context = this.renderer.getRenderer({ x, y });\r\n if (context) {\r\n context.getContext().beginPath();\r\n context.getContext().arc(x, y, radius, startAngle, endAngle, counterclockwise);\r\n context.getContext().closePath();\r\n context.getContext().fill(); \r\n }\r\n }\r\n set score(score: SmoScore | null) {\r\n if (score === null) {\r\n return;\r\n }\r\n /* if (this._score) {\r\n shouldReset = true;\r\n } */\r\n this.setPassState(SuiRenderState.passStates.initial, 'load score');\r\n const font = score.engravingFont;\r\n this.dirty = true;\r\n this._score = score;\r\n this.renderer.score = score;\r\n this.notifyFontChange();\r\n // if (shouldReset) {\r\n this.setViewport();\r\n if (this.measureMapper) {\r\n this.measureMapper.loadScore();\r\n }\r\n }\r\n\r\n // ### undo\r\n // Undo is handled by the render state machine, because the layout has to first\r\n // delete areas of the viewport that may have changed,\r\n // then create the modified score, then render the 'new' score.\r\n undo(undoBuffer: UndoBuffer, staffMap: Record): SmoScore {\r\n let op = 'setDirty';\r\n const buffer = undoBuffer.peek();\r\n // Unrender the modified music because the IDs may change and normal unrender won't work\r\n if (buffer) {\r\n const sel = buffer.selector;\r\n if (buffer.type === UndoBuffer.bufferTypes.MEASURE) { \r\n if (typeof(staffMap[sel.staff]) === 'number') {\r\n const mSelection = SmoSelection.measureSelection(this.score!, staffMap[sel.staff], sel.measure);\r\n if (mSelection !== null) {\r\n this.renderer.unrenderMeasure(mSelection.measure);\r\n }\r\n }\r\n } else if (buffer.type === UndoBuffer.bufferTypes.STAFF) {\r\n if (typeof(staffMap[sel.staff]) === 'number') {\r\n const sSelection = SmoSelection.measureSelection(this.score!, staffMap[sel.staff], 0);\r\n if (sSelection !== null) {\r\n this.renderer.unrenderStaff(sSelection.staff);\r\n }\r\n }\r\n op = 'setRefresh';\r\n } else {\r\n this.renderer.unrenderAll();\r\n op = 'setRefresh';\r\n }\r\n this._score = undoBuffer.undo(this._score!, staffMap, false);\r\n // Broken encapsulation - we need to know if we are 'undoing' an entire score\r\n // so we can change the score pointed to by the renderer.\r\n if (buffer.type === UndoBuffer.bufferTypes.SCORE) {\r\n this.renderer.score = this._score;\r\n }\r\n (this as any)[op]();\r\n }\r\n if (!this._score) {\r\n throw ('no score when undo');\r\n } \r\n return this._score;\r\n }\r\n\r\n\r\n unrenderColumn(measure: SmoMeasure) {\r\n this.score!.staves.forEach((staff) => {\r\n this.renderer.unrenderMeasure(staff.measures[measure.measureNumber.measureIndex]);\r\n });\r\n }\r\n\r\n // ### forceRender\r\n // For unit test applictions that want to render right-away\r\n forceRender() {\r\n this.setRefresh();\r\n this.render();\r\n }\r\n unrenderMeasure(measure: SmoMeasure) {\r\n this.renderer.unrenderMeasure(measure);\r\n }\r\n\r\n renderScoreModifiers() {\r\n this.renderer.renderScoreModifiers();\r\n }\r\n async render(): Promise {\r\n if (this._resetViewport) {\r\n this.setViewport();\r\n this._resetViewport = false;\r\n }\r\n try {\r\n if (SuiRenderState.passStates.replace === this.passState) {\r\n this.replaceMeasures();\r\n } else if (SuiRenderState.passStates.initial === this.passState) {\r\n if (this.renderer.backgroundRender) {\r\n return;\r\n }\r\n this.renderer.layout();\r\n this.renderer.drawPageLines();\r\n this.setPassState(SuiRenderState.passStates.clean, 'rs: complete render');\r\n }\r\n } catch (excp) {\r\n console.warn('exception in render: ' + excp);\r\n }\r\n this.dirty = false;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { VxMeasure } from '../vex/vxMeasure';\r\nimport { SuiMapper } from './mapper';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SvgHelpers, StrokeInfo } from './svgHelpers';\r\nimport { SuiPiano } from './piano';\r\nimport { SuiLayoutFormatter, RenderedPage } from './formatter';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SuiTextBlock } from './textRender';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SourceSansProFont } from '../../styles/font_metrics/ssp-sans-metrics';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SvgPageMap, SvgPage } from './svgPageMap';\r\nimport { VexFlow } from '../../common/vex';\r\nimport { Note } from '../../common/vex';\r\n\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n/**\r\n * a renderer creates the SVG render context for vexflow from the given element. Then it\r\n * renders the initial score.\r\n * @category SuiRenderParams\r\n */\r\n export interface ScoreRenderParams {\r\n elementId: any,\r\n score: SmoScore,\r\n config: SmoRenderConfiguration,\r\n undoBuffer: UndoBuffer\r\n}\r\n\r\nexport interface MapParameters {\r\n vxSystem: VxSystem, measuresToBox: SmoMeasure[], modifiersToBox: StaffModifierBase[], printing: boolean\r\n}\r\n/**\r\n * This module renders the entire score. It calculates the layout first based on the\r\n * computed dimensions.\r\n * @category SuiRender\r\n**/\r\nexport class SuiScoreRender {\r\n constructor(params: ScoreRenderParams) { \r\n this.elementId = params.elementId;\r\n this.score = params.score;\r\n this.vexContainers = new SvgPageMap(this.score.layoutManager!.globalLayout, this.elementId, this.score.layoutManager!.pageLayouts);\r\n this.setViewport();\r\n }\r\n elementId: any;\r\n startRenderTime: number = 0;\r\n formatter: SuiLayoutFormatter | null = null;\r\n vexContainers: SvgPageMap;\r\n // vexRenderer: any = null;\r\n score: SmoScore | null = null;\r\n measureMapper: SuiMapper | null = null;\r\n measuresToMap: MapParameters[] = [];\r\n viewportChanged: boolean = false;\r\n renderTime: number = 0;\r\n backgroundRender: boolean = false;\r\n renderedPages: Record = {};\r\n _autoAdjustRenderTime: boolean = true;\r\n lyricsToOffset: Map = new Map();\r\n renderingPage: number = -1; \r\n get autoAdjustRenderTime() {\r\n return this._autoAdjustRenderTime;\r\n }\r\n set autoAdjustRenderTime(value: boolean) {\r\n this._autoAdjustRenderTime = value;\r\n }\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage | null {\r\n return this.vexContainers.getRenderer(box);\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n let ix = 0;\r\n let jj = 0;\r\n if (gg.skipRender || this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n gg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n gg.elements = [];\r\n const layoutManager = this.score!.layoutManager!;\r\n const scaledScoreLayout = layoutManager.getScaledPageLayout(0);\r\n // If this text hasn't been rendered before, estimate the logical box.\r\n const dummyContainer = this.vexContainers.getRendererFromModifier(gg);\r\n if (dummyContainer && !gg.logicalBox) {\r\n const dummyBlock = SuiTextBlock.fromTextGroup(gg, dummyContainer, this.vexContainers, this.measureMapper!.scroller);\r\n gg.logicalBox = dummyBlock.getLogicalBox();\r\n }\r\n\r\n // If this is a per-page score text, get a text group copy for each page.\r\n // else the array contains the original.\r\n const groupAr = SmoTextGroup.getPagedTextGroups(gg, this.score!.layoutManager!.pageLayouts.length, scaledScoreLayout.pageHeight);\r\n groupAr.forEach((newGroup) => {\r\n let container: SvgPage = this.vexContainers.getRendererFromModifier(newGroup);\r\n // If this text is attached to the measure, base the block location on the rendered measure location.\r\n if (newGroup.attachToSelector) {\r\n // If this text is attached to a staff that is not visible, don't draw it.\r\n const mappedStaff = this.score!.staves.find((staff) => staff.getMappedStaffId() === newGroup.selector!.staff);\r\n if (!mappedStaff) {\r\n return;\r\n }\r\n // Indicate the new map;\r\n // newGroup.selector.staff = mappedStaff.staffId; \r\n const mmSel: SmoSelection | null = SmoSelection.measureSelection(this.score!, mappedStaff.staffId, newGroup.selector!.measure);\r\n if (mmSel) {\r\n const mm = mmSel.measure;\r\n if (mm.svg.logicalBox.width > 0) {\r\n const xoff = mm.svg.logicalBox.x + newGroup.musicXOffset;\r\n const yoff = mm.svg.logicalBox.y + newGroup.musicYOffset;\r\n newGroup.textBlocks[0].text.x = xoff;\r\n newGroup.textBlocks[0].text.y = yoff;\r\n }\r\n }\r\n }\r\n if (container) {\r\n const block = SuiTextBlock.fromTextGroup(newGroup, container, this.vexContainers, this.measureMapper!.scroller);\r\n block.render();\r\n if (block.currentBlock?.text.element) {\r\n gg.elements.push(block.currentBlock?.text.element);\r\n }\r\n // For the first one we render, use that as the bounding box for all the text, for\r\n // purposes of mapper/tracker\r\n if (ix === 0) {\r\n gg.logicalBox = JSON.parse(JSON.stringify(block.logicalBox));\r\n // map all the child scoreText objects, too.\r\n for (jj = 0; jj < gg.textBlocks.length; ++jj) {\r\n gg.textBlocks[jj].text.logicalBox = JSON.parse(JSON.stringify(block.inlineBlocks[jj].text.logicalBox));\r\n }\r\n }\r\n ix += 1;\r\n }\r\n });\r\n }\r\n \r\n // ### unrenderAll\r\n // ### Description:\r\n // Delete all the svg elements associated with the score.\r\n unrenderAll() {\r\n if (!this.score) {\r\n return;\r\n }\r\n this.score.staves.forEach((staff) => {\r\n this.unrenderStaff(staff);\r\n });\r\n // $(this.context.svg).find('g.lineBracket').remove();\r\n }\r\n // ### unrenderStaff\r\n // ### Description:\r\n // See unrenderMeasure. Like that, but with a staff.\r\n unrenderStaff(staff: SmoSystemStaff) {\r\n staff.measures.forEach((measure) => {\r\n this.unrenderMeasure(measure);\r\n });\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.element.remove();\r\n modifier.element = null;\r\n }\r\n });\r\n }\r\n clearRenderedPage(pg: number) {\r\n if (this.renderedPages[pg]) {\r\n this.renderedPages[pg] = null;\r\n }\r\n }\r\n // ### _setViewport\r\n // Create (or recrate) the svg viewport, considering the dimensions of the score.\r\n setViewport() {\r\n if (this.score === null) {\r\n return;\r\n }\r\n const layoutManager = this.score!.layoutManager!;\r\n // All pages have same width/height, so use that\r\n const layout = layoutManager.getGlobalLayout();\r\n this.vexContainers.updateLayout(layout, layoutManager.pageLayouts);\r\n this.renderedPages = {};\r\n this.viewportChanged = true;\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.scrollAbsolute(0, 0);\r\n }\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.updateViewport();\r\n }\r\n // this.context.setFont(this.font.typeface, this.font.pointSize, \"\").setBackgroundFillStyle(this.font.fillStyle);\r\n console.log('layout setViewport: pstate initial');\r\n }\r\n\r\n renderScoreModifiers() {\r\n // remove existing modifiers, and also remove parent group for 'extra'\r\n // groups associated with pagination (once per page etc)\r\n this.score!.textGroups.forEach((tg) => {\r\n tg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n tg.elements = [];\r\n });\r\n // group.classList.add('all-score-text');\r\n this.score!.textGroups.forEach((tg) => {\r\n this.renderTextGroup(tg);\r\n });\r\n }\r\n\r\n /**\r\n * for music we've just rendered, get the bounding boxes. We defer this step so we don't force\r\n * a reflow, which can slow rendering.\r\n * @param vxSystem \r\n * @param measures \r\n * @param modifiers \r\n * @param printing \r\n */\r\n measureRenderedElements(vxSystem: VxSystem, measures: SmoMeasure[], modifiers: StaffModifierBase[], printing: boolean) {\r\n const pageContext = vxSystem.context;\r\n measures.forEach((smoMeasure) => {\r\n const element = smoMeasure.svg.element;\r\n if (element) { \r\n smoMeasure.setBox(pageContext.offsetBbox(element), 'vxMeasure bounding box');\r\n }\r\n const vxMeasure = vxSystem.getVxMeasure(smoMeasure);\r\n if (vxMeasure) {\r\n vxMeasure.modifiersToBox.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n // unit test codes don't have tracker.\r\n if (this.measureMapper) {\r\n const tmpStaff: SmoSystemStaff | undefined = this.score!.staves.find((ss) => ss.staffId === smoMeasure.measureNumber.staffId);\r\n if (tmpStaff) {\r\n this.measureMapper.mapMeasure(tmpStaff, smoMeasure, printing);\r\n }\r\n } \r\n });\r\n modifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n _renderSystem(lineIx: number, printing: boolean) {\r\n if (this.score === null || this.formatter === null) {\r\n return;\r\n }\r\n const measuresToBox: SmoMeasure[] = [];\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const columns: Record = this.formatter.systems[lineIx].systems;\r\n\r\n // If this page hasn't changed since rendered\r\n const pageIndex = columns[0][0].svg.pageIndex;\r\n if (this.renderingPage !== pageIndex && this.renderedPages[pageIndex]) {\r\n console.log(`skipping render on page ${pageIndex}`);\r\n return;\r\n }\r\n const context = this.vexContainers.getRendererForPage(pageIndex);\r\n if (this.renderingPage !== pageIndex) {\r\n context.clearMap();\r\n this.renderingPage = pageIndex;\r\n }\r\n const vxSystem: VxSystem = new VxSystem(context, 0, lineIx, this.score);\r\n const colKeys = Object.keys(columns);\r\n colKeys.forEach((colKey) => {\r\n columns[parseInt(colKey, 10)].forEach((measure: SmoMeasure) => {\r\n if (this.measureMapper !== null) {\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n vxSystem.renderMeasure(measure, printing);\r\n const pageIndex = measure.svg.pageIndex;\r\n const renderMeasures = this.renderedPages[pageIndex];\r\n if (!renderMeasures) {\r\n this.renderedPages[pageIndex] = {\r\n startMeasure: measure.measureNumber.measureIndex,\r\n endMeasure: measure.measureNumber.measureIndex\r\n }\r\n } else {\r\n renderMeasures.endMeasure = measure.measureNumber.measureIndex;\r\n }\r\n measuresToBox.push(measure);\r\n if (!printing && !measure.format.isDefault) {\r\n const at: any[] = [];\r\n at.push({ y: measure.svg.logicalBox.y - 5 });\r\n at.push({ x: measure.svg.logicalBox.x + 25 });\r\n at.push({ 'font-family': SourceSansProFont.fontFamily });\r\n at.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, at, 'measure-format', '*');\r\n }\r\n }\r\n });\r\n });\r\n this.score.staves.forEach((stf) => {\r\n this.renderModifiers(stf, vxSystem).forEach((modifier) => {\r\n modifiersToBox.push(modifier);\r\n });\r\n });\r\n if (this.measureMapper !== null) {\r\n vxSystem.renderEndings(this.measureMapper.scroller);\r\n }\r\n this.measuresToMap.push({vxSystem, measuresToBox, modifiersToBox, printing });\r\n // this.measureRenderedElements(vxSystem, measuresToBox, modifiersToBox, printing);\r\n\r\n const timestamp = new Date().valueOf();\r\n if (!this.lyricsToOffset.has(vxSystem.lineIndex)) {\r\n this.lyricsToOffset.set(vxSystem.lineIndex, vxSystem);\r\n }\r\n // vxSystem.updateLyricOffsets();\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.POST_RENDER, new Date().valueOf() - timestamp);\r\n }\r\n _renderNextSystemPromise(systemIx: number, keys: number[], printing: boolean) {\r\n return new Promise((resolve: any) => {\r\n // const sleepDate = new Date().valueOf();\r\n this._renderSystem(keys[systemIx], printing);\r\n requestAnimationFrame(() => resolve());\r\n });\r\n }\r\n\r\n async _renderNextSystem(lineIx: number, keys: number[], printing: boolean) {\r\n createTopDomContainer('#renderProgress', 'progress');\r\n if (lineIx < keys.length) {\r\n const progress = Math.round((100 * lineIx) / keys.length);\r\n $('#renderProgress').attr('max', 100);\r\n $('#renderProgress').val(progress);\r\n await this._renderNextSystemPromise(lineIx,keys, printing);\r\n lineIx++;\r\n await this._renderNextSystem(lineIx, keys, printing);\r\n } else {\r\n this.renderScoreModifiers();\r\n this.numberMeasures();\r\n this.measuresToMap.forEach((mm) => {\r\n this.measureRenderedElements(mm.vxSystem, mm.measuresToBox, mm.modifiersToBox, mm.printing);\r\n });\r\n this.lyricsToOffset.forEach((vv) => {\r\n vv.updateLyricOffsets();\r\n });\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n // We pro-rate the background render timer on how long it takes\r\n // to actually render the score, so we are not thrashing on a large\r\n // score.\r\n if (this._autoAdjustRenderTime) {\r\n this.renderTime = new Date().valueOf() - this.startRenderTime;\r\n }\r\n $('body').removeClass('show-render-progress');\r\n // indicate the display is 'clean' and up-to-date with the score\r\n $('body').removeClass('refresh-1');\r\n if (this.measureMapper !== null) {\r\n this.measureMapper.updateMap();\r\n if (layoutDebug.mask & layoutDebug.values['artifactMap']) {\r\n this.score?.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n mm.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((note) => {\r\n if (note.logicalBox) {\r\n const page = this.vexContainers.getRendererFromPoint(note.logicalBox);\r\n if (page) {\r\n const noteBox = SvgHelpers.smoBox(note.logicalBox);\r\n noteBox.y -= page.box.y;\r\n SvgHelpers.debugBox(page.svg, noteBox, 'measure-place-dbg', 0);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n }\r\n this.backgroundRender = false;\r\n }\r\n }\r\n \r\n // ### unrenderMeasure\r\n // All SVG elements are associated with a logical SMO element. We need to erase any SVG element before we change a SMO\r\n // element in such a way that some of the logical elements go away (e.g. when deleting a measure).\r\n unrenderMeasure(measure: SmoMeasure) {\r\n if (!measure) {\r\n return;\r\n }\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (!context) {\r\n return;\r\n }\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n\r\n if (measure.svg.element) {\r\n measure.svg.element.remove();\r\n measure.svg.element = null;\r\n }\r\n const renderPage = this.renderedPages[measure.svg.pageIndex];\r\n if (renderPage) {\r\n this.renderedPages[measure.svg.pageIndex] = null;\r\n }\r\n measure.setYTop(0, 'unrender');\r\n }\r\n // ### _renderModifiers\r\n // ### Description:\r\n // Render staff modifiers (modifiers straddle more than one measure, like a slur). Handle cases where the destination\r\n // is on a different system due to wrapping.\r\n renderModifiers(staff: SmoSystemStaff, system: VxSystem): StaffModifierBase[] {\r\n let nextNote: SmoSelection | null = null;\r\n let lastNote: SmoSelection | null = null;\r\n let testNote: Note | null = null;\r\n let vxStart: Note | null = null;\r\n let vxEnd: Note | null = null;\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const removedModifiers: StaffModifierBase[] = [];\r\n if (this.score === null || this.measureMapper === null) {\r\n return [];\r\n }\r\n const renderedId: Record = {};\r\n staff.renderableModifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (!startNote || !endNote) {\r\n // If the modifier doesn't have score endpoints, delete it from the score\r\n removedModifiers.push(modifier);\r\n return;\r\n }\r\n if (startNote.note !== null) {\r\n vxStart = system.getVxNote(startNote.note);\r\n }\r\n if (endNote.note !== null) {\r\n vxEnd = system.getVxNote(endNote.note);\r\n }\r\n\r\n // If the modifier goes to the next staff, draw what part of it we can on this staff.\r\n if (vxStart && !vxEnd) {\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n if (nextNote === null) {\r\n console.warn('bad selector ' + JSON.stringify(modifier.startSelector, null, ' '));\r\n } else {\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n }\r\n while (testNote) {\r\n vxEnd = testNote;\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n nextNote.selector.staff, nextNote.selector.measure, nextNote.selector.voice, nextNote.selector.tick);\r\n if (!nextNote) {\r\n break;\r\n }\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (vxEnd && !vxStart) {\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (lastNote !== null && lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n while (testNote !== null) {\r\n vxStart = testNote;\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n lastNote.selector.staff, lastNote.selector.measure, lastNote.selector.voice, lastNote.selector.tick);\r\n if (!lastNote) {\r\n break;\r\n }\r\n if (lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (!vxStart && !vxEnd || renderedId[modifier.attrs.id]) {\r\n return;\r\n }\r\n renderedId[modifier.attrs.id] = true;\r\n system.renderModifier(this.measureMapper!.scroller, modifier, vxStart, vxEnd, startNote, endNote);\r\n modifiersToBox.push(modifier);\r\n });\r\n // Silently remove modifiers from the score if the endpoints no longer exist\r\n removedModifiers.forEach((mod) => {\r\n staff.removeStaffModifier(mod);\r\n });\r\n return modifiersToBox;\r\n }\r\n\r\n drawPageLines() {\r\n let i = 0;\r\n const printing = $('body').hasClass('print-render');\r\n const layoutMgr = this.score!.layoutManager;\r\n if (printing || !layoutMgr) {\r\n return;\r\n }\r\n for (i = 1; i < layoutMgr.pageLayouts.length; ++i) {\r\n const context = this.vexContainers.getRendererForPage(i - 1);\r\n if (context) {\r\n $(context.svg).find('.pageLine').remove();\r\n const scaledPage = layoutMgr.getScaledPageLayout(i);\r\n const y = scaledPage.pageHeight * i - context.box.y;\r\n SvgHelpers.line(context.svg, 0, y, scaledPage.pageWidth, y,\r\n { strokeName: 'line', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 }, 'pageLine');\r\n \r\n }\r\n }\r\n }\r\n replaceSelection(staffMap: Record, change: SmoSelection) {\r\n let system: VxSystem | null = null;\r\n if (this.renderedPages[change.measure.svg.pageIndex]) {\r\n this.renderedPages[change.measure.svg.pageIndex] = null;\r\n }\r\n SmoBeamer.applyBeams(change.measure);\r\n // Defer modifier update until all selected measures are drawn.\r\n if (!staffMap[change.staff.staffId]) {\r\n const context = this.vexContainers.getRenderer(change.measure.svg.logicalBox);\r\n if (context) {\r\n system = new VxSystem(context, change.measure.staffY, change.measure.svg.lineIndex, this.score!);\r\n staffMap[change.staff.staffId] = { system, staff: change.staff }; \r\n }\r\n } else {\r\n system = staffMap[change.staff.staffId].system;\r\n }\r\n const selections = SmoSelection.measuresInColumn(this.score!, change.measure.measureNumber.measureIndex);\r\n const measuresToMeasure: SmoMeasure[] = [];\r\n selections.forEach((selection) => {\r\n if (system !== null && this.measureMapper !== null) {\r\n this.unrenderMeasure(selection.measure);\r\n system.renderMeasure(selection.measure, false);\r\n measuresToMeasure.push(selection.measure);\r\n }\r\n });\r\n if (system) {\r\n this.measureRenderedElements(system, measuresToMeasure, [], false);\r\n }\r\n }\r\n\r\n async renderAllMeasures(lines: number[]) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const printing = $('body').hasClass('print-render');\r\n $('.measure-format').remove();\r\n \r\n if (!printing) {\r\n $('body').addClass('show-render-progress');\r\n const isShowing = SuiPiano.isShowing;\r\n if (this.score.preferences.showPiano && !isShowing) {\r\n SuiPiano.showPiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n } else if (isShowing && !this.score.preferences.showPiano) {\r\n SuiPiano.hidePiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n }\r\n }\r\n this.backgroundRender = true;\r\n this.startRenderTime = new Date().valueOf();\r\n this.renderingPage = -1;\r\n this.vexContainers.updateContainerOffset(this.measureMapper!.scroller.scrollState);\r\n await this._renderNextSystem(0, lines, printing);\r\n }\r\n // Number the measures at the first measure in each system.\r\n numberMeasures() {\r\n const printing: boolean = $('body').hasClass('print-render');\r\n const staff = this.score!.staves[0];\r\n const measures = staff.measures.filter((measure) => measure.measureNumber.systemIndex === 0);\r\n $('.measure-number').remove();\r\n\r\n measures.forEach((measure) => {\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (measure.measureNumber.localIndex > 0 && measure.measureNumber.systemIndex === 0 && measure.svg.logicalBox && context) {\r\n const numAr: any[] = [];\r\n const modBox = context.offsetSvgPoint(measure.svg.logicalBox);\r\n numAr.push({ y: modBox.y - 10 });\r\n numAr.push({ x: modBox.x });\r\n numAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n numAr.push({ 'font-size': '10pt' });\r\n SvgHelpers.placeSvgText(context.svg, numAr, 'measure-number', (measure.measureNumber.localIndex + 1).toString());\r\n\r\n // Show line-feed symbol\r\n if (measure.format.systemBreak && !printing) {\r\n const starAr: any[] = [];\r\n const symbol = '\\u21b0';\r\n starAr.push({ y: modBox.y - 5 });\r\n starAr.push({ x: modBox.x + 25 });\r\n starAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n starAr.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, starAr, 'measure-format', symbol);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This calculates the position of all the elements in the score, then renders the score\r\n * @returns \r\n */\r\n async layout() {\r\n if (!this.score) {\r\n return;\r\n }\r\n const score = this.score;\r\n $('head title').text(this.score.scoreInfo.name);\r\n const formatter = new SuiLayoutFormatter(score, this.vexContainers, this.renderedPages);\r\n Object.keys(this.renderedPages).forEach((key) => {\r\n this.vexContainers.clearModifiersForPage(parseInt(key));\r\n });\r\n const startPageCount = this.score.layoutManager!.pageLayouts.length;\r\n this.formatter = formatter;\r\n formatter.layout(); \r\n if (this.formatter.trimPages(startPageCount)) {\r\n this.setViewport();\r\n }\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n await this.renderAllMeasures(formatter.lines);\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoGraceNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { UndoBuffer, copyUndo } from '../../smo/xform/undo';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SuiScroller } from './scroller';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SuiTracker } from './tracker';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SuiRenderState, scoreChangeEvent } from './renderState';\r\nimport { ScoreRenderParams } from './scoreRender';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiAudioAnimationParams } from '../audio/musicCursor';\r\nimport { SmoTempoText } from '../../smo/data/measureModifiers';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Indicates a stave is/is not displayed in the score\r\n * @category SuiRender\r\n */\r\nexport interface ViewMapEntry {\r\n show: boolean;\r\n}\r\n\r\n/**\r\n * Base class for all operations on the rendered score. The base class handles the following:\r\n * 1. Undo and recording actions for the operation\r\n * 2. Maintain/change which staves in the score are displayed (staff map)\r\n * 3. Mapping between the displayed score and the data representation\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiScoreView {\r\n static Instance: SuiScoreView | null = null;\r\n score: SmoScore; // The score that is displayed\r\n storeScore: SmoScore; // the full score, including invisible staves\r\n staffMap: number[]; // mapping the 2 things above\r\n storeUndo: UndoBuffer; // undo buffer for operations to above\r\n tracker: SuiTracker; // UI selections\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n pasteBuffer: PasteBuffer;\r\n storePaste: PasteBuffer;\r\n config: SmoRenderConfiguration;\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(config: SmoRenderConfiguration, svgContainer: HTMLElement, score: SmoScore, scrollSelector: HTMLElement, undoBuffer: UndoBuffer) {\r\n this.score = score;\r\n const renderParams: ScoreRenderParams = {\r\n elementId: svgContainer,\r\n score,\r\n config,\r\n undoBuffer\r\n };\r\n this.audioAnimation = config.audioAnimation;\r\n this.renderer = new SuiRenderState(renderParams);\r\n this.config = config;\r\n const scoreJson = score.serialize();\r\n this.scroller = new SuiScroller(scrollSelector, this.renderer.renderer.vexContainers);\r\n this.pasteBuffer = new PasteBuffer();\r\n this.storePaste = new PasteBuffer();\r\n this.tracker = new SuiTracker(this.renderer, this.scroller, this.pasteBuffer);\r\n this.renderer.setMeasureMapper(this.tracker);\r\n\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(scoreJson));\r\n this.synchronizeTextGroups()\r\n this.storeUndo = new UndoBuffer();\r\n this.staffMap = this.defaultStaffMap;\r\n SuiScoreView.Instance = this; // for debugging\r\n this.setMappedStaffIds();\r\n createTopDomContainer('.saveLink'); // for file upload\r\n }\r\n synchronizeTextGroups() {\r\n // Synchronize the score text IDs so cut/paste/undo works transparently\r\n this.score.textGroups.forEach((tg, ix) => {\r\n this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;\r\n });\r\n }\r\n /**\r\n * Await on the full update of the score\r\n * @returns \r\n */\r\n renderPromise(): Promise {\r\n return this.renderer.renderPromise();\r\n }\r\n /**\r\n * Await on the partial update of the score in the view\r\n * @returns \r\n */\r\n updatePromise(): Promise {\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * await on the full update of the score, also resetting the viewport (to reflect layout changes)\r\n * @returns \r\n */\r\n refreshViewport(): Promise {\r\n this.renderer.preserveScroll();\r\n this.renderer.setViewport();\r\n this.renderer.setRefresh();\r\n return this.renderer.renderPromise();\r\n }\r\n getPartMap(): { keys: number[], partMap: Record } {\r\n let keepNext = false;\r\n let partCount = 0;\r\n let partMap: Record = {};\r\n const keys: number[] = [];\r\n this.storeScore.staves.forEach((staff) => {\r\n const partInfo = staff.partInfo;\r\n partInfo.associatedStaff = staff.staffId;\r\n if (!keepNext) {\r\n partMap[partCount] = partInfo;\r\n keys.push(partCount);\r\n partCount += 1;\r\n if (partInfo.stavesAfter > 0) {\r\n keepNext = true;\r\n }\r\n } else {\r\n keepNext = false;\r\n }\r\n });\r\n return { keys, partMap };\r\n }\r\n /**\r\n * This is used in some Smoosic demos and pens.\r\n * @param action any action, but most usefully a SuiScoreView method\r\n * @param repetition number of times to repeat, waiting on render promise between\r\n * if not specified, defaults to 1\r\n * @returns promise, resolved action has been completed and score is updated.\r\n */\r\n waitableAction(action: () => void, repetition?: number): Promise {\r\n const rep = repetition ?? 1;\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (count: number) => {\r\n if (count > 0) {\r\n action();\r\n await self.renderer.updatePromise();\r\n fc(count - 1);\r\n } else {\r\n resolve();\r\n }\r\n };\r\n fc(rep);\r\n });\r\n return promise;\r\n }\r\n\r\n /**\r\n * The plural form of _getEquivalentSelection\r\n * @param selections \r\n * @returns \r\n */\r\n _getEquivalentSelections(selections: SmoSelection[]): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n selections.forEach((selection) => {\r\n const sel = this._getEquivalentSelection(selection);\r\n if (sel !== null) {\r\n rv.push(sel);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * A staff modifier has changed, create undo operations for the measures affected\r\n * @param label \r\n * @param staffModifier \r\n * @param subtype \r\n */\r\n _undoStaffModifier(label: string, staffModifier: StaffModifierBase, subtype: number) {\r\n const copy = StaffModifierBase.deserialize(staffModifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.STAFF_MODIFIER, SmoSelector.default,\r\n copy.serialize(), subtype);\r\n }\r\n /** \r\n * Return the index of the page that is in the center of the client screen.\r\n */\r\n getFocusedPage(): number {\r\n if (this.score.layoutManager === undefined) {\r\n return 0;\r\n }\r\n const scrollAvg = this.tracker.scroller.netScroll.y + (this.tracker.scroller.viewport.height / 2);\r\n const midY = scrollAvg;\r\n const layoutManager = this.score.layoutManager.getGlobalLayout();\r\n const lh = layoutManager.pageHeight / layoutManager.svgScale;\r\n const lw = layoutManager.pageWidth / layoutManager.svgScale;\r\n const pt = this.renderer.pageMap.svgToClient(SvgHelpers.smoBox({ x: lw, y: lh }));\r\n return Math.round(midY / pt.y);\r\n }\r\n /**\r\n * Create a rectangle undo, like a multiple columns but not necessarily the whole\r\n * score.\r\n */\r\n _undoColumn(label: string, measureIndex: number) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.COLUMN, SmoSelector.default,\r\n { score: this.storeScore, measureIndex }, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Score preferences don't affect the display, but they do have an undo\r\n * @param label \r\n */\r\n _undoScorePreferences(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE_ATTRIBUTES, SmoSelector.default, this.storeScore, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n \r\n /**\r\n * Add to the undo buffer the current set of measures selected.\r\n * @param label \r\n * @returns \r\n */\r\n _undoTrackerMeasureSelections(label: string): SmoSelection[] {\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n const equiv = this._getEquivalentSelection(measureSelection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n });\r\n return measureSelections;\r\n }\r\n /**\r\n * operation that only affects the first selection. Setup undo for the measure\r\n */\r\n _undoFirstMeasureSelection(label: string): SmoSelection {\r\n const sel = this.tracker.selections[0];\r\n const equiv = this._getEquivalentSelection(sel);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n return sel;\r\n }\r\n /**\r\n * Add the selection to the undo buffer\r\n * @param label \r\n * @param selection \r\n */\r\n _undoSelection(label: string, selection: SmoSelection) {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label,\r\n UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n }\r\n /**\r\n * Add multiple selections to the undo buffer as a group\r\n * @param label \r\n * @param selections \r\n */\r\n _undoSelections(label: string, selections: SmoSelection[]) {\r\n this.storeUndo.grouping = true;\r\n selections.forEach((selection) => {\r\n this._undoSelection(label, selection);\r\n });\r\n this.storeUndo.grouping = false;\r\n }\r\n\r\n /** \r\n * Update renderer for measures that have changed\r\n */\r\n _renderChangedMeasures(measureSelections: SmoSelection[]) {\r\n if (!Array.isArray(measureSelections)) {\r\n measureSelections = [measureSelections];\r\n }\r\n measureSelections.forEach((measureSelection) => {\r\n this.renderer.addToReplaceQueue(measureSelection);\r\n });\r\n }\r\n /**\r\n * Update renderer for some columns\r\n * @param fromSelector \r\n * @param toSelector \r\n */\r\n _renderRectangle(fromSelector: SmoSelector, toSelector: SmoSelector) {\r\n this._getRectangleSelections(fromSelector, toSelector).forEach((s) => {\r\n this.renderer.addToReplaceQueue(s);\r\n });\r\n }\r\n\r\n /**\r\n * Setup undo for operation that affects the whole score\r\n * @param label \r\n */\r\n _undoScore(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE, SmoSelector.default, this.storeScore,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Get the selector from this.storeScore that maps to the displayed selector from this.score\r\n * @param selector \r\n * @returns \r\n */\r\n _getEquivalentSelector(selector: SmoSelector) {\r\n const rv = JSON.parse(JSON.stringify(selector));\r\n rv.staff = this.staffMap[selector.staff];\r\n return rv;\r\n }\r\n /**\r\n * Get the equivalent staff id from this.storeScore that maps to the displayed selector from this.score\r\n * @param staffId \r\n * @returns \r\n */\r\n _getEquivalentStaff(staffId: number) {\r\n return this.staffMap[staffId];\r\n }\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentSelection(selection: SmoSelection): SmoSelection | null {\r\n try {\r\n if (typeof (selection.selector.tick) === 'undefined') {\r\n return SmoSelection.measureSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure);\r\n }\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n return SmoSelection.noteSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick);\r\n }\r\n return SmoSelection.pitchSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick, selection.selector.pitches);\r\n } catch (ex) {\r\n console.warn(ex);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentGraceNote(selection: SmoSelection, gn: SmoGraceNote): SmoGraceNote {\r\n if (selection.note !== null) {\r\n const rv = selection.note.getGraceNotes().find((gg) => gg.attrs.id === gn.attrs.id);\r\n if (rv) {\r\n return rv;\r\n }\r\n }\r\n return gn;\r\n }\r\n /**\r\n * Get the rectangle of selections indicated by the parameters from the score\r\n * @param startSelector \r\n * @param endSelector \r\n * @param score \r\n * @returns \r\n */\r\n _getRectangleSelections(startSelector: SmoSelector, endSelector: SmoSelector): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n let i = 0;\r\n let j = 0;\r\n for (i = startSelector.staff; i <= endSelector.staff; i++) {\r\n for (j = startSelector.measure; j <= endSelector.measure; j++) {\r\n const target = SmoSelection.measureSelection(this.score, i, j);\r\n if (target !== null) {\r\n rv.push(target);\r\n }\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * set the grouping flag for undo operations\r\n * @param val \r\n */\r\n groupUndo(val: boolean) {\r\n this.storeUndo.grouping = val;\r\n }\r\n\r\n /**\r\n * Show all staves, 1:1 mapping of view score staff to stored score staff\r\n */\r\n get defaultStaffMap(): number[] {\r\n let i = 0;\r\n const rv: number[] = [];\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n rv.push(i);\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Bootstrapping function, creates the renderer and associated timers\r\n */\r\n startRenderingEngine() {\r\n if (!this.renderer.score) {\r\n // If there is only one part, display the part.\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n // If the score is transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.renderer.score = this.score;\r\n this.renderer.setViewport();\r\n }\r\n this.renderer.startDemon();\r\n }\r\n /**\r\n * Gets the current mapping of displayed staves to score staves (this.storeScore)\r\n * @returns \r\n */\r\n getView(): ViewMapEntry[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const show = this.staffMap.indexOf(i) >= 0;\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Update the staff ID when the view changes\r\n */\r\n setMappedStaffIds() {\r\n this.score.staves.forEach((staff) => {\r\n if (!this.isPartExposed()) {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n } else {\r\n staff.partInfo.displayCues = false;\r\n }\r\n staff.setMappedStaffId(this.staffMap[staff.staffId]);\r\n });\r\n }\r\n /**\r\n * Exposes a part: hides non-part staves, shows part staves.\r\n * Note this will reset the view. After this operation, staff 0 will\r\n * be the selected part.\r\n * @param staff \r\n */\r\n exposePart(staff: SmoSystemStaff) {\r\n let i = 0;\r\n const exposeMap: ViewMapEntry[] = [];\r\n let pushNext = false;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const tS = this.storeScore.staves[i];\r\n const show = tS.staffId === staff.staffId;\r\n if (pushNext) {\r\n exposeMap.push({ show: true });\r\n pushNext = false;\r\n } else {\r\n exposeMap.push({ show });\r\n if (tS.partInfo.stavesAfter > 0 && show) {\r\n pushNext = true;\r\n }\r\n }\r\n }\r\n this.setView(exposeMap);\r\n }\r\n /**\r\n * Indicates if the score is displaying in part-mode vs. score mode.\r\n * @returns \r\n */\r\n isPartExposed(): boolean {\r\n return this.score.isPartExposed();\r\n }\r\n /**\r\n * Parts have different formatting options from the parent score, indluding layout. Reset\r\n * them when exposing a part.\r\n */\r\n _mapPartFormatting() {\r\n this.score.layoutManager = this.score.staves[0].partInfo.layoutManager;\r\n let replacedText = false;\r\n this.score.staves.forEach((staff) => {\r\n staff.updateMeasureFormatsForPart();\r\n if (staff.partInfo.preserveTextGroups && !replacedText) {\r\n const tga: SmoTextGroup[] = [];\r\n replacedText = true;\r\n staff.partInfo.textGroups.forEach((tg) => {\r\n tga.push(tg)\r\n });\r\n this.score.textGroups = tga;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the list of staves in the score that are displayed.\r\n */\r\n setView(rows: ViewMapEntry[]) {\r\n let i = 0;\r\n const any = rows.find((row) => row.show === true);\r\n if (!any) {\r\n return;\r\n }\r\n const nscore = SmoScore.deserialize(JSON.stringify(this.storeScore.serialize(true)));\r\n const staffMap = [];\r\n for (i = 0; i < rows.length; ++i) {\r\n const row = rows[i];\r\n if (row.show) {\r\n const srcStave = this.storeScore.staves[i];\r\n const jsonObj = srcStave.serialize();\r\n jsonObj.staffId = staffMap.length;\r\n const nStave = SmoSystemStaff.deserialize(jsonObj);\r\n nStave.mapStaffFromTo(i, nscore.staves.length);\r\n nscore.staves.push(nStave);\r\n if (srcStave.keySignatureMap) {\r\n nStave.keySignatureMap = JSON.parse(JSON.stringify(srcStave.keySignatureMap));\r\n }\r\n nStave.measures.forEach((measure: SmoMeasure, ix) => {\r\n const srcMeasure = srcStave.measures[ix];\r\n measure.tempo = new SmoTempoText(srcMeasure.tempo.serialize());\r\n measure.timeSignature = new TimeSignature(srcMeasure.timeSignature);\r\n measure.keySignature = srcMeasure.keySignature;\r\n });\r\n staffMap.push(i);\r\n }\r\n }\r\n nscore.numberStaves();\r\n this.staffMap = staffMap;\r\n this.score = nscore;\r\n // Indicate which score staff view staves are mapped to, to decide to display\r\n // modifiers.\r\n this.setMappedStaffIds();\r\n // TODO: add part-specific measure formatting, etc.\r\n this._setTransposing();\r\n this.renderer.score = nscore;\r\n // If this current view is a part, show the part layout\r\n if (this.isPartExposed()) {\r\n this._mapPartFormatting(); \r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = false;\r\n });\r\n SmoOperation.computeMultipartRest(nscore);\r\n } else {\r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n });\r\n }\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * view all the staffs in score mode.\r\n */\r\n viewAll() {\r\n this.score = SmoScore.deserialize(JSON.stringify(this.storeScore.serialize()));\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this._setTransposing();\r\n this.synchronizeTextGroups();\r\n this.renderer.score = this.score;\r\n this.pasteBuffer.setScore(this.score);\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * Update score based on transposing flag.\r\n */\r\n _setTransposing() {\r\n if (!this.isPartExposed()) {\r\n const xpose = this.score.preferences?.transposingScore;\r\n if (xpose) {\r\n this.score.setTransposing();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update the view after loading or restoring a completely new score\r\n * @param score \r\n * @returns \r\n */\r\n changeScore(score: SmoScore) {\r\n this.storeUndo.reset();\r\n SuiAudioPlayer.stopPlayer();\r\n this.renderer.score = score;\r\n this.renderer.setViewport();\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(score.serialize()));\r\n this.score = score;\r\n // If the score is non-transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this.synchronizeTextGroups();\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n const rv = this.renderPromise();\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n return rv;\r\n }\r\n\r\n /**\r\n * for the view score, the renderer decides what to render\r\n * depending on what is undone.\r\n * @returns \r\n */\r\n undo() {\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n \r\n // A score-level undo might have changed the score.\r\n if (this.storeUndo.buffer.length < 1) {\r\n return;\r\n }\r\n const staffMap: Record = {};\r\n const identityMap: Record = {};\r\n this.defaultStaffMap.forEach((nn) => identityMap[nn] = nn);\r\n this.staffMap.forEach((mm, ix) => staffMap[mm] = ix);\r\n this.score = this.renderer.undo(this.storeUndo, staffMap);\r\n this.storeScore = this.storeUndo.undo(this.storeScore, identityMap, true);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreView } from './scoreView';\r\nimport { SmoScore, engravingFontType } from '../../smo/data/score';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { KeyEvent, SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SmoSystemGroup, SmoPageLayout, SmoGlobalLayout, SmoLayoutManager, SmoAudioPlayerSettings,\r\n SmoScorePreferences, SmoScoreInfo } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoDynamicText, SmoNoteModifierBase, SmoGraceNote, SmoArticulation, \r\n SmoOrnament, SmoLyric, SmoMicrotone, SmoArpeggio, SmoArpeggioType } from '../../smo/data/noteModifiers';\r\nimport { SmoTempoText, SmoVolta, SmoBarline, SmoRepeatSymbol, SmoRehearsalMark, SmoMeasureFormat, TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { UndoBuffer, SmoUndoable } from '../../smo/xform/undo';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { BatchSelectionOperation } from '../../smo/xform/operations';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiXhrLoader } from '../../ui/fileio/xhrLoader';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { StaffModifierBase, SmoSlur,\r\n SmoInstrument, SmoInstrumentParams, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { SuiPiano } from './piano';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\ndeclare var SmoConfig: SmoRenderConfiguration;\r\n\r\n/**\r\n * MVVM-like operations on the displayed score.\r\n * \r\n * All operations that can be performed on a 'live' score go through this\r\n * module. It maps the score view to the actual score and makes sure the\r\n * model and view stay in sync. \r\n * \r\n * Because this object operates on the current selections, \r\n * all operations return promise so applications can wait for the \r\n * operation to complete and update the selection list.\r\n * @category SuiRender\r\n */\r\nexport class SuiScoreViewOperations extends SuiScoreView {\r\n /**\r\n * Add a new text group to the score \r\n * @param textGroup a new text group\r\n * @returns \r\n */\r\n addTextGroup(textGroup: SmoTextGroup): Promise {\r\n const altNew = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew,\r\n UndoBuffer.bufferSubtypes.ADD);\r\n if (this.isPartExposed()) {\r\n this.score.updateTextGroup(textGroup, true);\r\n const partInfo = this.storeScore.staves[this._getEquivalentStaff(0)].partInfo;\r\n partInfo.updateTextGroup(altNew, true);\r\n } else {\r\n this.score.addTextGroup(textGroup);\r\n this.storeScore.addTextGroup(altNew);\r\n }\r\n this.renderer.renderScoreModifiers();\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * Remove the text group from the score\r\n * @param textGroup \r\n * @returns \r\n */\r\n removeTextGroup(textGroup: SmoTextGroup): Promise {\r\n this.score.updateTextGroup(textGroup, false);\r\n const altGroup = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n textGroup.elements.forEach((el) => el.remove());\r\n textGroup.elements = [];\r\n const isPartExposed = this.isPartExposed();\r\n if (!isPartExposed) {\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this.storeScore.updateTextGroup(altGroup, false);\r\n } else {\r\n const stave = this.storeScore.staves[this._getEquivalentStaff(0)];\r\n stave.partInfo.updateTextGroup(altGroup, false);\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n \r\n }\r\n this.renderer.renderScoreModifiers();\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * UPdate an existing text group. The original is passed in, because since TG not tied to a musical\r\n * element, we need to find the one we're updating.\r\n * @param oldVersion \r\n * @param newVersion \r\n * @returns \r\n */\r\n updateTextGroup(newVersion: SmoTextGroup): void {\r\n const isPartExposed = this.isPartExposed();\r\n const altNew = SmoTextGroup.deserializePreserveId(newVersion.serialize());\r\n this.score.updateTextGroup(newVersion, true);\r\n // If this is part text, don't store it in the score text, except for the displayed score\r\n if (!isPartExposed) {\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew, UndoBuffer.bufferSubtypes.UPDATE);\r\n this.storeScore.updateTextGroup(altNew, true);\r\n } else {\r\n this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altNew, true);\r\n }\r\n // TODO: only render the one TG.\r\n this.renderer.renderScoreModifiers();\r\n // return this.renderer.updatePromise();\r\n }\r\n /**\r\n * load an mxml score remotely, return a promise that \r\n * completes when the file is loaded\r\n * @param url where to find the xml file\r\n * @returns \r\n */\r\n async loadRemoteXml(url: string): Promise {\r\n const req = new SuiXhrLoader(url);\r\n const self = this;\r\n // Shouldn't we return promise of actually displaying the score?\r\n await req.loadAsync();\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(req.value, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n self.changeScore(score);\r\n }\r\n /**\r\n * load a remote score in SMO format\r\n * @param url url to find the score\r\n * @returns \r\n */\r\n async loadRemoteJson(url: string) : Promise {\r\n const req = new SuiXhrLoader(url);\r\n await req.loadAsync();\r\n const score = SmoScore.deserialize(req.value);\r\n await this.changeScore(score);\r\n }\r\n /**\r\n * Load a remote score, return promise when it's been loaded\r\n * from afar.\r\n * @param pref \r\n * @returns \r\n */\r\n async loadRemoteScore(url: string): Promise {\r\n if (url.endsWith('xml') || url.endsWith('mxl')) {\r\n return this.loadRemoteXml(url);\r\n } else {\r\n return this.loadRemoteJson(url);\r\n }\r\n }\r\n updateAudioSettings(pref: SmoAudioPlayerSettings) {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.audioSettings = pref;\r\n this.storeScore.audioSettings = new SmoAudioPlayerSettings(pref);\r\n // No rendering to be done\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Global settings that control how the score editor behaves\r\n * @param pref \r\n * @returns \r\n */\r\n updateScorePreferences(pref: SmoScorePreferences): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n const oldXpose = this.score.preferences.transposingScore;\r\n const curXpose = pref.transposingScore;\r\n this.score.updateScorePreferences(new SmoScorePreferences(pref));\r\n this.storeScore.updateScorePreferences(new SmoScorePreferences(pref));\r\n if (curXpose === false && oldXpose === true) {\r\n this.score.setNonTransposing();\r\n } else if (curXpose === true && oldXpose === false) {\r\n this.score.setTransposing();\r\n }\r\n this.renderer.setDirty();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update information about the score, composer etc.\r\n * @param scoreInfo \r\n * @returns \r\n */\r\n updateScoreInfo(scoreInfo: SmoScoreInfo): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.scoreInfo = scoreInfo;\r\n this.storeScore.scoreInfo = JSON.parse(JSON.stringify(scoreInfo));\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * Add a specific microtone modifier to the selected notes\r\n * @param tone \r\n * @returns \r\n */\r\n addRemoveMicrotone(tone: SmoMicrotone): Promise {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove microtone');\r\n\r\n SmoOperation.addRemoveMicrotone(null, selections, tone);\r\n SmoOperation.addRemoveMicrotone(null, altSelections, tone);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n addRemoveArpeggio(code: SmoArpeggioType) {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove microtone');\r\n [selections, altSelections].forEach((selType) => {\r\n selType.forEach((sel) => {\r\n if (sel.note) {\r\n if (code === 'none') {\r\n sel.note.arpeggio = undefined;\r\n } else {\r\n sel.note.arpeggio = new SmoArpeggio({ type: code });\r\n }\r\n }\r\n });\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * Modify the dynamics assoicated with the specific selection\r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n addDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n this._undoFirstMeasureSelection('add dynamic');\r\n this._removeDynamic(selection, dynamic);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.addDynamic(selection, dynamic);\r\n SmoOperation.addDynamic(equiv!, SmoNoteModifierBase.deserialize(dynamic.serialize() as any));\r\n this.renderer.addToReplaceQueue(selection);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * Remove dynamics from the selection \r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n _removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null && equiv.note !== null) {\r\n const altModifiers = equiv.note.getModifiers('SmoDynamicText');\r\n SmoOperation.removeDynamic(selection, dynamic);\r\n if (altModifiers.length) {\r\n SmoOperation.removeDynamic(equiv, altModifiers[0] as SmoDynamicText);\r\n }\r\n }\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * Remove dynamics from the current selection\r\n * @param dynamic\r\n * @returns \r\n */\r\n removeDynamic(dynamic: SmoDynamicText): Promise {\r\n const sel = this.tracker.modifierSelections[0];\r\n if (!sel.selection) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this.tracker.selections = [sel.selection];\r\n this._undoFirstMeasureSelection('remove dynamic');\r\n this._removeDynamic(sel.selection, dynamic);\r\n this.renderer.addToReplaceQueue(sel.selection);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * we never really delete a note, but we will convert it into a rest and if it's\r\n * already a rest we will try to hide it.\r\n * Operates on current selections\r\n * */\r\n deleteNote(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('delete note');\r\n this.tracker.selections.forEach((sel) => {\r\n if (sel.note) {\r\n\r\n const altSel = this._getEquivalentSelection(sel);\r\n\r\n // set the pitch to be a good position for the rest\r\n const pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[sel.measure.clef]));\r\n const altPitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[altSel!.measure.clef]));\r\n sel.note.pitches = [pitch];\r\n altSel!.note!.pitches = [altPitch];\r\n\r\n // If the note is a note, make it into a rest. If the note is a rest already,\r\n // make it invisible. If it is invisible already, make it back into a rest.\r\n if (sel.note.isRest() && !sel.note.isHidden()) {\r\n sel.note.makeHidden(true);\r\n altSel!.note!.makeHidden(true);\r\n } else {\r\n sel.note.makeRest();\r\n altSel!.note!.makeRest();\r\n sel.note.makeHidden(false);\r\n altSel!.note!.makeHidden(false);\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * The lyric editor moves around, so we can't depend on the tracker for the\r\n * correct selection. We get it directly from the editor.\r\n * \r\n * @param selector - the selector of the note with the lyric to remove\r\n * @param lyric - a copy of the lyric to remove. We use the verse, parser to identify it\r\n * @returns render promise\r\n */\r\n removeLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this._undoSelection('remove lyric', selection);\r\n selection.note!.removeLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const storeLyric = equiv!.note!.getLyricForVerse(lyric.verse, lyric.parser);\r\n if (typeof (storeLyric) !== 'undefined') {\r\n equiv!.note!.removeLyric(lyric);\r\n }\r\n this.renderer.addToReplaceQueue(selection);\r\n lyric.deleted = true;\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * @param selector where to add or update the lyric\r\n * @param lyric a copy of the lyric to remove\r\n * @returns \r\n */\r\n addOrUpdateLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this._undoSelection('update lyric', selection);\r\n selection.note!.addLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const altLyric = SmoNoteModifierBase.deserialize(lyric.serialize() as any) as SmoLyric;\r\n equiv!.note!.addLyric(altLyric);\r\n this.renderer.addToReplaceQueue(selection);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Delete all the notes for the currently selected voice\r\n * @returns \r\n */\r\n depopulateVoice(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('depopulate voice');\r\n measureSelections.forEach((selection) => {\r\n const ix = selection.measure.getActiveVoice();\r\n if (ix !== 0) {\r\n SmoOperation.depopulateVoice(selection, ix);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.depopulateVoice(equiv!, ix);\r\n }\r\n });\r\n SmoOperation.setActiveVoice(this.score, 0);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change the active voice in a multi-voice measure.\r\n * @param index \r\n * @returns \r\n */\r\n _changeActiveVoice(index: number): SmoSelection[] {\r\n const measuresToAdd: SmoSelection[] = [];\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n if (index === measureSelection.measure.voices.length) {\r\n measuresToAdd.push(measureSelection);\r\n }\r\n });\r\n return measuresToAdd;\r\n }\r\n /**\r\n * Populate a new voice with default notes\r\n * @param index the voice to populate\r\n * @returns \r\n */\r\n populateVoice(index: number): Promise {\r\n const measuresToAdd = this._changeActiveVoice(index);\r\n if (measuresToAdd.length === 0) {\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this.tracker.selectActiveVoice();\r\n return this.renderer.updatePromise();\r\n }\r\n measuresToAdd.forEach((selection) => {\r\n this._undoSelection('popualteVoice', selection);\r\n SmoOperation.populateVoice(selection, index);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.populateVoice(equiv!, index);\r\n });\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this._renderChangedMeasures(measuresToAdd);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Assign an instrument to a set of measures\r\n * @param instrument the instrument to assign to the selections\r\n * @param selections \r\n * @returns \r\n */\r\n changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]): Promise {\r\n if (typeof (selections) === 'undefined') {\r\n selections = this.tracker.selections;\r\n }\r\n this._undoSelections('change instrument', selections);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.changeInstrument(instrument, selections);\r\n SmoOperation.changeInstrument(instrument, altSelections);\r\n this._renderChangedMeasures(selections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the time signature for a selection\r\n * @param timeSignature actual time signature\r\n */\r\n setTimeSignature(timeSignature: TimeSignature): Promise {\r\n this._undoScore('Set time signature');\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.setTimeSignature(this.score, selections, timeSignature);\r\n SmoOperation.setTimeSignature(this.storeScore, altSelections, timeSignature);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move selected staff up or down in the score.\r\n * @param index direction to move\r\n * @returns \r\n */\r\n moveStaffUpDown(index: number): Promise {\r\n this._undoScore('re-order staves');\r\n // Get staff to move\r\n const selection = this._getEquivalentSelection(this.tracker.selections[0]);\r\n // Make the move in the model, and reset the view so we can see the new\r\n // arrangement\r\n SmoOperation.moveStaffUpDown(this.storeScore, selection!, index);\r\n this.viewAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the staff group for a score, which determines how the staves\r\n * are justified and bracketed\r\n * @param staffGroup \r\n */\r\n addOrUpdateStaffGroup(staffGroup: SmoSystemGroup): Promise {\r\n this._undoScore('group staves');\r\n // Assume that the view is now set to full score\r\n this.score.addOrReplaceSystemGroup(staffGroup);\r\n this.storeScore.addOrReplaceSystemGroup(staffGroup);\r\n this.renderer.setDirty();\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * UPdate tempo for all or part of the score\r\n * @param measure the measure with the tempo. Tempo is measure-wide parameter\r\n * @param scoreMode if true, update whole score. Else selections\r\n * @returns \r\n */\r\n updateTempoScore(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n let measureIndex = 0; \r\n const originalTempo = new SmoTempoText(measure.tempo);\r\n this._undoColumn('update tempo', measure.measureNumber.measureIndex);\r\n let startMeasure = measure.measureNumber.measureIndex;\r\n let endMeasure = this.score.staves[0].measures.length;\r\n let displayed = false;\r\n if (selectionMode) {\r\n const endSel = this.tracker.getExtremeSelection(1);\r\n if (endSel.selector.measure > startMeasure) {\r\n endMeasure = endSel.selector.measure;\r\n }\r\n }\r\n // If we are only changing the position of the text, it only affects the tempo measure.\r\n if (SmoTempoText.eq(originalTempo, tempo) && tempo.yOffset !== originalTempo.yOffset && endMeasure > startMeasure) {\r\n endMeasure = startMeasure + 1; \r\n }\r\n for (measureIndex = startMeasure; measureIndex < endMeasure; ++measureIndex) {\r\n if (!scoreMode && !selectionMode) {\r\n // If not whole score or selections, change until the tempo doesn't match previous measure's tempo (next tempo change)\r\n const compMeasure = this.score.staves[0].measures[measureIndex];\r\n if (SmoTempoText.eq(originalTempo, compMeasure.tempo) || displayed === false) {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel && sel.measure.tempo.display && !displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n } else {\r\n break;\r\n }\r\n } else {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n if (!displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n }\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * 'remove' tempo, which means either setting the bars to the \r\n * default tempo, or the previously-set tempo.\r\n * @param scoreMode whether to reset entire score\r\n */\r\n removeTempo(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n const startSelection = this.tracker.selections[0];\r\n if (startSelection.selector.measure > 0) {\r\n const measureIx = startSelection.selector.measure - 1;\r\n const target = startSelection.staff.measures[measureIx];\r\n const tempo = target.getTempo();\r\n const newTempo = new SmoTempoText(tempo);\r\n newTempo.display = false;\r\n this.updateTempoScore(measure, newTempo, scoreMode, selectionMode);\r\n } else {\r\n this.updateTempoScore(measure, new SmoTempoText(SmoTempoText.defaults), scoreMode, selectionMode);\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add a grace note to the selected real notes.\r\n */\r\n addGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('add grace note');\r\n selections.forEach((selection) => {\r\n const index = selection.note!.getGraceNotes().length;\r\n const pitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const grace = new SmoGraceNote({\r\n pitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n SmoOperation.addGraceNote(selection, grace, index);\r\n\r\n const altPitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const altGrace = new SmoGraceNote({\r\n pitches: altPitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n altGrace.attrs.id = grace.attrs.id;\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.addGraceNote(altSelection!, altGrace, index);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * remove selected grace note\r\n * @returns\r\n */\r\n removeGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('remove grace note');\r\n selections.forEach((selection) => {\r\n // TODO: get the correct offset\r\n SmoOperation.removeGraceNote(selection, 0);\r\n const altSel = (this._getEquivalentSelection(selection));\r\n SmoOperation.removeGraceNote(altSel!, 0);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle slash in stem of grace note\r\n */\r\n slashGraceNotes(): Promise {\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const measureSelections = this._undoTrackerMeasureSelections('slash grace note toggle');\r\n grace.forEach((gn) => {\r\n SmoOperation.slashGraceNotes(gn);\r\n if (gn.selection !== null) {\r\n const altSelection = this._getEquivalentSelection(gn.selection);\r\n const altGn = this._getEquivalentGraceNote(altSelection!, gn.modifier as SmoGraceNote);\r\n SmoOperation.slashGraceNotes({\r\n selection: altSelection, modifier: altGn as any,\r\n box: SvgBox.default, index: 0\r\n });\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n transposeScore(offset: number): Promise {\r\n this._undoScore('transpose score');\r\n SmoOperation.transposeScore(this.score, offset);\r\n SmoOperation.transposeScore(this.storeScore, offset);\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * transpose selected notes\r\n * @param offset 1/2 steps\r\n * @returns \r\n */\r\n transposeSelections(offset: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('transpose');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n if (artifact.selection !== null && artifact.selection.note !== null) {\r\n const gn1 = artifact.modifier as SmoGraceNote;\r\n const index = artifact.selection.note.graceNotes.findIndex((x) => x.attrs.id === gn1.attrs.id);\r\n const altSelection = this._getEquivalentSelection(artifact.selection);\r\n if (altSelection && altSelection.note !== null) {\r\n const gn2 = altSelection.note.graceNotes[index];\r\n SmoOperation.transposeGraceNotes(altSelection!, [gn2], offset);\r\n }\r\n SmoOperation.transposeGraceNotes(artifact.selection, [gn1], offset);\r\n }\r\n });\r\n\r\n } else {\r\n selections.forEach((selected) => {\r\n SmoOperation.transpose(selected, offset);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.transpose(altSel!, offset);\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the accidental spelling of the selected notes\r\n * @returns\r\n */\r\n toggleEnharmonic(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle enharmonic');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n SmoOperation.toggleGraceNoteEnharmonic(artifact.selection!, [artifact.modifier as SmoGraceNote]);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const altGr = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n SmoOperation.toggleGraceNoteEnharmonic(altSelection!,\r\n [altGr]);\r\n });\r\n } else {\r\n selections.forEach((selected) => {\r\n if (typeof (selected.selector.pitches) === 'undefined') {\r\n selected.selector.pitches = [];\r\n }\r\n SmoOperation.toggleEnharmonic(selected);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.toggleEnharmonic(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Toggle cautionary/courtesy accidentals\r\n */\r\n toggleCourtesyAccidentals(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle courtesy accidental');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n const gn1 = [artifact.modifier] as SmoGraceNote[];\r\n SmoOperation.toggleGraceNoteCourtesy(artifact.selection, gn1);\r\n const altSel = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSel!, gn1[0]);\r\n SmoOperation.toggleGraceNoteCourtesy(altSel!, [gn2]);\r\n });\r\n } else {\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleCourtesyAccidental(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleCourtesyAccidental(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the duration of notes for selected, creating more \r\n * or fewer notes. \r\n * After the change, reset the selection so it's as close as possible \r\n * to the original length\r\n * @param operation \r\n * @returns \r\n */\r\n batchDurationOperation(operation: BatchSelectionOperation): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('change duration');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const graceMap: Record = {\r\n doubleDuration: 'doubleGraceNoteDuration',\r\n halveDuration: 'halveGraceNoteDuration'\r\n };\r\n if (grace.length && typeof (graceMap[operation]) !== 'undefined') {\r\n operation = graceMap[operation];\r\n grace.forEach((artifact) => {\r\n (SmoOperation as any)[operation](artifact.selection, artifact.modifier);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n (SmoOperation as any)[operation](altSelection!, gn2);\r\n });\r\n } else {\r\n const altAr = this._getEquivalentSelections(selections);\r\n SmoOperation.batchSelectionOperation(this.score, selections, operation);\r\n SmoOperation.batchSelectionOperation(this.storeScore, altAr, operation);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle selected modifier on selected notes\r\n * @param modifier \r\n * @param ctor parent class constructor (e.g. SmoOrnament)\r\n * @returns \r\n */\r\n toggleArticulation(modifier: string, ctor: string): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle articulation');\r\n this.tracker.selections.forEach((sel) => {\r\n if (ctor === 'SmoArticulation') {\r\n const aa = new SmoArticulation({ articulation: modifier });\r\n const altAa = new SmoArticulation({ articulation: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n SmoOperation.toggleArticulation(sel, aa);\r\n const altSelection = this._getEquivalentSelection(sel);\r\n SmoOperation.toggleArticulation(altSelection!, altAa);\r\n } else {\r\n const aa = new SmoOrnament({ ornament: modifier });\r\n const altAa = new SmoOrnament({ ornament: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n const altSelection = this._getEquivalentSelection(sel!);\r\n SmoOperation.toggleOrnament(sel, aa);\r\n SmoOperation.toggleOrnament(altSelection!, altAa);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * convert non-tuplet not to a tuplet\r\n * @param numNotes 3 means triplet, etc.\r\n */\r\n makeTuplet(numNotes: number): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this._undoTrackerMeasureSelections('make tuplet');\r\n SmoOperation.makeTuplet(selection, numNotes);\r\n const altSelection = this._getEquivalentSelection(selection!);\r\n SmoOperation.makeTuplet(altSelection!, numNotes);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Convert selected tuplet to a single (if possible) non-tuplet\r\n */\r\n unmakeTuplet(): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this._undoTrackerMeasureSelections('unmake tuplet');\r\n SmoOperation.unmakeTuplet(selection);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.unmakeTuplet(altSelection!);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Create a chord by adding an interval to selected note\r\n * @param interval 1/2 steps\r\n * @returns \r\n */\r\n setInterval(interval: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set interval');\r\n selections.forEach((selected) => {\r\n SmoOperation.interval(selected, interval);\r\n const altSelection = this._getEquivalentSelection(selected);\r\n SmoOperation.interval(altSelection!, interval);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the selected chord into a single note\r\n * @returns\r\n */\r\n collapseChord(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('collapse chord');\r\n selections.forEach((selected) => {\r\n const note: SmoNote | null = selected.note;\r\n if (note) {\r\n const pp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n const altpp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n // No operation for this?\r\n note.pitches = [pp];\r\n const altSelection = this._getEquivalentSelection(selected);\r\n altSelection!.note!.pitches = [altpp];\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle chicken-scratches, for jazz improv, comping etc.\r\n */\r\n toggleSlash(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('make slash');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleSlash(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleSlash(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * make selected notes into a rest, or visa-versa\r\n * @returns\r\n */\r\n makeRest(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('make rest');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleRest(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleRest(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the 'end beam' flag for selected notes\r\n * @returns \r\n */\r\n toggleBeamGroup(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle beam group');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleBeamGroup(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleBeamGroup(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n async toggleCue() {\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle note cue');\r\n this.tracker.selections.forEach((selection) => {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n if (selection.note && selection.note.isRest() === false) {\r\n selection.note.isCue = !selection.note.isCue;\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.isCue = selection.note.isCue;\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * up or down\r\n * @returns \r\n */\r\n toggleBeamDirection(): Promise {\r\n const selections = this.tracker.selections;\r\n if (selections.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle beam direction');\r\n SmoOperation.toggleBeamDirection(selections);\r\n SmoOperation.toggleBeamDirection(this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add the selected notes to a beam group\r\n */\r\n beamSelections(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('beam selections');\r\n SmoOperation.beamSelections(this.score, selections);\r\n SmoOperation.beamSelections(this.storeScore, this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * change key signature for selected measures\r\n * @param keySignature vex key signature\r\n */\r\n addKeySignature(keySignature: string): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('set key signature ' + keySignature);\r\n measureSelections.forEach((sel) => {\r\n SmoOperation.addKeySignature(this.score, sel, keySignature);\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addKeySignature(this.storeScore, altSel!, keySignature);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Sets a pitch from the piano widget.\r\n * @param pitch {Pitch}\r\n * @param chordPedal {boolean} - indicates we are adding to a chord\r\n */\r\n setPitchPiano(pitch: Pitch, chordPedal: boolean): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections(\r\n 'setAbsolutePitch ' + pitch.letter + '/' + pitch.accidental);\r\n this.tracker.selections.forEach((selected) => {\r\n const npitch: Pitch = {\r\n letter: pitch.letter,\r\n accidental: pitch.accidental, octave: pitch.octave\r\n };\r\n const octave = SmoMeasure.defaultPitchForClef[selected.measure.clef].octave;\r\n npitch.octave += octave;\r\n const altSel = this._getEquivalentSelection(selected);\r\n if (chordPedal && selected.note) {\r\n selected.note.toggleAddPitch(npitch);\r\n altSel!.note!.toggleAddPitch(npitch);\r\n } else {\r\n SmoOperation.setPitch(selected, [npitch]);\r\n SmoOperation.setPitch(altSel!, [npitch]);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * show or hide the piano widget\r\n * @param value to show it\r\n */\r\n showPiano(value: boolean): Promise {\r\n this.score.preferences.showPiano = value;\r\n this.storeScore.preferences.showPiano = value;\r\n if (value) {\r\n SuiPiano.showPiano();\r\n } else {\r\n SuiPiano.hidePiano();\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Render a pitch for each letter name-pitch in the string,\r\n * @param pitches letter names for pitches\r\n * @returns promise, resolved when all pitches rendered\r\n * @see setPitch\r\n */\r\n async setPitchesPromise(pitches: PitchLetter[]): Promise {\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (index: number) => {\r\n if (index >= pitches.length) {\r\n resolve();\r\n } else {\r\n await self.setPitch(pitches[index]);\r\n fc(index + 1);\r\n }\r\n };\r\n fc(0);\r\n });\r\n return promise;\r\n }\r\n\r\n /**\r\n * Add a pitch to the score at the cursor. This tries to find the best pitch\r\n * to match the letter key (F vs F# for instance) based on key and surrounding notes\r\n * @param letter string\r\n */\r\n setPitch(letter: PitchLetter): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set pitch ' + letter);\r\n selections.forEach((selected) => {\r\n const selector = selected.selector;\r\n let hintSel = SmoSelection.lastNoteSelection(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n if (!hintSel) {\r\n hintSel = SmoSelection.nextNoteSelection(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n // The selection no longer exists, possibly deleted\r\n if (hintSel === null || hintSel.note === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const pitch = SmoMusic.getLetterNotePitch(hintSel.note.pitches[0],\r\n letter, hintSel.measure.keySignature);\r\n SmoOperation.setPitch(selected, [pitch]);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.setPitch(altSel!, [pitch]);\r\n if (this.score.preferences.autoAdvance) {\r\n this.tracker.moveSelectionRight(this.score, null, true);\r\n }\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Generic clipboard copy action\r\n */\r\n copy(): Promise {\r\n this.pasteBuffer.setSelections(this.score, this.tracker.selections);\r\n const altAr: SmoSelection[] = [];\r\n this.tracker.selections.forEach((sel) => {\r\n const noteSelection = this._getEquivalentSelection(sel);\r\n if (noteSelection !== null) {\r\n altAr.push(noteSelection);\r\n }\r\n });\r\n this.storePaste.setSelections(this.storeScore, altAr);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * clipboard paste action\r\n * @returns \r\n */\r\n paste(): Promise {\r\n // We undo the whole score on a paste, since we don't yet know the\r\n // extent of the overlap\r\n this._undoScore('paste');\r\n this.renderer.preserveScroll();\r\n const firstSelection = this.tracker.selections[0];\r\n const pasteTarget = firstSelection.selector;\r\n const altSelection = this._getEquivalentSelection(firstSelection);\r\n const altTarget = altSelection!.selector;\r\n this.pasteBuffer.pasteSelections(pasteTarget);\r\n this.storePaste.pasteSelections(altTarget);\r\n this._renderChangedMeasures(this.pasteBuffer.replacementMeasures);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * specify a note head other than the default for the duration\r\n * @param head \r\n */\r\n setNoteHead(head: string): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set note head');\r\n SmoOperation.setNoteHead(selections, head);\r\n SmoOperation.setNoteHead(this._getEquivalentSelections(selections), head);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Add a volta for selected measures\r\n */\r\n addEnding(): Promise {\r\n // TODO: we should have undo for columns\r\n this._undoScore('Add Volta');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const params = SmoVolta.defaults;\r\n params.startBar = ft.selector.measure;\r\n params.endBar = tt.selector.measure;\r\n params.number = 1;\r\n const volta = new SmoVolta(params);\r\n const altVolta = new SmoVolta(params);\r\n this._renderChangedMeasures([ft, tt]);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, volta);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param ending volta settings\r\n * @returns \r\n */\r\n updateEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Change Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n const altVolta = new SmoVolta(ending);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param ending volta to remove\r\n * @returns \r\n */\r\n removeEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Remove Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position begin or end\r\n * @param barline barline type\r\n * @returns \r\n */\r\n setBarline(position: number, barline: number): Promise {\r\n const obj = new SmoBarline({ position, barline });\r\n const altObj = new SmoBarline({ position, barline });\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set barline', selection.selector.measure);\r\n SmoOperation.setMeasureBarline(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setMeasureBarline(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position start or end\r\n * @param symbol coda, etc.\r\n */\r\n setRepeatSymbol(position: number, symbol: number): Promise {\r\n const params = SmoRepeatSymbol.defaults;\r\n params.position = position;\r\n params.symbol = symbol;\r\n const obj = new SmoRepeatSymbol(params);\r\n const altObj = new SmoRepeatSymbol(params);\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set repeat symbol', selection.selector.measure);\r\n SmoOperation.setRepeatSymbol(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setRepeatSymbol(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle rehearsal mark on first selected measure\r\n * @returns\r\n */\r\n toggleRehearsalMark(): Promise {\r\n const selection = this.tracker.getExtremeSelection(-1);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n const cmd = selection.measure.getRehearsalMark() ? 'removeRehearsalMark' : 'addRehearsalMark';\r\n SmoOperation[cmd](this.score, selection, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n SmoOperation[cmd](this.storeScore, altSelection!, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n _removeStaffModifier(modifier: StaffModifierBase) {\r\n this.score.staves[modifier.associatedStaff].removeStaffModifier(modifier);\r\n const altModifier = StaffModifierBase.deserialize(modifier.serialize());\r\n altModifier.startSelector = this._getEquivalentSelector(altModifier.startSelector);\r\n altModifier.endSelector = this._getEquivalentSelector(altModifier.endSelector);\r\n this.storeScore.staves[this._getEquivalentStaff(modifier.associatedStaff)].removeStaffModifier(altModifier);\r\n }\r\n /**\r\n * Remove selected modifier\r\n * @param modifier slur, hairpin, etc.\r\n * @returns \r\n */\r\n removeStaffModifier(modifier: StaffModifierBase): Promise {\r\n this._undoStaffModifier('Set measure proportion', modifier,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this._removeStaffModifier(modifier);\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change a staff modifier\r\n * @param original original version\r\n * @param modifier modified version\r\n * @returns \r\n */\r\n addOrUpdateStaffModifier(original: StaffModifierBase, modifier: StaffModifierBase): Promise {\r\n if (!modifier) {\r\n if (original) {\r\n // Handle legacy API changed\r\n modifier = StaffModifierBase.deserialize(original);\r\n } else {\r\n console.warn('update modifier: bad modifier');\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const existing = this.score.staves[modifier.startSelector.staff]\r\n .getModifier(modifier);\r\n const subtype = existing === null ? UndoBuffer.bufferSubtypes.ADD :\r\n UndoBuffer.bufferSubtypes.UPDATE;\r\n this._undoStaffModifier('Set measure proportion', original,\r\n subtype);\r\n this._removeStaffModifier(modifier);\r\n const copy = StaffModifierBase.deserialize(modifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n const sel = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n if (sel !== null) {\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addStaffModifier(sel, modifier);\r\n SmoOperation.addStaffModifier(altSel!, copy);\r\n const modId = 'mod-' + sel.selector.staff + '-' + sel.selector.measure;\r\n const context = this.renderer.renderer.getRenderer(sel.measure.svg.logicalBox);\r\n if (context) {\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n }\r\n }\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n _lineOperation(op: string) {\r\n // if (this.tracker.selections.length < 2) {\r\n // return;\r\n // }\r\n const measureSelections = this._undoTrackerMeasureSelections(op);\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = (SmoOperation as any)[op](ft, tt);\r\n (SmoOperation as any)[op](ftAlt, ttAlt);\r\n this._undoStaffModifier('add ' + op, modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n crescendo(): Promise {\r\n this._lineOperation('crescendo');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n crescendoBracket(): Promise {\r\n this._lineOperation('crescendoBracket');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n dimenuendo(): Promise {\r\n this._lineOperation('dimenuendo');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n accelerando(): Promise {\r\n this._lineOperation('accelerando');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n ritard(): Promise {\r\n this._lineOperation('ritard');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * diminuendo selections\r\n * @returns \r\n */\r\n decrescendo(): Promise {\r\n this._lineOperation('decrescendo');\r\n return this.renderer.updatePromise();\r\n }\r\n removeTextBracket(bracket: SmoStaffTextBracket): Promise {\r\n return this.removeStaffModifier(bracket);\r\n }\r\n addOrReplaceTextBracket(modifier: SmoStaffTextBracket) {\r\n const from1 = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n const to1 = SmoSelection.noteFromSelector(this.score, modifier.endSelector);\r\n if (from1 === null || to1 === null) {\r\n return;\r\n }\r\n const altFrom = this._getEquivalentSelection(from1);\r\n const altTo = this._getEquivalentSelection(to1);\r\n if (altFrom === null || altTo === null) {\r\n return;\r\n }\r\n SmoOperation.addOrReplaceBracket(modifier, from1, to1);\r\n SmoOperation.addOrReplaceBracket(modifier, altFrom, altTo);\r\n const redraw = SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector);\r\n this._undoStaffModifier('add repl text bracket', modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(redraw);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Slur selected notes\r\n * @returns\r\n */\r\n slur(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('slur');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = SmoOperation.slur(this.score, ft, tt);\r\n const altModifier = SmoOperation.slur(this.storeScore, ftAlt!, ttAlt!);\r\n this._undoStaffModifier('add ' + 'op', new SmoSlur(modifier), UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * tie selected notes\r\n * @returns \r\n */\r\n tie(): Promise {\r\n this._lineOperation('tie');\r\n return this.renderer.updatePromise();\r\n }\r\n updateZoom(zoomFactor: number) {\r\n const original = this.score.layoutManager!.getGlobalLayout();\r\n original.zoomScale = zoomFactor;\r\n this.score.layoutManager!.globalLayout.zoomScale = zoomFactor;\r\n this.renderer.pageMap.updateZoom(zoomFactor);\r\n this.renderer.pageMap.updateContainerOffset(this.scroller.scrollState);\r\n }\r\n /**\r\n * set global page for score, zoom etc.\r\n * @param layout global SVG settings\r\n * @returns \r\n */\r\n setGlobalLayout(layout: SmoGlobalLayout): Promise {\r\n this._undoScore('Set Global Layout');\r\n const original = this.score.layoutManager!.getGlobalLayout().svgScale;\r\n this.score.layoutManager!.updateGlobalLayout(layout);\r\n this.score.scaleTextGroups(original / layout.svgScale);\r\n this.storeScore.layoutManager!.updateGlobalLayout(layout);\r\n this.renderer.rerenderAll();\r\n return this.renderer.preserveScroll();\r\n }\r\n /**\r\n * Set the layout of a single page\r\n * @param layout page layout\r\n * @param pageIndex which page to change\r\n * @returns \r\n */\r\n _setPageLayout(layout: SmoPageLayout, pageIndex: number) {\r\n this.score.layoutManager!.updatePage(layout, pageIndex);\r\n this.storeScore.layoutManager!.updatePage(layout, pageIndex);\r\n // If we are in part mode, save the page layout in the part so it is there next time\r\n // the part is exposed.\r\n if (this.isPartExposed()) {\r\n this.score.staves.forEach((staff, staffIx) => {\r\n staff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n const altStaff = this.storeScore.staves[this.staffMap[staffIx]];\r\n altStaff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n });\r\n }\r\n }\r\n setPageLayouts(layout: SmoPageLayout, startIndex: number, endIndex: number) {\r\n this._undoScore('Set Page Layout');\r\n let i = 0;\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n this._setPageLayout(layout, i);\r\n }\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the music font\r\n * @param family \r\n * @returns \r\n */\r\n setEngravingFontFamily(family: engravingFontType): Promise {\r\n this.score.engravingFont = family;\r\n this.storeScore.engravingFont = family;\r\n this.renderer.notifyFontChange(); \r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Upate global font used for chord changes\r\n * @param fontInfo\r\n * @returns \r\n */\r\n setChordFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Chord Font');\r\n this.score.setChordFont(fontInfo);\r\n this.storeScore.setChordFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update font used for lyrics\r\n * @param fontInfo \r\n * @returns \r\n */\r\n setLyricFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Lyric Font');\r\n this.score.setLyricFont(fontInfo);\r\n this.storeScore.setLyricFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param value if false, lyric widths don't affect measure width\r\n * @returns \r\n */\r\n setLyricAdjustWidth(value: boolean): Promise {\r\n this._undoScore('Set Lyric Adj Width');\r\n this.score.setLyricAdjustWidth(value);\r\n this.storeScore.setLyricAdjustWidth(value);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * delete selected measures\r\n * @returns \r\n */\r\n deleteMeasure() {\r\n this._undoScore('Delete Measure');\r\n if (this.storeScore.staves[0].measures.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const selections = SmoSelection.getMeasureList(this.tracker.selections);\r\n // THe measures get renumbered, so keep the index at 0\r\n const index = selections[0].selector.measure;\r\n for (var i = 0; i < selections.length; ++i) {\r\n // Unrender the deleted measure\r\n this.score.staves.forEach((staff) => {\r\n this.tracker.clearMeasureMap(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[staff.measures.length - 1]);\r\n // A little hacky - delete the modifiers if they start or end on\r\n // the measure\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.startSelector.measure === index || modifier.endSelector.measure === index) {\r\n if (modifier.logicalBox) {\r\n const context = this.renderer.renderer.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n $(context.svg).find('g.' + modifier.attrs.id).remove();\r\n }\r\n }\r\n }\r\n });\r\n });\r\n // Remove the SVG artifacts mapped to this measure.\r\n this.score.deleteMeasure(index);\r\n this.storeScore.deleteMeasure(index);\r\n // Note: index doesn't increment since there are now 1 fewer measures\r\n };\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add number of measures, with default notes selections\r\n * @param append \r\n * @param numberToAdd \r\n * @returns \r\n */\r\n addMeasures(append: boolean, numberToAdd: number): Promise {\r\n let pos = 0;\r\n let ix = 0;\r\n this._undoScore('Add Measure');\r\n for (ix = 0; ix < numberToAdd; ++ix) {\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (measure) {\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n }\r\n }\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add a single measure before or after selection\r\n * @param append \r\n * @returns \r\n */\r\n addMeasure(append: boolean): Promise {\r\n this._undoScore('Add Measure');\r\n let pos = 0;\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (!measure) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n this.renderer.clearLine(measure);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * remove an entire line of music\r\n * @returns\r\n */\r\n removeStaff(): Promise {\r\n this._undoScore('Remove Instrument');\r\n if (this.storeScore.staves.length < 2 || this.score.staves.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // if we are looking at a subset of the score,\r\n // revert to the full score view before removing the staff.\r\n const sel = this.tracker.selections[0];\r\n const scoreSel = this._getEquivalentSelection(sel);\r\n const staffIndex = scoreSel!.selector.staff;\r\n SmoOperation.removeStaff(this.storeScore, staffIndex);\r\n this.viewAll();\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n addStaff(instrument: SmoSystemStaffParams): Promise {\r\n this._undoScore('Add Instrument');\r\n // if we are looking at a subset of the score, we won't see the new staff. So\r\n // revert to the full view\r\n const staff = SmoOperation.addStaff(this.storeScore, instrument);\r\n const instKeys = Object.keys(staff.measureInstrumentMap);\r\n // update the key signatures for the new part\r\n instKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n const inst = staff.measureInstrumentMap[numKey];\r\n const selections = SmoSelection.innerSelections(this.storeScore, inst.startSelector, inst.endSelector);\r\n SmoOperation.changeInstrument(inst, selections);\r\n })\r\n if (instrument.alignWithPrevious && instrument.staffId > 0) {\r\n const sel = SmoSelector.default;\r\n sel.staff = instrument.staffId - 1;\r\n const selection = SmoSelection.measureSelection(this.storeScore, instrument.staffId - 1, 0);\r\n if (selection) {\r\n let grp = this.storeScore.getSystemGroupForStaff(selection);\r\n if (grp) {\r\n grp.endSelector.staff = instrument.staffId;\r\n } else {\r\n let grp = new SmoSystemGroup(SmoSystemGroup.defaults);\r\n grp.startSelector.staff = instrument.staffId - 1;\r\n grp.endSelector.staff = instrument.staffId;\r\n this.storeScore.systemGroups.push(grp);\r\n }\r\n }\r\n }\r\n\r\n this.viewAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update part info assumes that the part is currently exposed - that\r\n * staff 0 is the first staff in the part prior to editing.\r\n * @param info\r\n */\r\n updatePartInfo(info: SmoPartInfo) {\r\n let i: number = 0;\r\n this._undoScore('Update part info');\r\n const storeStaff = this.staffMap[0] - info.stavesBefore;\r\n const partLength = info.stavesBefore + info.stavesAfter + 1;\r\n const resetView = !SmoLayoutManager.areLayoutsEqual(info.layoutManager.getGlobalLayout(), this.score.layoutManager!.getGlobalLayout());\r\n const restChange = this.score.staves[0].partInfo.expandMultimeasureRests != info.expandMultimeasureRests;\r\n const stavesChange = this.score.staves[0].partInfo.stavesAfter !== info.stavesAfter;\r\n for (i = 0; i < partLength; ++i) {\r\n const nStaffIndex = storeStaff + i;\r\n const nInfo = new SmoPartInfo(info);\r\n nInfo.stavesBefore = i;\r\n nInfo.stavesAfter = partLength - i - 1;\r\n this.storeScore.staves[nStaffIndex].partInfo = nInfo;\r\n // If the staff index is currently displayed, \r\n const displayedIndex = this.staffMap.findIndex((x) => x === nStaffIndex);\r\n if (displayedIndex >= 0) {\r\n this.score.staves[displayedIndex].partInfo = new SmoPartInfo(nInfo);\r\n this.score.layoutManager = nInfo.layoutManager;\r\n }\r\n }\r\n if (resetView || restChange || stavesChange) {\r\n this.renderer.rerenderAll()\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * A simpler API for applications to add a new staff to the score.\r\n * @param params - the instrument, which determines clef, etc.\r\n * @returns \r\n */\r\n addStaffSimple(params: Partial) {\r\n const instrumentParams = SmoInstrument.defaults;\r\n instrumentParams.startSelector.staff = instrumentParams.endSelector.staff = this.score.staves.length;\r\n instrumentParams.clef = params.clef ?? instrumentParams.clef;\r\n\r\n const staffParams = SmoSystemStaff.defaults;\r\n staffParams.measureInstrumentMap[0] = new SmoInstrument(instrumentParams);\r\n this.addStaff(staffParams);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Save the score to local storage.\r\n */\r\n quickSave() {\r\n const scoreStr = JSON.stringify(this.storeScore.serialize());\r\n localStorage.setItem(smoSerialize.localScore, scoreStr);\r\n }\r\n updateRepeatCount(count: number) {\r\n const measureSelections = this._undoTrackerMeasureSelections('repeat bar');\r\n const symbol = count > 0 ? true : false; \r\n measureSelections.forEach((ms) => {\r\n const store = this._getEquivalentSelection(ms);\r\n ms.measure.repeatCount = count;\r\n ms.measure.repeatSymbol = symbol;\r\n if (store) {\r\n store.measure.repeatCount = count;\r\n store.measure.repeatSymbol = symbol;\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.updatePromise();\r\n }\r\n /**\r\n * Update the measure formatting parameters for the current selection\r\n * @param format generic measure formatting parameters\r\n * @returns \r\n */\r\n setMeasureFormat(format: SmoMeasureFormat): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Remove system breaks from the measure formatting for selected measures\r\n * @returns \r\n */\r\n removeSystemBreaks(): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n const format = new SmoMeasureFormat(m.measure.format);\r\n format.systemBreak = false;\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n renumberMeasures(measureIndex: number, localIndex: number) {\r\n this.score.updateRenumberingMap(measureIndex, localIndex);\r\n this.storeScore.updateRenumberingMap(measureIndex, localIndex);\r\n const mmsel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n if (mmsel) {\r\n this._renderChangedMeasures([mmsel]);\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Play the music from the starting selection\r\n * @returns \r\n */\r\n playFromSelection(): void {\r\n var mm = this.tracker.getExtremeSelection(-1);\r\n if (SuiAudioPlayer.playingInstance && SuiAudioPlayer.playingInstance.paused) {\r\n SuiAudioPlayer.playingInstance.play();\r\n return;\r\n }\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n new SuiAudioPlayer({ audioAnimation: this.audioAnimation, score: this.score, startIndex: mm.selector.measure, view: this }).play();\r\n }\r\n stopPlayer() {\r\n SuiAudioPlayer.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'Home' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n moveHome(ev: KeyEvent): Promise {\r\n this.tracker.moveHome(this.score, ev);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'End' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n moveEnd(ev: KeyEvent): Promise {\r\n this.tracker.moveEnd(this.score, ev);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the left, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n growSelectionLeft(): Promise {\r\n this.tracker.growSelectionLeft();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the right, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n growSelectionRight(): Promise {\r\n this.tracker.growSelectionRight();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next tabbable modifier near one of the selected notes\r\n * @param keyEv \r\n * @returns \r\n */\r\n advanceModifierSelection(keyEv: KeyEvent): Promise {\r\n this.tracker.advanceModifierSelection(this.score, keyEv);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next entire measure, if possible\r\n * @returns \r\n */\r\n growSelectionRightMeasure(): Promise {\r\n this.tracker.growSelectionRightMeasure();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n moveSelectionRight(ev: KeyEvent): Promise {\r\n this.tracker.moveSelectionRight(this.score, ev, true);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor backwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n moveSelectionLeft(): Promise {\r\n this.tracker.moveSelectionLeft();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor back entire measure, if possible\r\n * @returns \r\n */\r\n moveSelectionLeftMeasure(): Promise {\r\n this.tracker.moveSelectionLeftMeasure();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forward one measure, if possible\r\n * @returns \r\n */\r\n moveSelectionRightMeasure(): Promise {\r\n this.tracker.moveSelectionRightMeasure();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a higher pitch in the current chord, with wrap\r\n * @returns \r\n */\r\n moveSelectionPitchUp(): Promise {\r\n this.tracker.moveSelectionPitchUp();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a lower pitch in the current chord, with wrap\r\n */\r\n moveSelectionPitchDown(): Promise {\r\n this.tracker.moveSelectionPitchDown();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor up a staff in the system, if possible\r\n * @returns \r\n */\r\n moveSelectionUp(): Promise {\r\n this.tracker.moveSelectionUp();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor down a staff in the system, if possible\r\n * @returns \r\n */\r\n moveSelectionDown(): Promise {\r\n this.tracker.moveSelectionDown();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the current suggestions (hover element) as the selection\r\n * @returns \r\n */\r\n selectSuggestion(evData: KeyEvent): Promise {\r\n this.tracker.selectSuggestion(this.score, evData);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Find an element at the given box, and make it the current selection\r\n * */\r\n intersectingArtifact(evData: SvgBox): Promise {\r\n this.tracker.intersectingArtifact(evData);\r\n return this.renderer.updatePromise();\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Respond to scroll events in music DOM, and handle the scroll of the viewport\r\n * @category SuiRender\r\n */\r\nexport class SuiScroller {\r\n selector: HTMLElement;\r\n svgPages: SvgPageMap;\r\n _scroll: SvgPoint;\r\n _offsetInitial: SvgPoint;\r\n viewport: SvgBox = SvgBox.default;\r\n logicalViewport: SvgBox = SvgBox.default;\r\n scrolling: boolean = false;\r\n // ### constructor\r\n // selector is the scrollable DOM container of the music container\r\n // (grandparent of svg element)\r\n constructor(selector: HTMLElement, svgPages: SvgPageMap) {\r\n const self = this;\r\n this.selector = selector;\r\n this._scroll = { x: 0, y: 0 };\r\n this.svgPages = svgPages;\r\n const scroller = $(selector);\r\n this._offsetInitial = { x: $(scroller).offset().left, y: $(scroller).offset().top };\r\n }\r\n\r\n get scrollState(): SvgPoint {\r\n return { x: this._scroll.x, y: this._scroll.y };\r\n }\r\n restoreScrollState(state: SvgPoint) {\r\n this.scrollOffset(state.x - this._scroll.x, state.y - this._scroll.y);\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### handleScroll\r\n // update viewport in response to scroll events\r\n handleScroll(x: number, y: number) {\r\n this._scroll = { x, y };\r\n this.deferUpdateDebug();\r\n }\r\n updateDebug() {\r\n layoutDebug.updateScrollDebug(this._scroll);\r\n }\r\n deferUpdateDebug() {\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n setTimeout(() => {\r\n this.updateDebug();\r\n }, 1);\r\n }\r\n }\r\n\r\n scrollAbsolute(x: number, y: number) {\r\n $(this.selector)[0].scrollLeft = x;\r\n $(this.selector)[0].scrollTop = y;\r\n this.netScroll.x = this._scroll.x = x;\r\n this.netScroll.y = this._scroll.y = y;\r\n this.deferUpdateDebug();\r\n }\r\n\r\n /**\r\n * Scroll such that the box is fully visible, if possible (if it is\r\n * not larger than the screen) \r\n **/\r\n scrollVisibleBox(box: SvgBox) {\r\n let yoff = 0;\r\n let xoff = 0;\r\n\r\n const screenBox = this.svgPages.svgToClientNoOffset(box);\r\n const scrollState = this.scrollState;\r\n const scrollDown = () => screenBox.y + screenBox.height > scrollState.y + this.viewport.height;\r\n const scrollUp = () => screenBox.y < scrollState.y;\r\n const scrollLeft = () => screenBox.x < scrollState.x;\r\n const scrollRight = () => screenBox.x + screenBox.width > scrollState.x + this.viewport.width;\r\n // Math: make sure we don't scroll down if scrollUp is indicated, etc.\r\n if (scrollUp()) {\r\n yoff = Math.min(screenBox.y - scrollState.y, 0);\r\n } \r\n if (scrollDown()) {\r\n yoff = Math.max(screenBox.y - (scrollState.y - screenBox.height), 0);\r\n }\r\n if (scrollLeft()) {\r\n xoff = Math.min(screenBox.x - scrollState.x, 0);\r\n }\r\n if (scrollRight()) {\r\n xoff = Math.max(screenBox.x - (scrollState.x - screenBox.height), 0);\r\n }\r\n this.scrollOffset(xoff, yoff);\r\n}\r\n // Update viewport size, and also fix height of scroll region.\r\n updateViewport() {\r\n $(this.selector).css('height', (window.innerHeight - $(this.selector).offset().top).toString() + 'px');\r\n this.viewport = SvgHelpers.boxPoints(\r\n $(this.selector).offset().left,\r\n $(this.selector).offset().top,\r\n $(this.selector).width(),\r\n $(this.selector).height());\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### scrollBox\r\n // get the current viewport, in scrolled coordinates. When tracker maps the\r\n // music element to client coordinates, these are the coordinates used in the\r\n // map\r\n get scrollBox(): SvgBox {\r\n return SvgHelpers.boxPoints(this.viewport.x + this.netScroll.x,\r\n this.viewport.y + this.netScroll.y,\r\n this.viewport.width,\r\n this.viewport.height\r\n );\r\n }\r\n\r\n // ### scrollOffset\r\n // scroll the offset from the starting scroll point\r\n scrollOffset(x: number, y: number) {\r\n const xScreen = Math.max(this._scroll.x + x, 0);\r\n const yScreen = Math.max(this._scroll.y + y, 0);\r\n this.scrollAbsolute(xScreen, yScreen);\r\n }\r\n\r\n // ### netScroll\r\n // return the net amount we've scrolled, based on when the maps were make (initial)\r\n // , the offset of the container, and the absolute coordinates of the scrollbar.\r\n get netScroll() {\r\n var xoffset = $(this.selector).offset().left - this._offsetInitial.x;\r\n var yoffset = $(this.selector).offset().top - this._offsetInitial.y;\r\n return { x: this._scroll.x - xoffset, y: this._scroll.y - yoffset };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { Transposable, SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPage } from './svgPageMap';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface StrokeInfo {\r\n strokeName: string,\r\n stroke: string,\r\n strokeWidth: string | number,\r\n strokeDasharray: string | number,\r\n fill: string,\r\n opacity: number\r\n}\r\n\r\nexport interface OutlineInfo {\r\n stroke: StrokeInfo,\r\n classes: string,\r\n box: SvgBox | SvgBox[],\r\n scroll: SvgPoint,\r\n context: SvgPage,\r\n timeOff: number,\r\n timer?: number,\r\n element?: SVGSVGElement\r\n}\r\n\r\nexport interface GradientInfo {\r\n color: string, offset: string, opacity: number\r\n}\r\n\r\nexport interface Boxable {\r\n box: SvgBox\r\n}\r\n\r\nexport class SvgBuilder {\r\n e: Element;\r\n constructor(el: string) {\r\n const ns = SvgHelpers.namespace;\r\n this.e = document.createElementNS(ns, el);\r\n }\r\n classes(cl: string): SvgBuilder {\r\n this.e.setAttributeNS('', 'class', cl);\r\n return this;\r\n }\r\n attr(name: string, value: string): SvgBuilder {\r\n this.e.setAttributeNS('', name, value);\r\n return this;\r\n }\r\n\r\n text(x: number | string, y: number | string, classes: string, text: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n this.e.setAttributeNS('', 'class', classes);\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.textContent = text;\r\n return this;\r\n }\r\n rect(x: number | string, y: number | string, width: number | string, height: number | string, classes: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n width = typeof (width) == 'string' ? width : width.toString();\r\n height = typeof (height) == 'string' ? height : height.toString();\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.setAttributeNS('', 'width', width);\r\n this.e.setAttributeNS('', 'height', height);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n line(x1: number | string, y1: number | string, x2: number | string, y2: number | string, classes: string): SvgBuilder {\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n this.e.setAttributeNS('', 'x1', x1);\r\n this.e.setAttributeNS('', 'y1', y1);\r\n this.e.setAttributeNS('', 'x2', x2);\r\n this.e.setAttributeNS('', 'y2', y2);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n append(el: any): SvgBuilder {\r\n this.e.appendChild(el.e);\r\n return this;\r\n }\r\n dom(): Element {\r\n return this.e;\r\n }\r\n static b(element: string): SvgBuilder {\r\n return new SvgBuilder(element);\r\n }\r\n}\r\n// ## SvgHelpers\r\n// Mostly utilities for converting coordinate spaces based on transforms, etc.\r\n// ### static class methods:\r\n// ---\r\nexport class SvgHelpers {\r\n static get namespace(): string {\r\n return \"http://www.w3.org/2000/svg\";\r\n }\r\n\r\n // ### gradient\r\n // Create an svg linear gradient.\r\n // Stops look like this:\r\n // `[{color:\"#eee\", offset:\"0%\",opacity:0.5}]`\r\n // orientation is horizontal or vertical\r\n static gradient(svg: SVGSVGElement, id: string, orientation: string, stops: GradientInfo[]) {\r\n var ns = SvgHelpers.namespace;\r\n var x2 = orientation === 'vertical' ? 0 : 1;\r\n var y2 = orientation === 'vertical' ? 1 : 0;\r\n\r\n var e = document.createElementNS(ns, 'linearGradient');\r\n e.setAttributeNS('', 'id', id);\r\n e.setAttributeNS('', 'x1', '0');\r\n e.setAttributeNS('', 'x2', x2.toString());\r\n e.setAttributeNS('', 'y1', '0');\r\n e.setAttributeNS('', 'y2', y2.toString());\r\n stops.forEach((stop) => {\r\n var s = document.createElementNS(ns, 'stop');\r\n s.setAttributeNS('', 'stop-opacity', stop.opacity.toString());\r\n s.setAttributeNS('', 'stop-color', stop.color);\r\n s.setAttributeNS('', 'offset', stop.offset);\r\n e.appendChild(s);\r\n\r\n });\r\n svg.appendChild(e);\r\n }\r\n\r\n static renderCursor(svg: SVGSVGElement, x: number, y: number, height: number) {\r\n var ns = SvgHelpers.namespace;\r\n const width = height * 0.4;\r\n x = x - (width / 2);\r\n var mcmd = (d: string, x: number, y: number) => {\r\n return d + 'M ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var qcmd = (d: string, x1: number, y1: number, x2: number, y2: number) => {\r\n return d + 'q ' + x1.toString() + ' ' + y1.toString() + ' ' + x2.toString() + ' ' + y2.toString() + ' ';\r\n };\r\n var lcmd = (d: string, x: number, y: number) => {\r\n return d + 'L ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var x1 = (width / 2) * .333;\r\n var y1 = -1 * (x1 / 4);\r\n var x2 = (width / 2);\r\n var y2 = x2 / 4;\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'path');\r\n var d = '';\r\n d = mcmd(d, x, y);\r\n d = qcmd(d, x1, y1, x2, y2);\r\n d = lcmd(d, x + (width / 2), y + height - (width / 8));\r\n d = mcmd(d, x + width, y);\r\n d = qcmd(d, -1 * x1, y1, -1 * x2, y2);\r\n d = mcmd(d, x, y + height);\r\n d = qcmd(d, x1, -1 * y1, x2, -1 * y2);\r\n d = mcmd(d, x + width, y + height);\r\n d = qcmd(d, -1 * x1, -1 * y1, -1 * x2, -1 * y2);\r\n e.setAttributeNS('', 'd', d);\r\n e.setAttributeNS('', 'stroke-width', '1');\r\n e.setAttributeNS('', 'stroke', '#555');\r\n e.setAttributeNS('', 'fill', 'none');\r\n svg.appendChild(e);\r\n }\r\n\r\n // ### boxNote\r\n // update the note geometry based on current viewbox conditions.\r\n // This may not be the appropriate place for this...maybe in layout\r\n static updateArtifactBox(context: SvgPage, element: SVGSVGElement | undefined, artifact: Transposable) {\r\n if (!element) {\r\n console.log('updateArtifactBox: undefined element!');\r\n return;\r\n }\r\n artifact.logicalBox = context.offsetBbox(element);\r\n }\r\n\r\n // ### eraseOutline\r\n // Erases old outlineRects.\r\n static eraseOutline(params: OutlineInfo) {\r\n // Hack: Assume a stroke style, should just take a stroke param.\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n }\r\n\r\n static outlineRect(params: OutlineInfo) {\r\n const context = params.context;\r\n if (params.element && params.timer) {\r\n clearTimeout(params.timer);\r\n params.timer = undefined;\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n if (params.timeOff) {\r\n params.timer = window.setTimeout(() => {\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n params.timer = undefined;\r\n }\r\n }, params.timeOff);\r\n }\r\n // Don't highlight in print mode.\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n const classes = params.classes.length > 0 ? params.classes + ' ' + params.stroke.strokeName : params.stroke.strokeName;\r\n var grp = context.getContext().openGroup(classes, classes + '-outline');\r\n params.element = grp;\r\n const boxes = Array.isArray(params.box) ? params.box : [params.box];\r\n\r\n boxes.forEach((box: SvgBox) => {\r\n if (box) {\r\n var strokeObj:any = params.stroke;\r\n strokeObj['stroke-width'] = params.stroke.strokeWidth;\r\n var margin = 5;\r\n /* if (params.clientCoordinates === true) {\r\n box = SvgHelpers.smoBox(SvgHelpers.clientToLogical(context.svg, SvgHelpers.smoBox(SvgHelpers.adjustScroll(box, scroll))));\r\n } */\r\n context.getContext().rect(box.x - margin, box.y - margin, box.width + margin * 2, box.height + margin * 2, strokeObj);\r\n }\r\n });\r\n context.getContext().closeGroup(grp);\r\n }\r\n\r\n static setSvgStyle(element: Element, attrs: StrokeInfo) {\r\n element.setAttributeNS('', 'stroke', attrs.stroke);\r\n if (attrs.strokeDasharray) {\r\n element.setAttributeNS('', 'stroke-dasharray', attrs.strokeDasharray.toString());\r\n }\r\n if (attrs.strokeWidth) {\r\n element.setAttributeNS('', 'stroke-width', attrs.strokeWidth.toString());\r\n }\r\n if (attrs.fill) {\r\n element.setAttributeNS('', 'fill', attrs.fill);\r\n }\r\n }\r\n static rect(svg: Document, box: SvgBox, attrs: StrokeInfo, classes: string) {\r\n var rect = document.createElementNS(SvgHelpers.namespace, 'rect');\r\n SvgHelpers.setSvgStyle(rect, attrs);\r\n if (classes) {\r\n rect.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(rect);\r\n return rect;\r\n }\r\n\r\n static line(svg: SVGSVGElement, x1: number | string, y1: number | string, x2: number | string, y2: number | string, attrs: StrokeInfo, classes: string) {\r\n var line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n line.setAttributeNS('', 'x1', x1);\r\n line.setAttributeNS('', 'y1', y1);\r\n line.setAttributeNS('', 'x2', x2);\r\n line.setAttributeNS('', 'y2', y2);\r\n SvgHelpers.setSvgStyle(line, attrs);\r\n if (classes) {\r\n line.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(line);\r\n }\r\n\r\n static arrowDown(svg: SVGSVGElement, box: SvgBox) {\r\n const arrowStroke: StrokeInfo = { strokeName: 'arrow-stroke', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 };\r\n SvgHelpers.line(svg, box.x + box.width / 2, box.y, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n var arrowY = box.y + box.height / 4;\r\n SvgHelpers.line(svg, box.x, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n SvgHelpers.line(svg, box.x + box.width, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var mid = box.x + box.width / 2;\r\n var xtext = 'x1: ' + Math.round(box.x);\r\n var wtext = 'x2: ' + Math.round(box.width + box.x);\r\n var ytext = 'y1: ' + Math.round(box.y);\r\n var htext = 'y2: ' + Math.round(box.height + box.y);\r\n var ytextp = Math.round(box.y + box.height);\r\n var ytextp2 = Math.round(box.y + box.height - 30);\r\n\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('text').text(box.x + 20, box.y - 14 + voffset, 'svg-debug-text', xtext))\r\n .append(\r\n b('text').text(mid - 20, box.y - 14 + voffset, 'svg-debug-text', wtext))\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''))\r\n .append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp, 'svg-vdebug-text', ytext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + ytextp + ')'));\r\n if (box.height > 2) {\r\n r.append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp2, 'svg-vdebug-text', htext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + (ytextp2) + ')'))\r\n .append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n static debugBoxNoText(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''));\r\n if (box.height > 2) {\r\n r.append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n\r\n static placeSvgText(svg: SVGSVGElement, attributes: Record[], classes: string, text: string): SVGSVGElement {\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'text');\r\n attributes.forEach((attr) => {\r\n var key: string = Object.keys(attr)[0];\r\n e.setAttributeNS('', key, attr[key].toString());\r\n })\r\n if (classes) {\r\n e.setAttributeNS('', 'class', classes);\r\n }\r\n var tn = document.createTextNode(text);\r\n e.appendChild(tn);\r\n svg.appendChild(e);\r\n return (e as any);\r\n }\r\n static doesBox1ContainBox2(box1?: SvgBox, box2?: SvgBox): boolean {\r\n if (!box1 || !box2) {\r\n return false;\r\n }\r\n const i1 = box2.x - box1.x;\r\n const i2 = box2.y - box1.y;\r\n return (i1 > 0 && i1 < box1.width && i2 > 0 && i2 < box1.height);\r\n }\r\n\r\n // ### findIntersectionArtifact\r\n // find all object that intersect with the rectangle\r\n static findIntersectingArtifact(clientBox: SvgBox, objects: Boxable[]): Boxable[] {\r\n var box = SvgHelpers.smoBox(clientBox); //svgHelpers.untransformSvgPoint(this.context.svg,clientBox);\r\n\r\n // box.y = box.y - this.renderElement.offsetTop;\r\n // box.x = box.x - this.renderElement.offsetLeft;\r\n var rv: Boxable[] = [];\r\n objects.forEach((object) => {\r\n // Measure has been updated, but not drawn.\r\n if (!object.box) {\r\n // console.log('there is no box');\r\n } else {\r\n var obox = SvgHelpers.smoBox(object.box);\r\n if (SvgHelpers.doesBox1ContainBox2(obox, box)) {\r\n rv.push(object);\r\n }\r\n }\r\n });\r\n\r\n return rv;\r\n }\r\n\r\n static findSmallestIntersection(clientBox: SvgBox, objects: Boxable[]) {\r\n var ar = SvgHelpers.findIntersectingArtifact(clientBox, objects);\r\n if (!ar.length) {\r\n return null;\r\n }\r\n var rv = ar[0];\r\n var min = ar[0].box.width * ar[0].box.height;\r\n ar.forEach((obj) => {\r\n var tst = obj.box.width * obj.box.height;\r\n if (tst < min) {\r\n rv = obj;\r\n min = tst;\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n static translateElement(g: SVGSVGElement, x: number | string, y: number | string) {\r\n g.setAttributeNS('', 'transform', 'translate(' + x + ' ' + y + ')');\r\n }\r\n\r\n static stringify(box: SvgBox): string {\r\n if (box['width']) {\r\n\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' ');\r\n } else {\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y\r\n }, null, ' ');\r\n }\r\n }\r\n\r\n static log(box: SvgBox) {\r\n if (box['width']) {\r\n console.log(JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' '));\r\n } else {\r\n console.log('{}');\r\n }\r\n }\r\n\r\n // ### smoBox:\r\n // return a simple box object that can be serialized, copied\r\n // (from svg DOM box)\r\n static smoBox(box: any) {\r\n if (typeof (box) === \"undefined\" || box === null) {\r\n return SvgBox.default;\r\n }\r\n let testBox = box;\r\n if (Array.isArray(box)) {\r\n testBox = box[0];\r\n }\r\n const hround = (f: number): number => {\r\n return Math.round((f + Number.EPSILON) * 100) / 100;\r\n }\r\n const x = typeof (testBox.x) == 'undefined' ? hround(testBox.left) : hround(testBox.x);\r\n const y = typeof (testBox.y) == 'undefined' ? hround(testBox.top) : hround(testBox.y);\r\n return ({\r\n x: hround(x),\r\n y: hround(y),\r\n width: hround(testBox.width),\r\n height: hround(testBox.height)\r\n });\r\n }\r\n // ### unionRect\r\n // grow the bounding box two objects to include both.\r\n static unionRect(b1: SvgBox, b2: SvgBox): SvgBox {\r\n const x = Math.min(b1.x, b2.x);\r\n const y = Math.min(b1.y, b2.y);\r\n const width = Math.max(b1.x + b1.width, b2.x + b2.width) - x;\r\n const height = Math.max(b1.y + b1.height, b2.y + b2.height) - y;\r\n return {\r\n x: x,\r\n y: y,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n static boxPoints(x: number, y: number, w: number, h: number): SvgBox {\r\n return ({\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h\r\n });\r\n }\r\n\r\n // ### svgViewport\r\n // set `svg` element to `width`,`height` and viewport `scale`\r\n static svgViewport(svg: SVGSVGElement, xOffset: number, yOffset: Number, width: number, height: number, scale: number) {\r\n svg.setAttributeNS('', 'width', '' + width);\r\n svg.setAttributeNS('', 'height', '' + height);\r\n svg.setAttributeNS('', 'viewBox', '' + xOffset + ' ' + yOffset + ' ' + Math.round(width / scale) + ' ' +\r\n Math.round(height / scale));\r\n }\r\n static removeElementsByClass(svg: SVGSVGElement, className: string) {\r\n const els = svg.getElementsByClassName(className);\r\n const ellength = els.length\r\n for (var xxx = 0; xxx < ellength; ++xxx) {\r\n els[0].remove();\r\n }\r\n }\r\n}\r\n","import { SvgHelpers, StrokeInfo } from \"./svgHelpers\";\r\nimport { SvgPoint, SvgBox, Renderable } from '../../smo/data/common';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SmoGlobalLayout, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { ModifierTab } from '../../smo/xform/selections';\r\nimport { VexFlow } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n/**\r\n * classes for managing the SVG containers where the music is rendered. Each\r\n * page is a different SVG element. Screen coordinates need to be mapped to the\r\n * correct page and then to the correct element on that page.\r\n * @module /render/sui/svgPageMap\r\n */\r\ndeclare var $: any;\r\n/**\r\n * A selection map maps a sub-section of music (a measure, for instance) to a region\r\n * on the screen. SelectionMap can contain other SelectionMaps with\r\n * different 'T', for instance, notes in a measure, in a 'Russian Dolls' kind of model.\r\n * This allows us to search for elements in < O(n) time and avoid\r\n * expensive geometry operations.\r\n */\r\nexport abstract class SelectionMap {\r\n /**\r\n * Create a key from the selection (selector). e.g. (1,1)\r\n * @param selection \r\n */\r\n abstract createKey(selection: SmoSelection): K;\r\n /**\r\n * get a set of coordinates from this selection, if it has been rendered.\r\n * @param selection \r\n */\r\n abstract boxFromSelection(selection: SmoSelection): SvgBox;\r\n /**\r\n * Add the selection to our map, and possibly to our child map.\r\n * @param key \r\n * @param selection \r\n */\r\n abstract addKeyToMap(key: K, selection: SmoSelection): void;\r\n /**\r\n * find a collection of selection that match a bounding box, possibly by\r\n * recursing through our child SelectionMaps.\r\n * @param value \r\n * @param box \r\n * @param rv \r\n */\r\n abstract findValueInMap(value: T, box: SvgBox): SmoSelection[];\r\n /**\r\n * the outer bounding box of these selections\r\n */\r\n box: SvgBox = SvgBox.default;\r\n /**\r\n * map of key to child SelectionMaps or SmoSelections\r\n */\r\n systemMap: Map = new Map();\r\n /**\r\n * Given a bounding box (or point), find all the musical elements contained\r\n * in that point\r\n * @param box \r\n * @returns SmoSelection[]\r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n for (const [key, value] of this.systemMap) {\r\n rv = rv.concat(this.findValueInMap(value, box));\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Add a rendered element to the map, and update the bounding box\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return; \r\n }\r\n const bounds = this.boxFromSelection(selection);\r\n if (this.systemMap.size === 0) {\r\n this.box = JSON.parse(JSON.stringify(bounds));\r\n }\r\n const ix = this.createKey(selection);\r\n this.addKeyToMap(ix, selection);\r\n this.box = SvgHelpers.unionRect(bounds, this.box);\r\n }\r\n}\r\n\r\n/**\r\n * logic to map a set of notes to a region on the screen, for searching\r\n */\r\nexport class MappedNotes extends SelectionMap{\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.voice}-${selection.selector.tick}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n return selection.note?.logicalBox ?? SvgBox.default;\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n this.systemMap.set(key, selection);\r\n }\r\n findValueInMap(value: SmoSelection, box: SvgBox): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n const note = value.note;\r\n if (note && note.logicalBox && SvgHelpers.doesBox1ContainBox2(note.logicalBox, box)) {\r\n rv.push(value);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Map of measures to a region on the page.\r\n */\r\nexport class MappedMeasures extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.staff}-${selection.selector.measure}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n if (!this.systemMap.has(key)) {\r\n const nnote = new MappedNotes();\r\n this.systemMap.set(key, nnote); \r\n }\r\n this.systemMap.get(key)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedNotes, box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * Map of the systems on a page. Each system has a unique line index\r\n * which is the hash\r\n */\r\nexport class MappedSystems extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection):number {\r\n return selection.measure.svg.lineIndex;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(selectionKey: number, selection: SmoSelection) {\r\n if (!this.systemMap.has(selectionKey)) {\r\n const nmeasure = new MappedMeasures();\r\n this.systemMap.set(selectionKey, nmeasure);\r\n }\r\n this.systemMap.get(selectionKey)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedMeasures, box: SvgBox) {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n } \r\n clearMeasure(selection: SmoSelection) {\r\n if (this.systemMap.has(selection.measure.svg.lineIndex)) {\r\n const mmap = this.systemMap.get(selection.measure.svg.lineIndex);\r\n if (mmap) {\r\n this.systemMap.delete(selection.measure.svg.lineIndex);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Each page is a different SVG element, with its own offset within the DOM. This\r\n * makes partial updates faster. SvgPage keeps track of all musical elements in SelectionMaps.\r\n * staff and score modifiers are kept in seperate lists since they may span multiple\r\n * musical elements (e.g. slurs, text elements).\r\n */\r\nexport class SvgPage {\r\n _renderer: any;\r\n pageNumber: number;\r\n box: SvgBox;\r\n systemMap: MappedSystems = new MappedSystems();\r\n modifierYKeys: number[] = [];\r\n modifierTabDivs: Record = {};\r\n static get defaultMap() {\r\n return {\r\n box: SvgBox.default,\r\n systemMap: new Map()\r\n };\r\n }\r\n /**\r\n * Modifiers are divided into `modifierDivs` vertical \r\n * rectangles for event lookup.\r\n */\r\n static get modifierDivs() {\r\n return 8;\r\n }\r\n /**\r\n * This is the VextFlow renderer context (SVGContext)\r\n * @returns \r\n */\r\n getContext(): any {\r\n return this._renderer.getContext();\r\n }\r\n get divSize(): number {\r\n return this.box.height / SvgPage.modifierDivs;\r\n }\r\n constructor(renderer: any, pageNumber: number, box: SvgBox) {\r\n this._renderer = renderer;\r\n this.pageNumber = pageNumber;\r\n this.box = box;\r\n let divEnd = this.divSize;\r\n for (let i = 0; i < SvgPage.modifierDivs; ++i) {\r\n this.modifierYKeys.push(divEnd);\r\n divEnd += this.divSize;\r\n }\r\n }\r\n /**\r\n * Given SVG y, return the div for modifiers\r\n * @param y \r\n * @returns \r\n */\r\n divIndex(y: number): number {\r\n return Math.round((y - this.box.y) / this.divSize);\r\n }\r\n /**\r\n * Remove all elements and modifiers in this page, for a redraw.\r\n */\r\n clearMap() {\r\n this.systemMap = new MappedSystems();\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Clear mapped objects associated with a measure, including any\r\n * modifiers that span that measure.\r\n * @param selection \r\n */\r\n clearMeasure(selection: SmoSelection) { \r\n this.systemMap.clearMeasure(selection);\r\n const div = this.divIndex(selection.measure.svg.logicalBox.y);\r\n if (div < this.modifierYKeys.length) {\r\n const mods: ModifierTab[] = [];\r\n this.modifierTabDivs[div].forEach((mt: ModifierTab) => {\r\n if (mt.selection) {\r\n if (!SmoSelector.sameMeasure(mt.selection.selector, selection.selector)) {\r\n mods.push(mt);\r\n }\r\n } else {\r\n mods.push(mt);\r\n }\r\n });\r\n this.modifierTabDivs[div] = mods;\r\n }\r\n }\r\n /**\r\n * add a modifier to the page, indexed by its rectangle\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const div = this.divIndex(modifier.box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (!this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div] = [];\r\n }\r\n this.modifierTabDivs[div].push(modifier);\r\n }\r\n }\r\n /**\r\n * Add a new selection to the page\r\n * @param selection \r\n */\r\n addArtifact(selection: SmoSelection) { \r\n this.systemMap.addArtifact(selection);\r\n }\r\n /**\r\n * Try to find a selection on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n return this.systemMap.findArtifact(box);\r\n }\r\n /**\r\n * Try to find a modifier on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(box: SvgBox): ModifierTab[] {\r\n const rv:ModifierTab[] = [];\r\n const div = this.divIndex(box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div].forEach((modTab) => {\r\n if (SvgHelpers.doesBox1ContainBox2(modTab.box, box)) {\r\n rv.push(modTab);\r\n }\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n clearModifiers() { \r\n Object.keys(this.modifierTabDivs).forEach((key) => {\r\n const modifiers = this.modifierTabDivs[parseInt(key)];\r\n modifiers.forEach((mod) => {\r\n if (mod instanceof SmoTextGroup) {\r\n (mod as SmoTextGroup).elements.forEach((element) => {\r\n element.remove();\r\n });\r\n (mod as SmoTextGroup).elements = [];\r\n }\r\n });\r\n });\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Measure the bounding box of an element. Return the box as if the top of the first page were 0,0.\r\n * Bounding boxes are stored in absolute coordinates from the top of the first page. When rendering\r\n * elements, we adjust the coordinates for hte local page.\r\n * @param element \r\n * @returns \r\n */\r\n offsetBbox(element: SVGSVGElement): SvgBox {\r\n const yoff = this.box.y;\r\n const xoff = this.box.x;\r\n const lbox = element.getBBox();\r\n return ({ x: lbox.x + xoff, y: lbox.y + yoff, width: lbox.width, height: lbox.height });\r\n }\r\n /**\r\n * Adjust the bounding box to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgBox(box: SvgBox) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y, width: box.width, height: box.height };\r\n }\r\n /**\r\n * Adjust the point to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgPoint(box: SvgPoint) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y };\r\n }\r\n get svg(): SVGSVGElement {\r\n return this.getContext().svg as SVGSVGElement;\r\n }\r\n}\r\n/**\r\n * A container for all the SVG elements, and methods to manage adding and finding elements. Each\r\n * page of the score has its own SVG element.\r\n */\r\nexport class SvgPageMap {\r\n _layout: SmoGlobalLayout;\r\n _container: HTMLElement;\r\n _pageLayouts: SmoPageLayout[];\r\n vfRenderers: SvgPage[] = [];\r\n static get strokes(): Record {\r\n return {\r\n 'debug-mouse-box': {\r\n strokeName: 'debug-mouse',\r\n stroke: '#7ce',\r\n strokeWidth: 3,\r\n strokeDasharray: '1,1',\r\n fill: 'none',\r\n opacity: 0.6\r\n }\r\n };\r\n }\r\n containerOffset: SvgPoint = SvgPoint.default;\r\n /**\r\n * \r\n * @param layout - defines the page width/height and relative zoom common to all the pages\r\n * @param container - the parent DOM element that contains all the pages\r\n * @param pages - the layouts (margins, etc) for each pages.\r\n */\r\n constructor(layout: SmoGlobalLayout, container: HTMLElement, pages: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._container = container;\r\n this._pageLayouts = pages;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n /**\r\n * Update the offset of the music container DOM element, in client coordinates. This is used\r\n * when converting absolute screen coordinates (like from a mouse event) to SVG coordinates\r\n * @param scrollPoint \r\n */\r\n updateContainerOffset(scrollPoint: SvgPoint) {\r\n const rect = SvgHelpers.smoBox(this.container.getBoundingClientRect());\r\n this.containerOffset = { x: rect.x + scrollPoint.x, y: rect.y + scrollPoint.y };\r\n }\r\n get layout() {\r\n return this._layout;\r\n }\r\n get pageLayouts() {\r\n return this._pageLayouts;\r\n }\r\n get zoomScale() {\r\n return this.layout.zoomScale;\r\n }\r\n get renderScale() {\r\n return this.layout.svgScale;\r\n }\r\n get pageDivHeight() {\r\n return this.layout.pageHeight * this.zoomScale;\r\n }\r\n get pageDivWidth() {\r\n return this.layout.pageWidth * this.zoomScale;\r\n }\r\n get pageHeight() {\r\n return this.layout.pageHeight / this.layout.svgScale;\r\n }\r\n get pageWidth() {\r\n return this.layout.pageWidth / this.layout.svgScale;\r\n }\r\n get totalHeight() {\r\n return this.pageDivHeight * this.pageLayouts.length;\r\n }\r\n /**\r\n * create/re-create all the page SVG elements\r\n */\r\n createRenderers() {\r\n // $(this.container).html('');\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n const toRemove: HTMLElement[] = [];\r\n this.vfRenderers.forEach((renderer) => {\r\n const container = (renderer.svg as SVGSVGElement).parentElement;\r\n if (container) {\r\n toRemove.push(container);\r\n }\r\n });\r\n toRemove.forEach((tt) => {\r\n tt.remove();\r\n });\r\n this.vfRenderers = [];\r\n this.pageLayouts.forEach(() => {\r\n this.addPage();\r\n });\r\n }\r\n addPage() {\r\n const ix = this.vfRenderers.length;\r\n const container = document.createElement('div');\r\n container.setAttribute('id', 'smoosic-svg-div-' + ix.toString());\r\n this._container.append(container);\r\n const vexRenderer = new VF.Renderer(container, VF.Renderer.Backends.SVG);\r\n const svg = (vexRenderer.getContext() as any).svg as SVGSVGElement;\r\n SvgHelpers.svgViewport(svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n const topY = this.pageHeight * ix;\r\n const box = SvgHelpers.boxPoints(0, topY, this.pageWidth, this.pageHeight);\r\n this.vfRenderers.push(new SvgPage(vexRenderer, ix, box));\r\n }\r\n updateZoom(zoomScale: number) {\r\n this.layout.zoomScale = zoomScale;\r\n this.vfRenderers.forEach((pp) => {\r\n SvgHelpers.svgViewport(pp.svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n });\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n }\r\n\r\n /**\r\n * Convert from screen/client event to SVG space. We assume the scroll offset is already added to `box`\r\n * @param box \r\n * @returns \r\n */\r\n clientToSvg(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x - this.containerOffset.x) / cof;\r\n const y = (box.y - this.containerOffset.y) / cof;\r\n const logicalBox = SvgHelpers.boxPoints(x, y, Math.max(box.width / cof, 1), Math.max(box.height / cof, 1));\r\n logicalBox.y -= Math.round(logicalBox.y / this.layout.pageHeight) / this.layout.svgScale;\r\n if (layoutDebug.mask | layoutDebug.values['mouseDebug']) {\r\n layoutDebug.updateMouseDebug(box, logicalBox, this.containerOffset);\r\n }\r\n return logicalBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClient(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof) + this.containerOffset.x;\r\n const y = (box.y * cof) + this.containerOffset.y;\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClientNoOffset(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof);\r\n const y = (box.y * cof);\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n\r\n /**\r\n * Find a selection from a mouse event\r\n * @param box - location of a mouse event or specific screen coordinates\r\n * @returns \r\n */\r\n findArtifact(logicalBox: SvgBox): { selections: SmoSelection[], page: SvgPage} {\r\n const selections: SmoSelection[] = [];\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return { selections: page.findArtifact(logicalBox), page };\r\n }\r\n return { selections, page: this.vfRenderers[0] };\r\n }\r\n /**\r\n * Find any modifiers intersecting with `box`\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(logicalBox: SvgBox): ModifierTab[] {\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return page.findModifierTabs(logicalBox);\r\n }\r\n return [];\r\n }\r\n /**\r\n * add a rendered page to the page map\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return;\r\n }\r\n const page = this.getRenderer(selection.note.logicalBox);\r\n if (page) {\r\n page.addArtifact(selection);\r\n }\r\n }\r\n /**\r\n * add a rendered modifier to the page map\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const page = this.getRenderer(modifier.box);\r\n if (page) {\r\n page.addModifierTab(modifier);\r\n }\r\n }\r\n clearModifiersForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n this.vfRenderers[page].clearModifiers();\r\n }\r\n }\r\n /**\r\n * The number of pages is changing, remove the last page\r\n * @returns \r\n */\r\n removePage() {\r\n let i = 0;\r\n // Don't remove the only page\r\n if (this.vfRenderers.length < 2) {\r\n return;\r\n }\r\n\r\n // Remove last page div\r\n const elementId = 'smoosic-svg-div-' + (this.vfRenderers.length - 1).toString();\r\n const container = document.getElementById(elementId);\r\n if (container) {\r\n container.remove();\r\n }\r\n // pop last renderer off the stack.\r\n const renderers = [];\r\n const layouts = [];\r\n for (i = 0; i < this.vfRenderers.length - 1; ++i) {\r\n renderers.push(this.vfRenderers[i]);\r\n layouts.push(this.pageLayouts[i]);\r\n }\r\n this.vfRenderers = renderers;\r\n this._pageLayouts = layouts;\r\n\r\n // update page height\r\n const totalHeight = this.pageDivHeight * this.pageLayouts.length ;\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(totalHeight) + 'px');\r\n }\r\n /**\r\n * The score dimensions have changed, clear maps and recreate the pages.\r\n * @param layout \r\n * @param pageLayouts \r\n */\r\n updateLayout(layout: SmoGlobalLayout, pageLayouts: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._pageLayouts = pageLayouts;\r\n this.createRenderers();\r\n }\r\n /**\r\n * Return the page by index\r\n * @param page \r\n * @returns \r\n */\r\n getRendererForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n return this.vfRenderers[page];\r\n }\r\n return this.vfRenderers[this.vfRenderers.length - 1];\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param point \r\n * @returns \r\n */\r\n getRendererFromPoint(point: SvgPoint): SvgPage | null {\r\n const ix = Math.floor(point.y / (this.layout.pageHeight / this.layout.svgScale));\r\n if (ix < this.vfRenderers.length) {\r\n return this.vfRenderers[ix];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param box \r\n * @returns \r\n */\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage {\r\n const rv = this.getRendererFromPoint({ x: box.x, y: box.y });\r\n if (rv) {\r\n return rv;\r\n }\r\n return this.vfRenderers[0];\r\n }\r\n /**\r\n * Return the page based on the coordinates of a modifier\r\n * @param modifier \r\n * @returns \r\n */\r\n getRendererFromModifier(modifier?: Renderable) {\r\n let rv = this.vfRenderers[0];\r\n if (modifier && modifier.logicalBox) {\r\n const context = this.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n rv = context;\r\n }\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiInlineText, SuiTextBlock } from './textRender';\r\nimport { SuiRenderState } from './renderState';\r\nimport { SuiScroller } from './scroller';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { OutlineInfo, StrokeInfo, SvgHelpers } from './svgHelpers';\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgPage } from './svgPageMap';\r\nimport { SuiScoreViewOperations } from './scoreViewOperations';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic parameters to create a text editor\r\n * @param context Vex renderer context\r\n * @param scroller\r\n * @param x initial x position\r\n * @param y initial y position\r\n * @param text initial text\r\n */\r\nexport interface SuiTextEditorParams {\r\n pageMap: SvgPageMap,\r\n context: SvgPage,\r\n scroller: SuiScroller,\r\n x: number,\r\n y: number,\r\n text: string\r\n}\r\nexport interface SuiLyricEditorParams extends SuiTextEditorParams {\r\n lyric: SmoLyric\r\n}\r\n\r\nexport interface SuiTextSessionParams {\r\n scroller: SuiScroller;\r\n renderer: SuiRenderState;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport interface SuiLyricSessionParams {\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n verse: number;\r\n selector: SmoSelector;\r\n}\r\nexport type SuiTextStrokeName = 'text-suggestion' | 'text-selection' | 'text-highlight' | 'text-drag' | 'inactive-text';\r\n/**\r\n * The heirarchy of text editing objects goes:\r\n * \r\n * `dialog -> component -> session -> editor`\r\n * \r\n * Editors and Sessions are defined in this module.\r\n * ### editor\r\n * handles low-level events and renders the preview using one\r\n * of the text layout objects.\r\n * ### session\r\n * creates and destroys editors, e.g. for lyrics that have a Different\r\n * editor instance for each note.\r\n * \r\n * ## SuiTextEditor\r\n * The base text editor handles the positioning and inserting\r\n * of text blocks into the text area. The derived class shoud interpret key events.\r\n * A container class will manage the session for starting/stopping the editor\r\n * and retrieving the results into the target object.\r\n * */\r\nexport class SuiTextEditor {\r\n static get States(): Record {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n // parsers use this convention to represent text types (superscript)\r\n static textTypeToChar(textType: number): string {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n return '^';\r\n }\r\n if (textType === SuiInlineText.textTypes.subScript) {\r\n return '%';\r\n }\r\n return '';\r\n }\r\n\r\n static textTypeFromChar(char: string): number {\r\n if (char === '^') {\r\n return SuiInlineText.textTypes.superScript;\r\n }\r\n if (char === '%') {\r\n return SuiInlineText.textTypes.subScript;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n svgText: SuiInlineText | null = null;\r\n context: SvgPage;\r\n outlineInfo: OutlineInfo | null = null;\r\n pageMap: SvgPageMap;\r\n x: number = 0;\r\n y: number = 0;\r\n text: string;\r\n textPos: number = 0;\r\n selectionStart: number = -1;\r\n selectionLength: number = -1;\r\n empty: boolean = true;\r\n scroller: SuiScroller;\r\n suggestionIndex: number = -1;\r\n cursorState: boolean = false;\r\n cursorRunning: boolean = false;\r\n textType: number = SuiInlineText.textTypes.normal;\r\n fontWeight: string = 'normal';\r\n fontFamily: string = 'Merriweather';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.RUNNING;\r\n suggestionRect: OutlineInfo | null = null;\r\n constructor(params: SuiTextEditorParams) {\r\n this.scroller = params.scroller;\r\n this.context = params.context;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.text = params.text;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static get strokes(): Record {\r\n return {\r\n 'text-suggestion': {\r\n strokeName: 'text-suggestion',\r\n stroke: '#cce',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n 'text-selection': {\r\n strokeName: 'text-selection',\r\n stroke: '#99d',\r\n strokeWidth: 1,\r\n fill: 'none',\r\n strokeDasharray: '',\r\n opacity: 1.0\r\n }, \r\n 'text-highlight': {\r\n strokeName: 'text-highlight',\r\n stroke: '#dd9',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n }, \r\n 'text-drag': {\r\n strokeName: 'text-drag',\r\n stroke: '#d99',\r\n strokeWidth: 1,\r\n strokeDasharray: '2,1',\r\n fill: '#eee',\r\n opacity: 0.3\r\n },\r\n 'inactive-text': {\r\n strokeName: 'inactive-text',\r\n stroke: '#fff',\r\n strokeWidth: 1,\r\n strokeDasharray: '',\r\n fill: '#ddd',\r\n opacity: 0.3\r\n }\r\n };\r\n }\r\n\r\n // ### _suggestionParameters\r\n // Create the svg text outline parameters\r\n _suggestionParameters(box: SvgBox, strokeName: SuiTextStrokeName): OutlineInfo {\r\n const outlineStroke = SuiTextEditor.strokes[strokeName];\r\n if (!this.suggestionRect) {\r\n this.suggestionRect = {\r\n context: this.context, box, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n };\r\n this.suggestionRect.box = SvgHelpers.smoBox(box);\r\n return this.suggestionRect;\r\n }\r\n\r\n // ### _expandSelectionToSuggestion\r\n // Expand the selection to include the character the user clicked on.\r\n _expandSelectionToSuggestion() {\r\n if (this.suggestionIndex < 0) {\r\n return;\r\n }\r\n if (this.selectionStart < 0) {\r\n this._setSelectionToSugggestion();\r\n return;\r\n } else if (this.selectionStart > this.suggestionIndex) {\r\n const oldStart = this.selectionStart;\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = (oldStart - this.selectionStart) + this.selectionLength;\r\n } else if (this.selectionStart < this.suggestionIndex\r\n && this.selectionStart > this.selectionStart + this.selectionLength) {\r\n this.selectionLength = (this.suggestionIndex - this.selectionStart) + 1;\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _setSelectionToSugggestion\r\n // Set the selection to the character the user clicked on.\r\n _setSelectionToSugggestion() {\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = 1;\r\n this.suggestionIndex = -1;\r\n this._updateSelections();\r\n }\r\n\r\n rerender() {\r\n this.svgText?.unrender();\r\n this.svgText?.render();\r\n }\r\n // ### handleMouseEvent\r\n // Handle hover/click behavior for the text under edit.\r\n // Returns: true if the event was handled here\r\n handleMouseEvent(ev: any): boolean {\r\n let handled = false;\r\n if (this.svgText === null) {\r\n return false;\r\n }\r\n const clientBox = SvgHelpers.boxPoints(\r\n ev.clientX + this.scroller.scrollState.x,\r\n ev.clientY + this.scroller.scrollState.y, \r\n 1, 1);\r\n const logicalBox = this.pageMap.clientToSvg(clientBox);\r\n var blocks = this.svgText.getIntersectingBlocks(logicalBox);\r\n\r\n // The mouse is not over the text\r\n if (!blocks.length) {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n\r\n // If the user clicks and there was a previous selection, treat it as selected\r\n if (ev.type === 'click' && this.suggestionIndex >= 0) {\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n handled = true;\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n handled = true;\r\n // outline the text that is hovered. Since mouse is a point\r\n // there should only be 1\r\n blocks.forEach((block) => {\r\n SvgHelpers.outlineRect(this._suggestionParameters(block.box, 'text-suggestion'));\r\n this.suggestionIndex = block.index;\r\n });\r\n // if the user clicked on it, add it to the selection.\r\n if (ev.type === 'click') {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n const npos = this.selectionStart + this.selectionLength;\r\n if (npos >= 0 && npos <= this.svgText.blocks.length) {\r\n this.textPos = npos;\r\n }\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n\r\n // ### _serviceCursor\r\n // Flash the cursor as a background task\r\n _serviceCursor() {\r\n if (this.cursorState) {\r\n this.svgText?.renderCursorAt(this.textPos - 1, this.textType);\r\n } else {\r\n this.svgText?.removeCursor();\r\n }\r\n this.cursorState = !this.cursorState;\r\n }\r\n // ### _refreshCursor\r\n // If the text position changes, update the cursor position right away\r\n // don't wait for blink.\r\n _refreshCursor() {\r\n this.svgText?.removeCursor();\r\n this.cursorState = true;\r\n this._serviceCursor();\r\n }\r\n\r\n get _endCursorCondition(): boolean {\r\n return this.cursorRunning === false;\r\n }\r\n\r\n _cursorPreResolve() {\r\n this.svgText?.removeCursor();\r\n }\r\n\r\n _cursorPoll() {\r\n this._serviceCursor();\r\n }\r\n\r\n // ### startCursorPromise\r\n // Used by the calling logic to start the cursor.\r\n // returns a promise that can be pended when the editing ends.\r\n startCursorPromise(): Promise {\r\n var self = this;\r\n this.cursorRunning = true;\r\n this.cursorState = true;\r\n self.svgText?.renderCursorAt(this.textPos, SuiInlineText.textTypes.normal);\r\n return PromiseHelpers.makePromise(() => this._endCursorCondition, () => this._cursorPreResolve(), () => this._cursorPoll(), 333);\r\n }\r\n stopCursor() {\r\n this.cursorRunning = false;\r\n }\r\n\r\n // ### setTextPos\r\n // Set the text position within the editor space and update the cursor\r\n setTextPos(val: number) {\r\n this.textPos = val;\r\n this._refreshCursor();\r\n }\r\n // ### moveCursorRight\r\n // move cursor right within the block of text.\r\n moveCursorRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n if (this.textPos <= this.svgText.blocks.length) {\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n }\r\n // ### moveCursorRight\r\n // move cursor left within the block of text.\r\n moveCursorLeft() {\r\n if (this.textPos > 0) {\r\n this.setTextPos(this.textPos - 1);\r\n }\r\n }\r\n\r\n // ### moveCursorRight\r\n // highlight the text selections\r\n _updateSelections() {\r\n let i = 0;\r\n const end = this.selectionStart + this.selectionLength;\r\n const start = this.selectionStart;\r\n this.svgText?.blocks.forEach((block) => {\r\n const val = start >= 0 && i >= start && i < end;\r\n this.svgText!.setHighlight(block, val);\r\n ++i;\r\n });\r\n }\r\n\r\n // ### _checkGrowSelectionLeft\r\n // grow selection within the bounds\r\n _checkGrowSelectionLeft() {\r\n if (this.selectionStart > 0) {\r\n this.selectionStart -= 1;\r\n this.selectionLength += 1;\r\n }\r\n }\r\n // ### _checkGrowSelectionRight\r\n // grow selection within the bounds\r\n _checkGrowSelectionRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n const end = this.selectionStart + this.selectionLength;\r\n if (end < this.svgText.blocks.length) {\r\n this.selectionLength += 1;\r\n }\r\n }\r\n\r\n // ### growSelectionLeft\r\n // handle the selection keys\r\n growSelectionLeft() {\r\n if (this.selectionStart === -1) {\r\n this.moveCursorLeft();\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n } else if (this.textPos === this.selectionStart) {\r\n this.moveCursorLeft();\r\n this._checkGrowSelectionLeft();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### growSelectionRight\r\n // handle the selection keys\r\n growSelectionRight() {\r\n if (this.selectionStart === -1) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.moveCursorRight();\r\n } else if (this.selectionStart + this.selectionLength === this.textPos) {\r\n this._checkGrowSelectionRight();\r\n this.moveCursorRight();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _clearSelections\r\n // Clear selected text\r\n _clearSelections() {\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### deleteSelections\r\n // delete the selected blocks of text/glyphs\r\n deleteSelections() {\r\n let i = 0;\r\n const blockPos = this.selectionStart;\r\n for (i = 0; i < this.selectionLength; ++i) {\r\n this.svgText?.removeBlockAt(blockPos); // delete shifts blocks so keep index the same.\r\n }\r\n this.setTextPos(blockPos);\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### parseBlocks\r\n // THis can be overridden by the base class to create the correct combination\r\n // of text and glyph blocks based on the underlying text\r\n parseBlocks() {\r\n let i = 0;\r\n \r\n this.svgText = new SuiInlineText({\r\n context: this.context, startX: this.x, startY: this.y,\r\n fontFamily: this.fontFamily, fontSize: this.fontSize, fontWeight: this.fontWeight, scroller: this.scroller,\r\n purpose: SuiInlineText.textPurposes.edit,\r\n fontStyle: 'normal', pageMap: this.pageMap\r\n });\r\n for (i = 0; i < this.text.length; ++i) {\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = this.text[i]\r\n this.svgText.addTextBlockAt(i, def);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n // ### evKey\r\n // Handle key events that filter down to the editor\r\n async evKey(evdata: KeyEvent): Promise {\r\n const removeCurrent = () => {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n this.svgText.element = null;\r\n }\r\n }\r\n if (evdata.code === 'ArrowRight') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionRight();\r\n } else {\r\n this.moveCursorRight();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'ArrowLeft') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionLeft();\r\n } else {\r\n this.moveCursorLeft();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Backspace') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0) {\r\n this.selectionStart = this.textPos - 1;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Delete') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0 && this.svgText !== null && this.textPos < this.svgText.blocks.length) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.key.charCodeAt(0) >= 33 && evdata.key.charCodeAt(0) <= 126 && evdata.key.length === 1) {\r\n removeCurrent();\r\n const isPaste = evdata.ctrlKey && evdata.key === 'v';\r\n let text = evdata.key;\r\n if (isPaste) {\r\n text = await navigator.clipboard.readText();\r\n }\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport class SuiTextBlockEditor extends SuiTextEditor {\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiTextEditorParams) {\r\n super(params);\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.parseBlocks();\r\n }\r\n\r\n _highlightEditor() {\r\n if (this.svgText === null || this.svgText.blocks.length === 0) {\r\n return;\r\n }\r\n const bbox = this.svgText.getLogicalBox();\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (this.outlineInfo && this.outlineInfo.element) {\r\n this.outlineInfo.element.remove();\r\n }\r\n this.outlineInfo = {\r\n context: this.context, box: bbox, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n };\r\n SvgHelpers.outlineRect(this.outlineInfo);\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (evdata.key.charCodeAt(0) === 32) {\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n const rv = super.evKey(evdata);\r\n this._highlightEditor();\r\n return rv;\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n}\r\n\r\nexport class SuiLyricEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n parseBlocks() {\r\n let i = 0;\r\n const def = SuiInlineText.defaults;\r\n def.context = this.context;\r\n def.startX = this.x;\r\n def.startY = this.y;\r\n def.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(def);\r\n for (i = 0; i < this.text.length; ++i) {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = this.text[i];\r\n this.svgText.addTextBlockAt(i, blockP);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n lyric: SmoLyric;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.getText();\r\n if (params.lyric.isHyphenated()) {\r\n this.text += '-';\r\n }\r\n this.lyric = params.lyric;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n if (this.svgText !== null) {\r\n this.svgText.unrender();\r\n }\r\n }\r\n}\r\n\r\nexport class SuiChordEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n static get SymbolModifiers() {\r\n return {\r\n NONE: 1,\r\n SUBSCRIPT: 2,\r\n SUPERSCRIPT: 3\r\n };\r\n }\r\n\r\n // ### toTextTypeChar\r\n // Given an old text type and a desited new text type,\r\n // return what the new text type character should be\r\n static toTextTypeChar(oldTextType: number, newTextType: number): string {\r\n const tt = SuiInlineText.getTextTypeResult(oldTextType, newTextType);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n static toTextTypeTransition(oldTextType: number, result: number): string {\r\n const tt = SuiInlineText.getTextTypeTransition(oldTextType, result);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n setTextType(textType: number) {\r\n this.textType = textType;\r\n }\r\n\r\n // Handle the case where user changed super/subscript in the middle of the\r\n // string.\r\n _updateSymbolModifiers() {\r\n let change = this.textPos;\r\n let render = false;\r\n let i = 0;\r\n for (i = this.textPos; this.svgText !== null && i < this.svgText.blocks.length; ++i) {\r\n const block = this.svgText!.blocks[i];\r\n if (block.textType !== this.textType &&\r\n block.textType !== change) {\r\n change = block.textType;\r\n block.textType = this.textType;\r\n render = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (render) {\r\n this.rerender();\r\n }\r\n }\r\n _setSymbolModifier(char: string): boolean {\r\n if (['^', '%'].indexOf(char) < 0) {\r\n return false;\r\n }\r\n const currentTextType = this.textType;\r\n const transitionType = SuiTextEditor.textTypeFromChar(char);\r\n this.textType = SuiInlineText.getTextTypeResult(currentTextType, transitionType);\r\n this._updateSymbolModifiers();\r\n return true;\r\n }\r\n\r\n parseBlocks() {\r\n let readGlyph = false;\r\n let curGlyph = '';\r\n let blockIx = 0; // so we skip modifier characters\r\n let i = 0;\r\n const params = SuiInlineText.defaults;\r\n params.context = this.context;\r\n params.startX = this.x;\r\n params.startY = this.y;\r\n params.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(params);\r\n\r\n for (i = 0; i < this.text.length; ++i) {\r\n const char = this.text[i];\r\n const isSymbolModifier = this._setSymbolModifier(char);\r\n if (char === '@') {\r\n if (!readGlyph) {\r\n readGlyph = true;\r\n curGlyph = '';\r\n } else {\r\n this._addGlyphAt(blockIx, curGlyph);\r\n blockIx += 1;\r\n readGlyph = false;\r\n }\r\n } else if (!isSymbolModifier) {\r\n if (readGlyph) {\r\n curGlyph = curGlyph + char;\r\n } else {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = char;\r\n blockP.textType = this.textType;\r\n this.svgText.addTextBlockAt(blockIx, blockP);\r\n blockIx += 1;\r\n }\r\n }\r\n this.empty = false;\r\n }\r\n this.textPos = blockIx;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n // ### getText\r\n // Get the text value that we persist\r\n getText(): string {\r\n if (this.svgText === null || this.svgText.blocks.length < 1) {\r\n return '';\r\n }\r\n let text = '';\r\n let textType = this.svgText.blocks[0].textType;\r\n this.svgText.blocks.forEach((block) => {\r\n if (block.textType !== textType) {\r\n text += SuiChordEditor.toTextTypeTransition(textType, block.textType);\r\n textType = block.textType;\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n text += '@' + block.glyphCode + '@';\r\n } else {\r\n text += block.text;\r\n }\r\n });\r\n return text;\r\n }\r\n\r\n _addGlyphAt(ix: number, code: string) {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.glyphCode = code;\r\n blockP.textType = this.textType;\r\n this.svgText?.addGlyphBlockAt(ix, blockP);\r\n this.textPos += 1;\r\n }\r\n unrender() {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n }\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this._setSymbolModifier(evdata.key)) {\r\n return true;\r\n }\r\n // Dialog gives us a specific glyph code\r\n if (evdata.key[0] === '@' && evdata.key.length > 2) {\r\n this.unrender();\r\n const glyph = evdata.key.substr(1, evdata.key.length - 2);\r\n this._addGlyphAt(this.textPos, getChordSymbolGlyphFromCode(glyph));\r\n this.rerender();\r\n edited = true;\r\n } else if (VF.ChordSymbol.glyphs[evdata.key[0]]) { // glyph shortcut like 'b'\r\n this.unrender();\r\n // hack: vexflow 5 broke this\r\n this._addGlyphAt(this.textPos, evdata.key[0]);\r\n this.rerender();\r\n edited = true;\r\n } else {\r\n // some ordinary key\r\n edited = await super.evKey(evdata);\r\n }\r\n if (this.svgText !== null && this.svgText.blocks.length > this.textPos && this.textPos >= 0) {\r\n this.textType = this.svgText.blocks[this.textPos].textType;\r\n }\r\n return edited;\r\n }\r\n lyric: SmoLyric;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.text;\r\n this.lyric = params.lyric;\r\n this.textType = SuiInlineText.textTypes.normal;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n}\r\nexport interface SuiDragSessionParams {\r\n context: SvgPageMap;\r\n scroller: SuiScroller;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport class SuiDragSession {\r\n pageMap: SvgPageMap;\r\n page: SvgPage;\r\n scroller: SuiScroller;\r\n outlineBox: SvgBox;\r\n textObject: SuiTextBlock;\r\n dragging: boolean = false;\r\n outlineRect: OutlineInfo | null = null;\r\n textGroup: SmoTextGroup;\r\n constructor(params: SuiDragSessionParams) {\r\n this.textGroup = params.textGroup;\r\n this.pageMap = params.context;\r\n this.scroller = params.scroller;\r\n this.page = this.pageMap.getRendererFromModifier(this.textGroup);\r\n // create a temporary text object for dragging\r\n this.textObject = SuiTextBlock.fromTextGroup(this.textGroup, this.page, this.pageMap, this.scroller); // SuiTextBlock\r\n this.dragging = false;\r\n this.outlineBox = this.textObject.getLogicalBox();\r\n }\r\n\r\n _outlineBox() {\r\n const outlineStroke = SuiTextEditor.strokes['text-drag'];\r\n const x = this.outlineBox.x - this.page.box.x;\r\n const y = this.outlineBox.y - this.page.box.y;\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: this.page, \r\n box: SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n unrender() {\r\n this.textGroup.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.textGroup.elements = [];\r\n this.textObject.unrender();\r\n }\r\n scrolledClientBox(x: number, y: number) {\r\n return { x: x + this.scroller.scrollState.x, y: y + this.scroller.scrollState.y, width: 1, height: 1 };\r\n }\r\n checkBounds() {\r\n if (this.outlineBox.y < this.outlineBox.height) {\r\n this.outlineBox.y = this.outlineBox.height;\r\n }\r\n if (this.outlineBox.x < 0) {\r\n this.outlineBox.x = 0;\r\n }\r\n if (this.outlineBox.x > this.page.box.x + this.page.box.width - this.outlineBox.width) {\r\n this.outlineBox.x = this.page.box.x + this.page.box.width - this.outlineBox.width;\r\n }\r\n if (this.outlineBox.y > this.page.box.y + this.page.box.height) {\r\n this.outlineBox.y = this.page.box.y + this.page.box.height;\r\n }\r\n }\r\n startDrag(e: any) {\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'start');\r\n }\r\n if (!SvgHelpers.doesBox1ContainBox2(this.outlineBox, svgMouseBox)) {\r\n return;\r\n }\r\n this.dragging = true;\r\n this.outlineBox = svgMouseBox;\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.unrender();\r\n this.checkBounds();\r\n this._outlineBox();\r\n }\r\n\r\n mouseMove(e: any) {\r\n if (!this.dragging) {\r\n return;\r\n }\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n this.outlineBox = SvgHelpers.smoBox(svgMouseBox);\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.checkBounds();\r\n\r\n this.textObject.offsetStartX(this.outlineBox.x - currentBox.x);\r\n this.textObject.offsetStartY(this.outlineBox.y - currentBox.y);\r\n this.textObject.render();\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'drag');\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n this._outlineBox();\r\n }\r\n\r\n endDrag() {\r\n // this.textObject.render();\r\n const newBox = this.textObject.getLogicalBox();\r\n const curBox = this.textGroup.logicalBox ?? SvgBox.default;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(curBox, newBox, 'end');\r\n }\r\n this.textGroup.offsetX(newBox.x - curBox.x);\r\n this.textGroup.offsetY(newBox.y - curBox.y + this.outlineBox.height);\r\n this.dragging = false;\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n }\r\n}\r\n\r\n// ## SuiTextSession\r\n// session for editing plain text\r\nexport class SuiTextSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n scroller: SuiScroller;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n fontFamily: string = '';\r\n fontWeight: string = '';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n editor: SuiTextBlockEditor | null = null;\r\n renderer: SuiRenderState;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiTextSessionParams) {\r\n this.scroller = params.scroller;\r\n this.renderer = params.renderer;\r\n this.scoreText = params.scoreText;\r\n this.text = this.scoreText.text;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.textGroup = params.textGroup;\r\n this.renderer = params.renderer;\r\n\r\n // Create a text group if one was not a startup parameter\r\n if (!this.textGroup) {\r\n this.textGroup = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n // Create a scoreText if one was not a startup parameter, or\r\n // get it from the text group\r\n if (!this.scoreText) {\r\n if (this.textGroup && this.textGroup.textBlocks.length) {\r\n this.scoreText = this.textGroup.textBlocks[0].text;\r\n } else {\r\n const stDef = SmoScoreText.defaults;\r\n stDef.x = this.x;\r\n stDef.y = this.y;\r\n this.scoreText = new SmoScoreText(stDef);\r\n this.textGroup.addScoreText(this.scoreText, SmoTextGroup.relativePositions.RIGHT);\r\n }\r\n }\r\n this.fontFamily = SmoScoreText.familyString(this.scoreText.fontInfo.family);\r\n this.fontWeight = SmoScoreText.weightString(this.scoreText.fontInfo.weight);\r\n this.fontSize = SmoScoreText.fontPointSize(this.scoreText.fontInfo.size);\r\n this.text = this.scoreText.text;\r\n }\r\n\r\n // ### _isRefreshed\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.dirty === false;\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.passState === SuiRenderState.passStates.clean;\r\n }\r\n\r\n _removeScoreText() {\r\n const selector = '#' + this.scoreText.attrs.id;\r\n $(selector).remove();\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n const context = this.renderer.pageMap.getRenderer({ x: this.x, y: this.y });\r\n if (context) {\r\n this.editor = new SuiTextBlockEditor({\r\n x: this.x, y: this.y, scroller: this.scroller,\r\n context: context, text: this.scoreText.text, pageMap: this.renderer.pageMap\r\n });\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this._removeScoreText();\r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n stopSession(): Promise {\r\n if (this.editor) {\r\n this.scoreText.text = this.editor.getText();\r\n this.scoreText.tryParseUnicode(); // convert unicode chars\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(()=> this._isRendered,() => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return false;\r\n }\r\n const rv = await this.editor.evKey(evdata);\r\n if (rv) {\r\n this._removeScoreText();\r\n }\r\n return rv;\r\n }\r\n\r\n handleMouseEvent(ev: any) {\r\n if (this.isRunning && this.editor !== null) {\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n }\r\n}\r\n// ## SuiLyricSession\r\n// Manage editor for lyrics, jupmping from note to note if asked\r\nexport class SuiLyricSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n parser: number;\r\n verse: number;\r\n selector: SmoSelector;\r\n selection: SmoSelection | null;\r\n note: SmoNote | null = null;\r\n originalText: string;\r\n lyric: SmoLyric | null = null;\r\n text: string = '';\r\n editor: SuiLyricEditor | null = null;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n this.score = params.score;\r\n this.renderer = params.renderer;\r\n this.scroller = params.scroller;\r\n this.view = params.view;\r\n this.parser = SmoLyric.parsers.lyric;\r\n this.verse = params.verse;\r\n this.selector = params.selector;\r\n this.selection = SmoSelection.noteFromSelector(this.score, this.selector);\r\n if (this.selection !== null) {\r\n this.note = this.selection.note;\r\n }\r\n this.originalText = '';\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (!this.note) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, SmoLyric.parsers.lyric);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'lyrics');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const lyricD = SmoLyric.defaults;\r\n lyricD.text = '';\r\n lyricD.verse = this.verse;\r\n lyricD.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(lyricD);\r\n }\r\n this.text = this.lyric.text;\r\n this.originalText = this.text;\r\n // this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n\r\n // ### _endLyricCondition\r\n // Lyric editor has stopped running (promise condition)\r\n get _endLyricCondition(): boolean {\r\n return this.editor !== null && this.editor.state !== SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _endLyricCondition\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.renderStateRendered;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.renderStateClean;\r\n }\r\n\r\n get _pendingEditor(): boolean {\r\n return this.state !== SuiTextEditor.States.PENDING_EDITOR;\r\n }\r\n\r\n // ### _hideLyric\r\n // Hide the lyric so you only see the editor.\r\n _hideLyric() {\r\n if (this.lyric !== null && this.lyric.selector) {\r\n $(this.lyric.selector).remove();\r\n }\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.note.logicalBox.y + this.note.logicalBox.height + \r\n SmoScoreText.fontPointSize(this.lyric.fontInfo.size);\r\n this.lyric.skipRender = true;\r\n const lyricRendered = this.lyric.text.length > 0;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n const context = this.view.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiLyricEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (!lyricRendered && this.editor !== null && this.editor.svgText !== null) {\r\n const delta = 2 * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric();\r\n \r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n this._setLyricForNote();\r\n this._startSessionForNote();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n async stopSession() {\r\n if (this.editor && !this._endLyricCondition) {\r\n await this._updateLyricFromEditor();\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(() => this._isRendered, () => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### _advanceSelection\r\n // Based on a skip character, move the editor forward/back one note.\r\n async _advanceSelection(isShift: boolean) {\r\n const nextSelection = isShift ? SmoSelection.lastNoteSelectionFromSelector(this.score, this.selector)\r\n : SmoSelection.nextNoteSelectionFromSelector(this.score, this.selector);\r\n if (nextSelection) {\r\n this.selector = nextSelection.selector;\r\n this.selection = nextSelection;\r\n this.note = nextSelection.note;\r\n this._setLyricForNote();\r\n const conditionArray: any = [];\r\n this.state = SuiTextEditor.States.PENDING_EDITOR;\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._endLyricCondition, null, null, 100));\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._isRefreshed,() => this._startSessionForNote(), null, 100));\r\n await PromiseHelpers.promiseChainThen(conditionArray);\r\n }\r\n }\r\n\r\n // ### advanceSelection\r\n // external interfoace to move to next/last note\r\n async advanceSelection(isShift: boolean) {\r\n if (this.isRunning) {\r\n await this._updateLyricFromEditor();\r\n await this._advanceSelection(isShift);\r\n }\r\n }\r\n\r\n async removeLyric() {\r\n if (this.selection && this.lyric) {\r\n await this.view.removeLyric(this.selection.selector, this.lyric);\r\n this.lyric.skipRender = true;\r\n await this.advanceSelection(false);\r\n }\r\n }\r\n\r\n // ### _updateLyricFromEditor\r\n // The editor is done running, so update the lyric now.\r\n async _updateLyricFromEditor() {\r\n if (this.editor === null || this.lyric === null) {\r\n return;\r\n }\r\n const txt = this.editor.getText();\r\n this.lyric.setText(txt);\r\n this.lyric.skipRender = false;\r\n this.editor.stopEditor();\r\n if (!this.lyric.deleted && this.originalText !== txt && this.selection !== null) {\r\n await this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n }\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.key === '-' || evdata.key === ' ') {\r\n // skip\r\n const back = evdata.shiftKey && evdata.key === ' ';\r\n if (evdata.key === '-' && this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n }\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(back);\r\n } else if (this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n this._hideLyric();\r\n }\r\n return true;\r\n }\r\n get textType(): number {\r\n if (this.isRunning && this.editor !== null) {\r\n return this.editor.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n\r\n set textType(type) {\r\n if (this.editor) {\r\n this.editor.textType = type;\r\n }\r\n }\r\n // ### handleMouseEvent\r\n // Mouse event (send to editor)\r\n handleMouseEvent(ev: any) {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return;\r\n }\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n}\r\n\r\nexport class SuiChordSession extends SuiLyricSession {\r\n editor: SuiLyricEditor | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n super(params);\r\n this.parser = SmoLyric.parsers.chord;\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.code === 'Enter') {\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(evdata.shiftKey);\r\n edited = true;\r\n } else if (this.editor !== null) {\r\n edited = await this.editor.evKey(evdata);\r\n }\r\n this._hideLyric();\r\n return edited;\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (this.note === null) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, this.parser);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'chords');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const ldef = SmoLyric.defaults;\r\n ldef.text = '';\r\n ldef.verse = this.verse;\r\n ldef.parser = this.parser;\r\n ldef.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(ldef);\r\n this.note.addLyric(this.lyric);\r\n }\r\n this.text = this.lyric.text;\r\n }\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null) {\r\n return;\r\n }\r\n if (this.selection === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.selection.measure.svg.logicalBox.y;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n this.selection.measure.svg.logicalBox.y + this.selection.measure.svg.logicalBox.height - 70;\r\n const context = this.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiChordEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (this.editor !== null && this.editor.svgText !== null) {\r\n const delta = (-1) * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric(); \r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, OutlineInfo } from './svgHelpers';\r\nimport { SmoTextGroup, SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiTextEditor } from './textEdit';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoAttrs, SvgBox, getId } from '../../smo/data/common';\r\nimport { SvgPage, SvgPageMap } from './svgPageMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { VexFlow,\r\n chordSubscriptOffset, chordSuperscriptOffset, FontInfo, getVexGlyphFromChordCode, \r\n getChordSymbolMetricsForGlyph, blockMetricsYShift } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n\r\n// From textfont.ts in VF\r\n\r\n/**\r\n * parameters to render text\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineTextParams {\r\n fontFamily: string,\r\n fontWeight: string,\r\n fontSize: number,\r\n fontStyle: string,\r\n startX: number,\r\n startY: number,\r\n scroller: SuiScroller,\r\n purpose: string,\r\n context: SvgPage,\r\n pageMap: SvgPageMap\r\n}\r\n/**\r\n * metrics for a single line of text. A textGroup can be composed\r\n * of multiple inline blocks.\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineBlock {\r\n symbolType: number,\r\n textType: number,\r\n highlighted: boolean,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n scale: number,\r\n metrics: any,\r\n glyph: any,\r\n glyphCode: string,\r\n text: string\r\n}\r\nexport interface SuiInlineArtifact {\r\n block: SuiInlineBlock,\r\n box: SvgBox,\r\n index: number\r\n}\r\n// ## textRender.js\r\n// Classes responsible for formatting and rendering text in SVG space.\r\n\r\n/**\r\n * Inline text is a block of SVG text with the same font. Each block can\r\n * contain either text or an svg (vex) glyph. Each block in the text has its own\r\n * metrics so we can support inline svg text editors (cursor).\r\n * @category SuiRender\r\n */\r\nexport class SuiInlineText {\r\n static get textTypes() {\r\n return { normal: 0, superScript: 1, subScript: 2 };\r\n }\r\n static get symbolTypes() {\r\n return {\r\n GLYPH: 1,\r\n TEXT: 2,\r\n LINE: 3\r\n };\r\n }\r\n static get textPurposes(): Record {\r\n return {render: 'sui-inline-render', edit: 'sui-inline-edit' };\r\n }\r\n\r\n // ### textTypeTransitions\r\n // Given a current text type and a type change request, what is the result\r\n // text type? This truth table tells you.\r\n static get textTypeTransitions(): number[][] {\r\n return [\r\n [1, 1, 0],\r\n [1, 0, 1],\r\n [1, 2, 2],\r\n [2, 2, 0],\r\n [2, 0, 2],\r\n [2, 1, 1],\r\n [0, 1, 1],\r\n [0, 0, 0],\r\n [0, 2, 2]\r\n ];\r\n }\r\n\r\n static getTextTypeResult(oldType: number, newType: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[1] === newType) {\r\n rv = tt[2];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n static getTextTypeTransition(oldType: number, result: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[2] === result) {\r\n rv = tt[1];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n get spacing(): number {\r\n return VF.ChordSymbol.spacingBetweenBlocks;\r\n }\r\n\r\n static get defaults(): SuiInlineTextParams {\r\n return JSON.parse(JSON.stringify({\r\n blocks: [],\r\n fontFamily: 'Merriweather',\r\n fontSize: 14,\r\n startX: 100,\r\n startY: 100,\r\n fontWeight: 500,\r\n fontStyle: 'normal',\r\n scale: 1,\r\n activeBlock: -1,\r\n artifacts: [],\r\n purpose: 'render',\r\n classes: '',\r\n updatedMetrics: false\r\n }));\r\n }\r\n fontFamily: string;\r\n fontWeight: string;\r\n fontStyle: string;\r\n fontSize: number;\r\n width: number = -1;\r\n height: number = -1;\r\n purpose: string;\r\n\r\n attrs: SmoAttrs;\r\n textFont: TextFormatter;\r\n startX: number;\r\n startY: number;\r\n blocks: SuiInlineBlock[] = [];\r\n updatedMetrics: boolean = false;\r\n context: SvgPage;\r\n pageMap: SvgPageMap;\r\n scroller: SuiScroller;\r\n artifacts: SuiInlineArtifact[] = [];\r\n logicalBox: SvgBox = SvgBox.default;\r\n element: SVGSVGElement | null = null;\r\n\r\n updateFontInfo(): TextFormatter {\r\n const tf = TextFormatter.create({\r\n family: this.fontFamily,\r\n weight: this.fontWeight,\r\n size: this.fontSize,\r\n style: this.fontStyle\r\n });\r\n return tf;\r\n }\r\n // ### constructor just creates an empty svg\r\n constructor(params: SuiInlineTextParams) {\r\n this.fontFamily = params.fontFamily;\r\n this.fontWeight = params.fontWeight;\r\n this.fontStyle = params.fontStyle;\r\n this.fontSize = params.fontSize;\r\n this.textFont = this.updateFontInfo();\r\n this.scroller = params.scroller;\r\n this.startX = params.startX;\r\n this.startY = params.startY;\r\n this.purpose = params.purpose;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SuiInlineText'\r\n };\r\n this.context = params.context;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static fromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiInlineText {\r\n \r\n const params: SuiInlineTextParams = {\r\n fontFamily: SmoScoreText.familyString(scoreText.fontInfo.family),\r\n fontWeight: SmoScoreText.weightString(scoreText.fontInfo.weight),\r\n fontStyle: scoreText.fontInfo.style ?? 'normal',\r\n startX: scoreText.x, startY: scoreText.y,\r\n scroller,\r\n purpose: SuiInlineText.textPurposes.render,\r\n fontSize: SmoScoreText.fontPointSize(scoreText.fontInfo.size), context,\r\n pageMap\r\n };\r\n const rv = new SuiInlineText(params);\r\n rv.attrs.id = scoreText.attrs.id;\r\n const blockParams = SuiInlineText.blockDefaults;\r\n blockParams.text = scoreText.text;\r\n rv.addTextBlockAt(0, blockParams);\r\n return rv;\r\n }\r\n\r\n static get blockDefaults(): SuiInlineBlock {\r\n return JSON.parse(JSON.stringify({\r\n symbolType: SuiInlineText.symbolTypes.TEXT,\r\n textType: SuiInlineText.textTypes.normal,\r\n highlighted: false,\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n scale: 1.0,\r\n glyph: {},\r\n text: '',\r\n glyphCode: ''\r\n }));\r\n }\r\n\r\n // ### pointsToPixels\r\n // The font size is specified in points, convert to 'pixels' in the svg space\r\n get pointsToPixels(): number {\r\n return this.textFont.fontSizeInPixels;\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.startX += offset;\r\n this.blocks.forEach((block) => {\r\n block.x += offset;\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.startY += offset;\r\n this.blocks.forEach((block) => {\r\n block.y += offset;\r\n });\r\n }\r\n maxFontHeight(scale: number): number {\r\n return this.textFont.maxHeight * scale;\r\n }\r\n\r\n _glyphOffset(block: SuiInlineBlock): number {\r\n return blockMetricsYShift(block.glyph.getMetrics()) * this.pointsToPixels * block.scale;\r\n }\r\n\r\n /**\r\n * Based on the font metrics, compute the width of the strings and glyph that make up\r\n * this block\r\n */\r\n _calculateBlockIndex() {\r\n var curX = this.startX;\r\n var maxH = 0;\r\n let superXAlign = 0;\r\n let superXWidth = 0;\r\n let prevBlock: SuiInlineBlock | null = null;\r\n let i = 0;\r\n this.textFont.setFontSize(this.fontSize);\r\n this.blocks.forEach((block) => {\r\n // super/subscript\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n\r\n block.width = 0;\r\n block.height = 0;\r\n\r\n // coeff for sub/super script\r\n const subAdj = (sp || sub) ? VF.ChordSymbol.superSubRatio : 1.0;\r\n // offset for super/sub\r\n let subOffset = 0;\r\n if (sp) {\r\n subOffset = chordSuperscriptOffset() * this.pointsToPixels;\r\n } else if (sub) {\r\n subOffset = chordSubscriptOffset() * this.pointsToPixels;\r\n } else {\r\n subOffset = 0;\r\n }\r\n block.x = curX;\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n for (i = 0; i < block.text.length; ++i) {\r\n const ch = block.text[i];\r\n const glyph = this.textFont.getGlyphMetrics(ch);\r\n block.width += ((glyph.advanceWidth ?? 0) / this.textFont.getResolution()) * this.pointsToPixels * block.scale * subAdj;\r\n const blockHeight = (glyph.ha / this.textFont.getResolution()) * this.pointsToPixels * block.scale;\r\n block.height = block.height < blockHeight ? blockHeight : block.height;\r\n block.y = this.startY + (subOffset * block.scale);\r\n }\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n // TODO: vexflow broke leftSideBearing and advanceWidth\r\n // vex5\r\n /*\r\n block.width = (block.glyph.getMetrics().width) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.getMetrics().ha) * this.pointsToPixels * block.scale;\r\n block.x += block.glyph.getMetrics().xMin * this.pointsToPixels * block.scale;\r\n */\r\n block.width = (block.metrics.advanceWidth / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.metrics.ha / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale; \r\n block.x += block.metrics.leftSideBearing / VF.ChordSymbol.engravingFontResolution * this.pointsToPixels * block.scale;\r\n block.y = this.startY + this._glyphOffset(block) + subOffset;\r\n }\r\n // Line subscript up with super if the follow each other\r\n if (sp) {\r\n if (superXAlign === 0) {\r\n superXAlign = block.x;\r\n }\r\n } else if (sub) {\r\n if (superXAlign > 0 && prevBlock !== null) {\r\n block.x = superXAlign;\r\n superXWidth = prevBlock.x + prevBlock.width;\r\n curX = superXAlign;\r\n superXAlign = 0;\r\n } else {\r\n if (superXWidth > 0 && superXWidth < block.width + block.x) {\r\n superXWidth = block.width + block.x;\r\n }\r\n }\r\n } else if (superXWidth > 0) {\r\n block.x = superXWidth + VF.ChordSymbol.spacingBetweenBlocks;\r\n superXWidth = 0;\r\n } else {\r\n superXAlign = 0;\r\n }\r\n curX += block.width;\r\n maxH = block.height > maxH ? maxH : block.height;\r\n prevBlock = block;\r\n });\r\n this.width = curX - this.startX;\r\n this.height = maxH;\r\n this.updatedMetrics = true;\r\n }\r\n\r\n // ### getLogicalBox\r\n // return the calculated svg metrics. In SMO parlance the\r\n // logical box is in SVG space, 'renderedBox' is in client space.\r\n getLogicalBox(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const adjBox = (box: SvgBox) => {\r\n const nbox = SvgHelpers.smoBox(box);\r\n nbox.y = nbox.y - nbox.height;\r\n return nbox;\r\n };\r\n this.blocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = SvgHelpers.smoBox(adjBox(block));\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, adjBox(block));\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### renderCursorAt\r\n // When we are using textLayout to render editor, create a cursor that adjusts it's size\r\n renderCursorAt(position: number, textType: number) {\r\n let adjH = 0;\r\n let adjY = 0;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const group = this.context.getContext().openGroup();\r\n group.id = 'inlineCursor';\r\n const h = this.fontSize;\r\n if (this.blocks.length <= position || position < 0) {\r\n const x = this.startX - this.context.box.x;\r\n const y = this.startY - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y - h, h);\r\n this.context.getContext().closeGroup();\r\n return;\r\n }\r\n const block = this.blocks[position];\r\n adjH = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? h / 2 : h;\r\n // For glyph, add y adj back to the cursor since it's not a glyph\r\n adjY = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? block.y - this._glyphOffset(block) :\r\n block.y;\r\n if (typeof (textType) === 'number' && textType !== SuiInlineText.textTypes.normal) {\r\n const ratio = textType !== SuiInlineText.textTypes.normal ? VF.ChordSymbol.superSubRatio : 1.0;\r\n adjH = adjH * ratio;\r\n if (textType !== block.textType) {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n adjY -= h / 2;\r\n } else {\r\n adjY += h / 2;\r\n }\r\n }\r\n }\r\n const x = block.x + block.width - this.context.box.x;\r\n const y = adjY - (adjH * block.scale) - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y, adjH * block.scale);\r\n this.context.getContext().closeGroup();\r\n }\r\n removeCursor() {\r\n $('svg #inlineCursor').remove();\r\n }\r\n unrender() {\r\n this.element?.remove();\r\n this.element = null;\r\n }\r\n getIntersectingBlocks(box: SvgBox): SuiInlineArtifact[] {\r\n if (!this.artifacts) {\r\n return [];\r\n }\r\n return SvgHelpers.findIntersectingArtifact(box, this.artifacts) as SuiInlineArtifact[];\r\n }\r\n _addBlockAt(position: number, block: SuiInlineBlock) {\r\n if (position >= this.blocks.length) {\r\n this.blocks.push(block);\r\n } else {\r\n this.blocks.splice(position, 0, block);\r\n }\r\n }\r\n removeBlockAt(position: number) {\r\n this.blocks.splice(position, 1);\r\n this.updatedMetrics = false;\r\n }\r\n\r\n // ### addTextBlockAt\r\n // Add a text block to the line of text.\r\n // params must contain at least:\r\n // {text:'xxx'}\r\n addTextBlockAt(position: number, params: SuiInlineBlock) {\r\n const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1;\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n _getGlyphBlock(params: SuiInlineBlock): SuiInlineBlock {\r\n // vex 5\r\n /* const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n params.text = params.glyphCode;\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1; */\r\n const block = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n block.symbolType = SuiInlineText.symbolTypes.GLYPH;\r\n\r\n block.glyphCode = params.glyphCode;\r\n const vexCode = getVexGlyphFromChordCode(block.glyphCode);\r\n block.glyph = new VF.Glyph(vexCode, this.fontSize);\r\n // Vex 4 feature, vex 5 elimitated metrics here\r\n block.metrics = getChordSymbolMetricsForGlyph(vexCode);\r\n block.scale = (params.textType && params.textType !== SuiInlineText.textTypes.normal) ?\r\n 2 * VF.ChordSymbol.superSubRatio : 2;\r\n\r\n block.textType = params.textType ? params.textType : SuiInlineText.textTypes.normal;\r\n\r\n block.glyph.scale = block.glyph.scale * block.scale;\r\n return block;\r\n }\r\n // ### addGlyphBlockAt\r\n // Add a glyph block to the line of text. Params must include:\r\n // {glyphCode:'csymDiminished'}\r\n addGlyphBlockAt(position: number, params: SuiInlineBlock) {\r\n const block = this._getGlyphBlock(params);\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n isSuperscript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.superScript;\r\n }\r\n isSubcript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.subScript;\r\n }\r\n getHighlight(block: SuiInlineBlock): boolean {\r\n return block.highlighted;\r\n }\r\n setHighlight(block: SuiInlineBlock, value: boolean) {\r\n block.highlighted = value;\r\n }\r\n\r\n rescale(scale: number) {\r\n scale = (scale * this.fontSize < 6) ? 6 / this.fontSize : scale;\r\n scale = (scale * this.fontSize > 72) ? 72 / this.fontSize : scale;\r\n this.blocks.forEach((block) => {\r\n block.scale = scale;\r\n });\r\n this.updatedMetrics = false;\r\n }\r\n\r\n render() {\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n\r\n this.context.getContext().setFont({\r\n family: this.fontFamily, size: this.fontSize, weight: this.fontWeight, style: this.fontStyle\r\n });\r\n const group = this.context.getContext().openGroup();\r\n this.element = group;\r\n const mmClass = 'suiInlineText';\r\n let ix = 0;\r\n group.classList.add('vf-' + this.attrs.id);\r\n group.classList.add(this.attrs.id);\r\n group.classList.add(mmClass);\r\n group.classList.add(this.purpose);\r\n group.id = this.attrs.id;\r\n this.artifacts = [];\r\n\r\n this.blocks.forEach((block) => {\r\n var bg = this.context.getContext().openGroup();\r\n bg.classList.add('textblock-' + this.attrs.id + ix);\r\n this._drawBlock(block);\r\n this.context.getContext().closeGroup();\r\n const artifact: SuiInlineArtifact = { block, box: SvgBox.default, index: 0 };\r\n artifact.box = this.context.offsetBbox(bg);\r\n artifact.index = ix;\r\n this.artifacts.push(artifact);\r\n ix += 1;\r\n });\r\n this.context.getContext().closeGroup();\r\n this.logicalBox = this.context.offsetBbox(group);\r\n }\r\n\r\n _drawBlock(block: SuiInlineBlock) {\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n const highlight = this.getHighlight(block);\r\n const y = block.y - this.context.box.y; // relative y into page\r\n\r\n if (highlight) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFillStyle('#999');\r\n }\r\n\r\n // This is how svgcontext expects to get 'style'\r\n const weight = this.fontWeight;\r\n const style = this.fontStyle;\r\n const family = this.fontFamily;\r\n if (sp || sub) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFont({\r\n family, size: this.fontSize * VF.ChordSymbol.superSubRatio * block.scale, weight, style\r\n });\r\n } else {\r\n this.context.getContext().setFont({ family, size: this.fontSize * block.scale, weight, style });\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n this.context.getContext().fillText(block.text, block.x, y);\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n block.glyph.render(this.context.getContext(), block.x, y);\r\n }\r\n if (sp || sub) {\r\n this.context.getContext().restore();\r\n }\r\n if (highlight) {\r\n this.context.getContext().restore();\r\n }\r\n }\r\n\r\n getText(): string {\r\n let rv = '';\r\n this.blocks.forEach((block) => {\r\n rv += block.text;\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SuiTextBlockBlock {\r\n text: SuiInlineText;\r\n position: number;\r\n activeText: boolean;\r\n}\r\nexport interface SuiTextBlockParams {\r\n blocks: SuiTextBlockBlock[];\r\n scroller: SuiScroller;\r\n spacing: number;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n justification: number;\r\n}\r\nexport interface SuiTextBlockJusityCalc {\r\n blocks: SuiInlineText[], minx: number, maxx: number, width: number\r\n}\r\n// ## SuiTextBlock\r\n// A text block is a set of inline blocks that can be aligned/arranged in different ways.\r\nexport class SuiTextBlock {\r\n static get relativePosition() {\r\n return {\r\n ABOVE: SmoTextGroup.relativePositions.ABOVE,\r\n BELOW: SmoTextGroup.relativePositions.BELOW,\r\n LEFT: SmoTextGroup.relativePositions.LEFT,\r\n RIGHT: SmoTextGroup.relativePositions.RIGHT\r\n };\r\n }\r\n inlineBlocks: SuiTextBlockBlock[] = [];\r\n scroller: SuiScroller;\r\n spacing: number = 0;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n currentBlockIndex: number = 0;\r\n justification: number;\r\n outlineRect: OutlineInfo | null = null;\r\n currentBlock: SuiTextBlockBlock | null = null;\r\n logicalBox: SvgBox = SvgBox.default;\r\n constructor(params: SuiTextBlockParams) {\r\n this.inlineBlocks = [];\r\n this.scroller = params.scroller;\r\n this.spacing = params.spacing;\r\n this.context = params.context;\r\n this.skipRender = false; // used when editing the text\r\n if (params.blocks.length < 1) {\r\n const inlineParams = SuiInlineText.defaults;\r\n inlineParams.scroller = this.scroller;\r\n inlineParams.context = this.context;\r\n const inst = new SuiInlineText(inlineParams);\r\n params.blocks = [{ text: inst, position: SmoTextGroup.relativePositions.RIGHT, activeText: true }];\r\n }\r\n params.blocks.forEach((block) => {\r\n if (!this.currentBlock) {\r\n this.currentBlock = block;\r\n this.currentBlockIndex = 0;\r\n }\r\n this.inlineBlocks.push(block);\r\n });\r\n this.justification = params.justification ? params.justification :\r\n SmoTextGroup.justifications.LEFT;\r\n }\r\n render() {\r\n this.unrender(); \r\n this.inlineBlocks.forEach((block) => {\r\n block.text.render();\r\n if (block.activeText) {\r\n this._outlineBox(this.context, block.text.logicalBox);\r\n }\r\n if (!this.logicalBox || this.logicalBox.width < 1) {\r\n this.logicalBox = SvgHelpers.smoBox(block.text.logicalBox);\r\n } else {\r\n this.logicalBox = SvgHelpers.unionRect(this.logicalBox, block.text.logicalBox);\r\n }\r\n });\r\n }\r\n _outlineBox(context: any, box: SvgBox) {\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context, box, classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = box;\r\n this.outlineRect.context = context;\r\n this.outlineRect.scroll = this.scroller.scrollState;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartX(offset);\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartY(offset);\r\n });\r\n }\r\n\r\n rescale(scale: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.rescale(scale);\r\n });\r\n }\r\n\r\n get x(): number {\r\n return this.getLogicalBox().x;\r\n }\r\n get y(): number {\r\n return this.getLogicalBox().y;\r\n }\r\n\r\n maxFontHeight(scale: number): number {\r\n let rv = 0;\r\n this.inlineBlocks.forEach((block) => {\r\n const blockHeight = block.text.maxFontHeight(scale);\r\n rv = blockHeight > rv ? blockHeight : rv;\r\n });\r\n return rv;\r\n }\r\n static blockFromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, position: number, scroller: SuiScroller): SuiTextBlockBlock {\r\n var inlineText = SuiInlineText.fromScoreText(scoreText, context, pageMap, scroller);\r\n return { text: inlineText, position, activeText: true };\r\n }\r\n\r\n getLogicalBox(): SvgBox {\r\n return this._calculateBoundingClientRect();\r\n }\r\n _calculateBoundingClientRect(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n this.inlineBlocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = block.text.getLogicalBox();\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, block.text.getLogicalBox());\r\n }\r\n });\r\n rv.y = rv.y - rv.height;\r\n return rv;\r\n }\r\n static fromTextGroup(tg: SmoTextGroup, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiTextBlock {\r\n const blocks: SuiTextBlockBlock[] = [];\r\n\r\n // Create an inline block for each ScoreText\r\n tg.textBlocks.forEach((stBlock) => {\r\n const st = stBlock.text;\r\n const newText = SuiTextBlock.blockFromScoreText(st, context, pageMap, stBlock.position, scroller);\r\n newText.activeText = stBlock.activeText;\r\n blocks.push(newText);\r\n });\r\n const rv = new SuiTextBlock({\r\n blocks, justification: tg.justification, spacing: tg.spacing, context, scroller,\r\n skipRender: false\r\n });\r\n rv._justify();\r\n return rv;\r\n }\r\n unrender() {\r\n this.inlineBlocks.forEach((block) => {\r\n if (block.text.element) {\r\n block.text.element.remove();\r\n block.text.element = null;\r\n }\r\n });\r\n }\r\n // ### _justify\r\n // justify the blocks according to the group justify policy and the\r\n // relative position of the blocks\r\n _justify() {\r\n let hIx = 0;\r\n let left = 0;\r\n let minx = 0;\r\n let maxx = 0;\r\n let lvl = 0;\r\n let maxwidth = 0;\r\n let runningWidth = 0;\r\n let runningHeight = 0;\r\n if (!this.inlineBlocks.length) {\r\n return;\r\n }\r\n minx = this.inlineBlocks[0].text.startX;\r\n // We justify relative to first block x/y.\r\n const initialX = this.inlineBlocks[0].text.startX;\r\n const initialY = this.inlineBlocks[0].text.startY;\r\n const vert: Record = {};\r\n this.inlineBlocks.forEach((inlineBlock) => {\r\n const block = inlineBlock.text;\r\n const blockBox = block.getLogicalBox();\r\n // If this is a horizontal positioning, reset to first blokc position\r\n //\r\n if (hIx > 0) {\r\n block.startX = initialX;\r\n block.startY = initialY;\r\n }\r\n minx = block.startX < minx ? block.startX : minx;\r\n maxx = (block.startX + blockBox.width) > maxx ? block.startX + blockBox.width : maxx;\r\n\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.ABOVE ? lvl + 1 : lvl;\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.BELOW ? lvl - 1 : lvl;\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.RIGHT) {\r\n block.startX += runningWidth;\r\n if (hIx > 0) {\r\n block.startX += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.LEFT) {\r\n if (hIx > 0) {\r\n block.startX = minx - blockBox.width;\r\n minx = block.startX;\r\n block.startX -= this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.BELOW) {\r\n block.startY += runningHeight;\r\n if (hIx > 0) {\r\n block.startY += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.ABOVE) {\r\n block.startY -= runningHeight;\r\n if(hIx > 0) {\r\n block.startY -= this.spacing;\r\n }\r\n }\r\n if (!vert[lvl]) {\r\n vert[lvl] = {\r\n blocks: [block], minx: block.startX, maxx: block.startX + blockBox.width,\r\n width: blockBox.width\r\n };\r\n maxwidth = vert[lvl].width;\r\n vert[lvl].blocks = [block];\r\n vert[lvl].minx = block.startX;\r\n vert[lvl].maxx = block.startX + blockBox.width;\r\n maxwidth = vert[lvl].width = blockBox.width;\r\n } else {\r\n vert[lvl].blocks.push(block);\r\n vert[lvl].minx = vert[lvl].minx < block.startX ? vert[lvl].minx : block.startX;\r\n vert[lvl].maxx = vert[lvl].maxx > (block.startX + blockBox.width) ?\r\n vert[lvl].maxx : (block.startX + blockBox.width);\r\n vert[lvl].width += blockBox.width;\r\n maxwidth = maxwidth > vert[lvl].width ? maxwidth : vert[lvl].width;\r\n }\r\n runningWidth += blockBox.width;\r\n runningHeight += blockBox.height;\r\n hIx += 1;\r\n block.updatedMetrics = false;\r\n });\r\n\r\n const levels = Object.keys(vert);\r\n\r\n // Horizontal justify the vertical blocks\r\n levels.forEach((level) => {\r\n const vobj = vert[level];\r\n if (this.justification === SmoTextGroup.justifications.LEFT) {\r\n left = minx - vobj.minx;\r\n } else if (this.justification === SmoTextGroup.justifications.RIGHT) {\r\n left = maxx - vobj.maxx;\r\n } else {\r\n left = (maxwidth / 2) - (vobj.width / 2);\r\n left += minx - vobj.minx;\r\n }\r\n vobj.blocks.forEach((block) => {\r\n block.offsetStartX(left);\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMapper, SuiRendererBase } from './mapper';\r\nimport { SvgHelpers, StrokeInfo, OutlineInfo } from './svgHelpers';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from '../../smo/xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SuiScroller } from './scroller';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * SuiTracker\r\n A tracker maps the UI elements to the logical elements ,and allows the user to\r\n move through the score and make selections, for navigation and editing.\r\n */\r\nexport class SuiTracker extends SuiMapper {\r\n idleTimer: number = Date.now();\r\n musicCursorGlyph: SVGSVGElement | null = null;\r\n static get strokes(): Record {\r\n return {\r\n suggestion: {\r\n strokeName: 'suggestion',\r\n stroke: '#fc9',\r\n strokeWidth: 3,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n selection: {\r\n strokeName: 'selection',\r\n stroke: '#99d',\r\n strokeWidth: 3,\r\n strokeDasharray: 2,\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n staffModifier: {\r\n strokeName: 'staffModifier',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }, pitchSelection: {\r\n strokeName: 'pitchSelection',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }\r\n\r\n };\r\n }\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller, pasteBuffer: PasteBuffer) {\r\n super(renderer, scroller, pasteBuffer);\r\n }\r\n // ### renderElement\r\n // the element the score is rendered on\r\n get renderElement(): Element {\r\n return this.renderer.renderElement;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this.renderer.score;\r\n }\r\n\r\n getIdleTime(): number {\r\n return this.idleTimer;\r\n }\r\n\r\n getSelectedModifier() {\r\n if (this.modifierSelections.length) {\r\n return this.modifierSelections[0];\r\n }\r\n return null;\r\n }\r\n\r\n getSelectedModifiers() {\r\n return this.modifierSelections;\r\n }\r\n\r\n static serializeEvent(evKey: KeyEvent | null): any {\r\n if (!evKey) {\r\n return [];\r\n }\r\n const rv = {};\r\n smoSerialize.serializedMerge(['type', 'shiftKey', 'ctrlKey', 'altKey', 'key', 'keyCode'], evKey, rv);\r\n return rv;\r\n }\r\n\r\n advanceModifierSelection(score: SmoScore, keyEv: KeyEvent | null) {\r\n if (!keyEv) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const offset = keyEv.key === 'ArrowLeft' ? -1 : 1;\r\n this.modifierIndex = this.modifierIndex + offset;\r\n this.modifierIndex = (this.modifierIndex === -2 && this.localModifiers.length) ?\r\n this.localModifiers.length - 1 : this.modifierIndex;\r\n if (this.modifierIndex >= this.localModifiers.length || this.modifierIndex < 0) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [];\r\n return;\r\n }\r\n const local: ModifierTab = this.localModifiers[this.modifierIndex];\r\n const box: SvgBox = SvgHelpers.smoBox(local.box) as SvgBox;\r\n this.modifierSelections = [{ index: 0, box, modifier: local.modifier, selection: local.selection }];\r\n this._highlightModifier();\r\n }\r\n\r\n static stringifyBox(box: SvgBox): string {\r\n return '{x:' + box.x + ',y:' + box.y + ',width:' + box.width + ',height:' + box.height + '}';\r\n }\r\n\r\n // ### _getOffsetSelection\r\n // Get the selector that is the offset of the first existing selection\r\n _getOffsetSelection(offset: number): SmoSelector {\r\n if (!this.score) {\r\n return SmoSelector.default;\r\n }\r\n let testSelection = this.getExtremeSelection(Math.sign(offset));\r\n const scopyTick = JSON.parse(JSON.stringify(testSelection.selector));\r\n const scopyMeasure = JSON.parse(JSON.stringify(testSelection.selector));\r\n scopyTick.tick += offset;\r\n scopyMeasure.measure += offset;\r\n const targetMeasure = SmoSelection.measureSelection(this.score, testSelection.selector.staff,\r\n scopyMeasure.measure);\r\n if (targetMeasure && targetMeasure.measure && targetMeasure.measure.voices.length <= scopyMeasure.voice) {\r\n scopyMeasure.voice = 0;\r\n }\r\n if (targetMeasure && targetMeasure.measure) {\r\n scopyMeasure.tick = (offset < 0) ? targetMeasure.measure.voices[scopyMeasure.voice].notes.length - 1 : 0;\r\n }\r\n\r\n if (testSelection.measure.voices.length > scopyTick.voice &&\r\n testSelection.measure.voices[scopyTick.voice].notes.length > scopyTick.tick && scopyTick.tick >= 0) {\r\n if (testSelection.selector.voice !== testSelection.measure.getActiveVoice()) {\r\n scopyTick.voice = testSelection.measure.getActiveVoice();\r\n testSelection = this._getClosestTick(scopyTick);\r\n return testSelection.selector;\r\n }\r\n return scopyTick;\r\n } else if (targetMeasure &&\r\n scopyMeasure.measure < testSelection.staff.measures.length && scopyMeasure.measure >= 0) {\r\n return scopyMeasure;\r\n }\r\n return testSelection.selector;\r\n }\r\n\r\n getSelectedGraceNotes(): ModifierTab[] {\r\n if (!this.modifierSelections.length) {\r\n return [];\r\n }\r\n const ff = this.modifierSelections.filter((mm) =>\r\n mm.modifier?.attrs?.type === 'SmoGraceNote'\r\n );\r\n return ff;\r\n }\r\n\r\n isGraceNoteSelected(): boolean {\r\n if (this.modifierSelections.length) {\r\n const ff = this.modifierSelections.findIndex((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n return ff >= 0;\r\n }\r\n return false;\r\n }\r\n\r\n _growGraceNoteSelections(offset: number) {\r\n this.idleTimer = Date.now();\r\n const far = this.modifierSelections.filter((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n if (!far.length) {\r\n return;\r\n }\r\n const ix = (offset < 0) ? 0 : far.length - 1;\r\n const sel: ModifierTab = far[ix] as ModifierTab;\r\n const left = this.localModifiers.filter((mt) =>\r\n mt.modifier?.attrs?.type === 'SmoGraceNote' && sel.selection && mt.selection &&\r\n SmoSelector.sameNote(mt.selection.selector, sel.selection.selector)\r\n );\r\n if (ix + offset < 0 || ix + offset >= left.length) {\r\n return;\r\n }\r\n const leftSel = left[ix + offset];\r\n if (!leftSel) {\r\n console.warn('bad selector in _growGraceNoteSelections');\r\n }\r\n leftSel.box = leftSel.box ?? SvgBox.default;\r\n this.modifierSelections.push(leftSel);\r\n this._highlightModifier();\r\n }\r\n get autoPlay(): boolean {\r\n return this.renderer.score ? this.renderer.score.preferences.autoPlay : false;\r\n }\r\n\r\n growSelectionRight() {\r\n this._growSelectionRight(false);\r\n }\r\n _growSelectionRight(skipPlay: boolean): number {\r\n this.idleTimer = Date.now();\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(1);\r\n return 0;\r\n }\r\n const nselect = this._getOffsetSelection(1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n if (!this.mapping && this.autoPlay && skipPlay === false && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.selections.push(artifact);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n moveHome(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const mm = ls.measures[0];\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: 0, voice: mm.getActiveVoice(), tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else {\r\n this.selections = [homeSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (homeSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n const lm = ls.measures.find((mm) =>\r\n mm.svg.lineIndex === system && mm.measureNumber.systemIndex === 0);\r\n const mm = lm as SmoMeasure;\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: mm.measureNumber.measureIndex, voice: mm.getActiveVoice(),\r\n tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else if (homeSel?.measure?.svg?.logicalBox) {\r\n this.selections = [homeSel];\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n }\r\n }\r\n moveEnd(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const lm = ls.measures[ls.measures.length - 1];\r\n const voiceIx = lm.getActiveVoice();\r\n const voice = lm.voices[voiceIx];\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: ls.measures.length - 1, voice: voiceIx, tick: voice.notes.length - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n // find the largest measure index on this staff in this system\r\n const measures = ls.measures.filter((mm) =>\r\n mm.svg.lineIndex === system);\r\n const lm = measures.reduce((a, b) =>\r\n b.measureNumber.measureIndex > a.measureNumber.measureIndex ? b : a);\r\n const ticks = lm.voices[lm.getActiveVoice()].notes.length;\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: lm.measureNumber.measureIndex, voice: lm.getActiveVoice(), tick: ticks - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n }\r\n }\r\n growSelectionRightMeasure() {\r\n let toSelect = 0;\r\n const rightmost = this.getExtremeSelection(1);\r\n const ticksLeft = rightmost.measure.voices[rightmost.measure.activeVoice]\r\n .notes.length - rightmost.selector.tick;\r\n if (ticksLeft === 0) {\r\n if (rightmost.selector.measure < rightmost.staff.measures.length) {\r\n const mix = rightmost.selector.measure + 1;\r\n rightmost.staff.measures[mix].setActiveVoice(rightmost.selector.voice);\r\n toSelect = rightmost.staff.measures[mix]\r\n .voices[rightmost.staff.measures[mix].activeVoice].notes.length;\r\n }\r\n } else {\r\n toSelect = ticksLeft;\r\n }\r\n while (toSelect > 0) {\r\n this._growSelectionRight(true);\r\n toSelect -= 1;\r\n }\r\n }\r\n\r\n growSelectionLeft(): number {\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(-1);\r\n return 0;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselect = this._getOffsetSelection(-1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n artifact.measure.setActiveVoice(nselect.voice);\r\n this.selections.push(artifact);\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n\r\n // if we are being moved right programmatically, avoid playing the selected note.\r\n moveSelectionRight(score: SmoScore, evKey: KeyEvent | null, skipPlay: boolean) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n // const original = JSON.parse(JSON.stringify(this.getExtremeSelection(-1).selector));\r\n const nselect = this._getOffsetSelection(1);\r\n // skip any measures that are not displayed due to rest or repetition\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure); \r\n if (mselect?.measure.svg.multimeasureLength) {\r\n nselect.measure += mselect?.measure.svg.multimeasureLength;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n }\r\n this._replaceSelection(nselect, skipPlay);\r\n }\r\n\r\n moveSelectionLeft() {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n const nselect = this._getOffsetSelection(-1);\r\n // Skip multimeasure rests in parts\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure);\r\n while (nselect.measure > 0 && mselect && (mselect.measure.svg.hideMultimeasure || mselect.measure.svg.multimeasureLength > 0)) {\r\n nselect.measure -= 1;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n } \r\n this._replaceSelection(nselect, false);\r\n }\r\n moveSelectionLeftMeasure() {\r\n this._moveSelectionMeasure(-1);\r\n }\r\n moveSelectionRightMeasure() {\r\n this._moveSelectionMeasure(1);\r\n }\r\n _moveSelectionMeasure(offset: number) {\r\n const selection = this.getExtremeSelection(Math.sign(offset));\r\n this.idleTimer = Date.now();\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.measure += offset;\r\n selector.tick = 0;\r\n const selObj = this._getClosestTick(selector);\r\n if (selObj) {\r\n this.selections = [selObj];\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n _moveStaffOffset(offset: number) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n nselector.staff = this.score.incrementActiveStaff(offset);\r\n \r\n this.selections = [this._getClosestTick(nselector)];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n removePitchSelection() {\r\n if (this.outlines['pitchSelection']) {\r\n if (this.outlines['pitchSelection'].element) {\r\n this.outlines['pitchSelection'].element.remove();\r\n }\r\n delete this.outlines['pitchSelection'];\r\n }\r\n }\r\n\r\n // ### _moveSelectionPitch\r\n // Suggest a specific pitch in a chord, so we can transpose just the one note vs. the whole chord.\r\n _moveSelectionPitch(index: number) {\r\n this.idleTimer = Date.now();\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n const sel = this.selections[0];\r\n const note = sel.note as SmoNote;\r\n if (note.pitches.length < 2) {\r\n this.pitchIndex = -1;\r\n this.removePitchSelection();\r\n return;\r\n }\r\n this.pitchIndex = (this.pitchIndex + index) % note.pitches.length;\r\n sel.selector.pitches = [];\r\n sel.selector.pitches.push(this.pitchIndex);\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n }\r\n moveSelectionPitchUp() {\r\n this._moveSelectionPitch(1);\r\n }\r\n moveSelectionPitchDown() {\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n this._moveSelectionPitch((this.selections[0].note as SmoNote).pitches.length - 1);\r\n }\r\n\r\n moveSelectionUp() {\r\n this._moveStaffOffset(-1);\r\n }\r\n moveSelectionDown() {\r\n this._moveStaffOffset(1);\r\n }\r\n\r\n containsArtifact(): boolean {\r\n return this.selections.length > 0;\r\n }\r\n\r\n _replaceSelection(nselector: SmoSelector, skipPlay: boolean) {\r\n if (this.score === null) {\r\n return;\r\n }\r\n var artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, nselector.voice, nselector.tick);\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, nselector.tick);\r\n }\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, 0);\r\n }\r\n if (!artifact) {\r\n // disappeared - default to start\r\n artifact = SmoSelection.noteSelection(this.score, 0, 0, 0, 0);\r\n }\r\n if (!skipPlay && this.autoPlay && artifact) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n if (!artifact) {\r\n return;\r\n }\r\n artifact.measure.setActiveVoice(nselector.voice);\r\n\r\n // clear modifier selections\r\n this.clearModifierSelections();\r\n this.score.setActiveStaff(nselector.staff);\r\n const mapKey = Object.keys(this.measureNoteMap).find((k) =>\r\n artifact && SmoSelector.sameNote(this.measureNoteMap[k].selector, artifact.selector)\r\n );\r\n if (!mapKey) {\r\n return;\r\n }\r\n const mapped = this.measureNoteMap[mapKey];\r\n // If this is a new selection, remove pitch-specific and replace with note-specific\r\n if (!nselector.pitches || nselector.pitches.length === 0) {\r\n this.pitchIndex = -1;\r\n }\r\n\r\n this.selections = [mapped];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n getFirstMeasureOfSelection() {\r\n if (this.selections.length) {\r\n return this.selections[0].measure;\r\n }\r\n return null;\r\n }\r\n // ## measureIterator\r\n // Description: iterate over the any measures that are part of the selection\r\n getSelectedMeasures(): SmoSelection[] {\r\n const set: number[] = [];\r\n const rv: SmoSelection[] = [];\r\n if (!this.score) {\r\n return [];\r\n }\r\n this.selections.forEach((sel) => {\r\n const measure = SmoSelection.measureSelection(this.score!, sel.selector.staff, sel.selector.measure);\r\n if (measure) {\r\n const ix = measure.selector.measure;\r\n if (set.indexOf(ix) === -1) {\r\n set.push(ix);\r\n rv.push(measure);\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n _addSelection(selection: SmoSelection) {\r\n const ar: SmoSelection[] = this.selections.filter((sel) =>\r\n SmoSelector.neq(sel.selector, selection.selector)\r\n );\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(selection, this.score, 1);\r\n }\r\n ar.push(selection);\r\n this.selections = ar;\r\n }\r\n\r\n _selectFromToInStaff(score: SmoScore, sel1: SmoSelection, sel2: SmoSelection) {\r\n const selections = SmoSelection.innerSelections(score, sel1.selector, sel2.selector);\r\n /* .filter((ff) => \r\n ff.selector.voice === sel1.measure.activeVoice\r\n ); */\r\n this.selections = [];\r\n // Get the actual selections from our map, since the client bounding boxes are already computed\r\n selections.forEach((sel) => {\r\n const key = SmoSelector.getNoteKey(sel.selector);\r\n sel.measure.setActiveVoice(sel.selector.voice);\r\n // Skip measures that are not rendered because they are part of a multi-rest\r\n if (this.measureNoteMap && this.measureNoteMap[key]) {\r\n this.selections.push(this.measureNoteMap[key]);\r\n }\r\n });\r\n\r\n if (this.selections.length === 0) {\r\n this.selections = [sel1];\r\n }\r\n this.idleTimer = Date.now();\r\n }\r\n _selectBetweenSelections(score: SmoScore, s1: SmoSelection, s2: SmoSelection) {\r\n const min = SmoSelector.gt(s1.selector, s2.selector) ? s2 : s1;\r\n const max = SmoSelector.lt(min.selector, s2.selector) ? s2 : s1;\r\n this._selectFromToInStaff(score, min, max);\r\n this._createLocalModifiersList();\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n this.deferHighlight();\r\n }\r\n selectSuggestion(score: SmoScore,ev: KeyEvent) {\r\n if (!this.suggestion || !this.suggestion.measure || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n\r\n if (this.modifierSuggestion) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [this.modifierSuggestion];\r\n this.modifierSuggestion = null;\r\n this.createLocalModifiersFromModifierTabs(this.modifierSelections);\r\n // If we selected due to a mouse click, move the selection to the\r\n // selected modifier\r\n this._highlightModifier();\r\n return;\r\n } else if (ev.type === 'click') {\r\n this.clearModifierSelections(); // if we click on a non-modifier, clear the\r\n // modifier selections\r\n }\r\n\r\n if (ev.shiftKey) {\r\n const sel1 = this.getExtremeSelection(-1);\r\n if (sel1.selector.staff === this.suggestion.selector.staff) {\r\n this._selectBetweenSelections(score, sel1, this.suggestion);\r\n return;\r\n }\r\n }\r\n\r\n if (ev.ctrlKey) {\r\n this._addSelection(this.suggestion);\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n return;\r\n }\r\n if (this.autoPlay) {\r\n SuiOscillator.playSelectionNow(this.suggestion, this.score, 1);\r\n }\r\n\r\n const preselected = this.selections[0] ?\r\n SmoSelector.sameNote(this.suggestion.selector, this.selections[0].selector) && this.selections.length === 1 : false;\r\n\r\n if (this.selections.length === 0) {\r\n this.selections.push(this.suggestion);\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (preselected && note.pitches.length > 1) {\r\n this.pitchIndex = (this.pitchIndex + 1) % note.pitches.length;\r\n this.selections[0].selector.pitches = [this.pitchIndex];\r\n } else {\r\n const selection = SmoSelection.noteFromSelector(this.score, this.suggestion.selector);\r\n if (selection) {\r\n selection.box = JSON.parse(JSON.stringify(this.suggestion.box));\r\n selection.scrollBox = JSON.parse(JSON.stringify(this.suggestion.scrollBox));\r\n this.selections = [selection];\r\n }\r\n }\r\n if (preselected && this.modifierSelections.length) {\r\n const mods = this.modifierSelections.filter((mm) => mm.selection && SmoSelector.sameNote(mm.selection.selector, this.selections[0].selector));\r\n if (mods.length) {\r\n const modToAdd = mods[0];\r\n if (!modToAdd) {\r\n console.warn('bad modifier selection in selectSuggestion 2');\r\n }\r\n this.modifierSelections[0] = modToAdd;\r\n this.modifierIndex = mods[0].index;\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n this.score.setActiveStaff(this.selections[0].selector.staff);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n _setModifierAsSuggestion(artifact: ModifierTab): void {\r\n if (!artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n\r\n _setArtifactAsSuggestion(artifact: SmoSelection) {\r\n let sameSel: SmoSelection | null = null;\r\n let i = 0;\r\n for (i = 0; i < this.selections.length; ++i) {\r\n const ss = this.selections[i];\r\n if (ss && SmoSelector.sameNote(ss.selector, artifact.selector)) {\r\n sameSel = ss;\r\n break;\r\n }\r\n }\r\n if (sameSel || !artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = null;\r\n\r\n this.suggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n _highlightModifier() {\r\n let box: SvgBox | null = null;\r\n if (!this.modifierSelections.length) {\r\n return;\r\n }\r\n this.modifierSelections.forEach((artifact) => {\r\n if (box === null) {\r\n box = artifact.modifier.logicalBox ?? null;\r\n } else {\r\n box = SvgHelpers.unionRect(box, SvgHelpers.smoBox(artifact.modifier.logicalBox));\r\n }\r\n });\r\n if (box === null) {\r\n return;\r\n }\r\n this._drawRect(box, 'staffModifier');\r\n }\r\n\r\n _highlightPitchSelection(note: SmoNote, index: number) {\r\n const noteDiv = $(this.renderElement).find('#' + note.renderId);\r\n const heads = noteDiv.find('.vf-notehead');\r\n if (!heads.length) {\r\n return;\r\n }\r\n const headEl = heads[index];\r\n const pageContext = this.renderer.pageMap.getRendererFromModifier(note);\r\n $(pageContext.svg).find('.vf-pitchSelection').remove();\r\n const box = pageContext.offsetBbox(headEl);\r\n this._drawRect(box, 'pitchSelection');\r\n }\r\n\r\n _highlightActiveVoice(selection: SmoSelection) {\r\n let i = 0;\r\n const selector = selection.selector;\r\n for (i = 1; i <= 4; ++i) {\r\n const cl = 'v' + i.toString() + '-active';\r\n $('body').removeClass(cl);\r\n }\r\n const c2 = 'v' + (selector.voice + 1).toString() + '-active';\r\n $('body').addClass(c2);\r\n }\r\n // The user has just switched voices, select the active voice\r\n selectActiveVoice() {\r\n const selection = this.selections[0];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.voice = selection.measure.activeVoice;\r\n this.selections = [this._getClosestTick(selector)];\r\n this.deferHighlight();\r\n }\r\n\r\n highlightSelection() {\r\n let i = 0;\r\n let prevSel: SmoSelection | null = null;\r\n let curBox: SvgBox = SvgBox.default;\r\n this.idleTimer = Date.now();\r\n const grace = this.getSelectedGraceNotes();\r\n // If this is not a note with grace notes, logically unselect the grace notes\r\n if (grace && grace.length && grace[0].selection && this.selections.length) {\r\n if (!SmoSelector.sameNote(grace[0].selection.selector, this.selections[0].selector)) {\r\n this.clearModifierSelections();\r\n } else {\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n // If there is a race condition with a change, avoid referencing null note\r\n if (!this.selections[0].note) {\r\n return;\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (this.pitchIndex >= 0 && this.selections.length === 1 &&\r\n this.pitchIndex < note.pitches.length) {\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n this.removePitchSelection();\r\n this.pitchIndex = -1;\r\n if (this.selections.length === 1 && note.logicalBox) {\r\n this._drawRect(note.logicalBox, 'selection');\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n const sorted = this.selections.sort((a, b) => SmoSelector.gt(a.selector, b.selector) ? 1 : -1);\r\n prevSel = sorted[0];\r\n // rendered yet?\r\n if (!prevSel || !prevSel.box) {\r\n return;\r\n }\r\n curBox = SvgHelpers.smoBox(prevSel.box);\r\n const boxes: SvgBox[] = [];\r\n for (i = 1; i < sorted.length; ++i) {\r\n const sel = sorted[i];\r\n if (!sel.box || !prevSel.box) {\r\n continue;\r\n }\r\n // const ydiff = Math.abs(prevSel.box.y - sel.box.y);\r\n if (sel.selector.staff === prevSel.selector.staff && sel.measure.svg.lineIndex === prevSel.measure.svg.lineIndex) {\r\n curBox = SvgHelpers.unionRect(curBox, sel.box);\r\n } else if (curBox) {\r\n boxes.push(curBox);\r\n curBox = SvgHelpers.smoBox(sel.box);\r\n }\r\n this._highlightActiveVoice(sel);\r\n prevSel = sel;\r\n }\r\n boxes.push(curBox);\r\n if (this.modifierSelections.length) {\r\n boxes.push(this.modifierSelections[0].box);\r\n }\r\n this._drawRect(boxes, 'selection');\r\n }\r\n /**\r\n * Boxes are divided up into lines/systems already. But we need\r\n * to put the correct box on the correct page.\r\n * @param boxes \r\n */\r\n drawSelectionRects(boxes: SvgBox[]) {\r\n const keys = Object.keys(this.selectionRects);\r\n // erase any old selections\r\n keys.forEach((key) => {\r\n const oon = this.selectionRects[parseInt(key)];\r\n oon.forEach((outline) => {\r\n if (outline.element) {\r\n outline.element.remove();\r\n outline.element = undefined;\r\n \r\n }\r\n })\r\n });\r\n this.selectionRects = {};\r\n // Create an OutlineInfo for each page\r\n const pages: number[] = [];\r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)['selection'];\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n testBox.y -= context.box.y;\r\n if (!this.selectionRects[context.pageNumber]) {\r\n this.selectionRects[context.pageNumber] = [];\r\n pages.push(context.pageNumber);\r\n }\r\n this.selectionRects[context.pageNumber].push({\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n });\r\n });\r\n pages.forEach((pageNo) => {\r\n const outlineInfos = this.selectionRects[pageNo];\r\n outlineInfos.forEach((info) => {\r\n SvgHelpers.outlineRect(info);\r\n });\r\n });\r\n }\r\n _drawRect(pBox: SvgBox | SvgBox[], strokeName: string) { \r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)[strokeName];\r\n const boxes = Array.isArray(pBox) ? pBox : [pBox];\r\n if (strokeName === 'selection') {\r\n this.drawSelectionRects(boxes);\r\n return;\r\n }\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n const timeOff = strokeName === 'suggestion' ? 1000 : 0; \r\n if (context) {\r\n testBox.y -= context.box.y;\r\n if (!this.outlines[strokeName]) {\r\n this.outlines[strokeName] = {\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff\r\n };\r\n }\r\n this.outlines[strokeName].box = testBox;\r\n this.outlines[strokeName].context = context;\r\n SvgHelpers.outlineRect(this.outlines[strokeName]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoBarline } from '../../smo/data/measureModifiers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { VexFlow, GlyphInfo, getGlyphWidth } from '../../common/vex';\r\n\r\nexport class vexGlyph {\r\n static width(smoGlyph: GlyphInfo) {\r\n return getGlyphWidth(smoGlyph);\r\n }\r\n static accidental(a: string): GlyphInfo {\r\n return vexGlyph.accidentals[a];\r\n }\r\n static barWidth(b: SmoBarline): number {\r\n const str = SmoBarline.barlineString(b);\r\n const cc = vexGlyph.dimensions[str];\r\n return cc.width + cc.spacingRight;\r\n }\r\n static accidentalWidth(accidental: string): number {\r\n return vexGlyph.width(vexGlyph.accidentals[accidental]);\r\n }\r\n static get accidentals(): Record {\r\n return {\r\n 'b': vexGlyph.dimensions.flat,\r\n '#': vexGlyph.dimensions.sharp,\r\n 'bb': vexGlyph.dimensions.doubleFlat,\r\n '##': vexGlyph.dimensions.doubleSharp,\r\n 'n': vexGlyph.dimensions.natural\r\n };\r\n }\r\n\r\n static repeatSymbolWidth(): number {\r\n return vexGlyph.width(vexGlyph.dimensions['repeatSymbol']);\r\n }\r\n static get tempo(): GlyphInfo {\r\n return vexGlyph.dimensions.tempo;\r\n }\r\n static keySignatureLength(key: string) {\r\n return SmoMusic.getSharpsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.sharp) +\r\n SmoMusic.getFlatsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.flat) +\r\n vexGlyph.dimensions.keySignature.spacingRight;\r\n }\r\n static get timeSignature() {\r\n return vexGlyph.dimensions.timeSignature;\r\n }\r\n static get dot() {\r\n return vexGlyph.dimensions.dot;\r\n }\r\n\r\n static get tupletBeam() {\r\n return vexGlyph.dimensions.tupletBeam;\r\n }\r\n static get stem() {\r\n return vexGlyph.dimensions.stem;\r\n }\r\n static get flag() {\r\n return vexGlyph.dimensions.flag;\r\n }\r\n static clef(c: string): GlyphInfo {\r\n const key = c.toLowerCase() + 'Clef';\r\n if (!vexGlyph.dimensions[key]) {\r\n return vexGlyph.dimensions.tenorClef;\r\n }\r\n if (vexGlyph.dimensions[key].vexGlyph) {\r\n const width = vexGlyph.width(vexGlyph.dimensions[key]);\r\n return {\r\n width,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 10,\r\n vexGlyph: 'gClef'\r\n };\r\n }\r\n return vexGlyph.dimensions[key];\r\n }\r\n static get dimensions(): Record {\r\n return {\r\n tupletBeam: {\r\n width: 5,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n }, repeatSymbol: {\r\n width: 25,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'repeat1Bar'\r\n },\r\n singleBar: {\r\n width: 1,\r\n height: 41,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 1,\r\n vexGlyph: null\r\n },\r\n endBar: {\r\n width: 5.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n doubleBar: {\r\n width: 3.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n endRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n startRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n noteHead: {\r\n width: 15.3,\r\n height: 10.48,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'noteheadBlack'\r\n },\r\n dot: {\r\n width: 15,\r\n height: 5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'augmentationDot'\r\n }, // This isn't accurate, but I don't\r\n // want to add extra space just for clef.\r\n trebleClef: {\r\n width: 35,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 5,\r\n vexGlyph: 'gClef'\r\n },\r\n bassClef: {\r\n width: 36,\r\n height: 31.88,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'fClef'\r\n },\r\n altoClef: {\r\n width: 31.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n height: 85.5,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n tenorClef: {\r\n width: 31.5,\r\n yTop: 10,\r\n yBottom: 0,\r\n height: 41,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n timeSignature: {\r\n width: 22.36,\r\n height: 85,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 11,\r\n vexGlyph: 'timeSig4'\r\n },\r\n tempo: {\r\n width: 10,\r\n height: 37,\r\n yTop: 37,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n flat: {\r\n width: 15,\r\n height: 23.55,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalFlat'\r\n },\r\n keySignature: {\r\n width: 0,\r\n height: 85.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 10,\r\n vexGlyph: null\r\n },\r\n sharp: {\r\n width: 17,\r\n height: 62,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalSharp',\r\n },\r\n natural: {\r\n width: 15,\r\n height: 53.35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalNatural',\r\n },\r\n doubleSharp: {\r\n height: 10.04,\r\n width: 21.63,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleSharp'\r\n },\r\n doubleFlat: {\r\n width: 13.79,\r\n height: 49.65,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleFlat'\r\n }, stem: {\r\n width: 1,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n }, flag: {\r\n width: 10,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'flag8thUp' // use for width measurements all flags\r\n }\r\n };\r\n }\r\n}\r\n","import { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SmoBarline, SmoMeasureText, SmoRepeatSymbol, SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoLyric, VexAnnotationParams } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { VexFlow } from '../../common/vex';\r\nconst VF = VexFlow;\r\n/**\r\n * convert from Smo library values to Vex values\r\n * @module\r\n * \r\n **/\r\n\r\n/**\r\n *\r\n *\r\n * @export\r\n * @param {SmoSystemGroup} athis\r\n * @return {*} \r\n */\r\nexport function leftConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.leftConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n return VF.StaveConnector.type.DOUBLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.brace:\r\n return VF.StaveConnector.type.BRACE;\r\n case SmoSystemGroup.connectorTypes.bracket:\r\n default:\r\n return VF.StaveConnector.type.BRACKET;\r\n }\r\n}\r\n/**\r\n * convert from a SmoSystemGroup connector to Vex enumeration\r\n * @param athis \r\n * @returns \r\n */\r\nexport function rightConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.rightConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_RIGHT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n default:\r\n return VF.StaveConnector.type.DOUBLE_RIGHT;\r\n }\r\n}\r\nexport const vexBarlineType = [VF.Barline.type.SINGLE, VF.Barline.type.DOUBLE, VF.Barline.type.END,\r\n VF.Barline.type.REPEAT_BEGIN, VF.Barline.type.REPEAT_END, VF.Barline.type.NONE];\r\n\r\nexport const vexBarlinePosition = [ VF.StaveModifierPosition.BEGIN, VF.StaveModifierPosition.END ];\r\n\r\nexport function toVexBarlineType(athis: SmoBarline): number {\r\n return vexBarlineType[athis.barline];\r\n}\r\nexport function toVexBarlinePosition(athis: SmoBarline): number {\r\n return vexBarlinePosition[athis.position];\r\n}\r\n\r\nexport const vexSymbol = [VF.Repetition.type.NONE, VF.Repetition.type.CODA_LEFT, VF.Repetition.type.SEGNO_LEFT, VF.Repetition.type.DC,\r\n VF.Repetition.type.DC_AL_CODA, VF.Repetition.type.DC_AL_FINE, VF.Repetition.type.DS,\r\n VF.Repetition.type.DS_AL_CODA, VF.Repetition.type.DS_AL_FINE, VF.Repetition.type.FINE];\r\n\r\nexport function toVexSymbol(athis: SmoRepeatSymbol) {\r\n return vexSymbol[athis.symbol];\r\n}\r\nexport function toVexVolta(volta: SmoVolta, measureNumber: number) {\r\n if (volta.startBar === measureNumber && volta.startBar === volta.endBar) {\r\n return VF.Volta.type.BEGIN_END;\r\n }\r\n if (volta.startBar === measureNumber) {\r\n return VF.Volta.type.BEGIN;\r\n }\r\n if (volta.endBar === measureNumber) {\r\n return VF.Volta.type.END;\r\n }\r\n if (volta.startBar < measureNumber && volta.endBar > measureNumber) {\r\n return VF.Volta.type.MID;\r\n }\r\n return VF.Volta.type.NONE;\r\n}\r\n\r\nexport const vexTextPosition = [VF.Modifier.Position.ABOVE, VF.Modifier.Position.BELOW, VF.Modifier.Position.LEFT, VF.Modifier.Position.RIGHT];\r\nexport const vexTextJustification = [VF.TextJustification.LEFT, VF.TextJustification.RIGHT, VF.TextJustification.CENTER];\r\n\r\nexport function toVexTextJustification(athis: SmoMeasureText) {\r\n return vexTextJustification[athis.justification];\r\n}\r\nexport function toVexTextPosition(athis: SmoMeasureText) {\r\n return vexTextPosition[parseInt(athis.position as any, 10)];\r\n}\r\n\r\nexport function vexOptions(athis: SmoTie) {\r\n const rv: any = {};\r\n rv.direction = athis.invert ? VF.Stem.DOWN : VF.Stem.UP;\r\n SmoTie.vexParameters.forEach((p) => {\r\n rv[p] = (athis as any)[p];\r\n });\r\n return rv;\r\n}\r\nexport function vexAnnotationPosition(chordPos: number) {\r\n if (chordPos === SmoLyric.symbolPosition.NORMAL) {\r\n return VF.ChordSymbol.symbolModifiers.NONE;\r\n } else if (chordPos === SmoLyric.symbolPosition.SUPERSCRIPT) {\r\n return VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n }\r\n return VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n}\r\n\r\nexport function getVexChordBlocks(athis: SmoLyric) {\r\n let mod = VF.ChordSymbol.symbolModifiers.NONE;\r\n let isGlyph = false;\r\n const tokens = SmoLyric._tokenizeChordString(athis.text);\r\n const blocks: VexAnnotationParams[] = [];\r\n tokens.forEach((token) => {\r\n if (token === '^') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUPERSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n } else if (token === '%') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUBSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n } else if (token === '@') {\r\n isGlyph = !isGlyph;\r\n } else if (token.length) {\r\n if (isGlyph) {\r\n const glyph = SmoLyric._chordGlyphFromCode(token);\r\n blocks.push({\r\n glyph, symbolModifier: mod\r\n });\r\n } else {\r\n blocks.push({\r\n text: token, symbolModifier: mod\r\n });\r\n }\r\n }\r\n });\r\n return blocks;\r\n}\r\n\r\nexport function toVexStemDirection(note: SmoNote) {\r\n return (note.flagState === SmoNote.flagStates.up ? VF.Stem.UP : VF.Stem.DOWN);\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure, SmoVoice, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { VexFlow, StaveNoteStruct, TupletOptions, vexOrnaments } from '../../common/vex';\r\nimport { SmoBarline, SmoRehearsalMark } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { getId } from '../../smo/data/common';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { StaffModifierBase, SmoStaffHairpin, SmoSlur, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, leftConnectorVx, rightConnectorVx,\r\n toVexVolta, getVexChordBlocks } from '../../render/vex/smoAdapter';\r\n\r\n\r\n\r\nconst VF = VexFlow;\r\nexport const fontStacks: Record = {\r\n Bravura: ['\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Gonville: ['\"Gonville\"', '\"Bravura\"', '\"Custom\"'],\r\n Petaluma: ['\"Petaluma\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Leland: ['\"Leland\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'] \r\n}\r\ninterface LyricAdjust {\r\n verse: number, lyric: SmoLyric, \r\n}\r\ninterface VexNoteRenderInfo {\r\n smoNote: SmoNote,voiceIx: number, noteIx: number, tickmapObject: MeasureTickmaps, lyricAdj: string[]\r\n}\r\ninterface VexStaveGroupMusic {\r\n formatter: string, measures: SmoMeasure[], voiceStrings: string[], heightOffset: number, \r\n systemGroup?: SmoSystemGroup\r\n}\r\nfunction smoNoteToVexKeys(smoNote: SmoNote) {\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n return keys;\r\n}\r\nfunction smoNoteToGraceNotes(smoNote: SmoNote, strs: string[]) {\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const grGroup: string[] = [];\r\n gar.forEach((g) => {\r\n const grid = g.attrs.id;\r\n const args = JSON.stringify(g.toVexGraceNote());\r\n strs.push(`const ${grid} = new VF.GraceNote(JSON.parse('${args}'))`);\r\n strs.push(`${grid}.setAttribute('id', '${grid}');`);\r\n for (var i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const acid = 'acc' + i.toString() + grid;\r\n strs.push(`const ${acid} = new VF.Accidental('${pitch.accidental}');`);\r\n if (pitch.cautionary) {\r\n strs.push(`${acid}.setAsCautionary();`);\r\n }\r\n strs.push(`${grid}.addModifier(${acid}, ${i})`);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n grGroup.push(grid);\r\n });\r\n const ggid = 'ggrp' + smoNote.attrs.id;\r\n const grString = '[' + grGroup.join(',') + ']';\r\n strs.push(`const ${ggid} = new VF.GraceNoteGroup(${grString});`);\r\n if (toBeam) {\r\n strs.push(`${ggid}.beamNotes();`);\r\n }\r\n strs.push(`${smoNote.attrs.id}.addModifier(${ggid}, 0);`);\r\n }\r\n}\r\nfunction smoNoteToStaveNote(smoNote: SmoNote) {\r\n const duration =\r\n smoNote.isTuplet ?\r\n SmoMusic.closestVexDuration(smoNote.tickCount) :\r\n SmoMusic.ticksToDuration[smoNote.tickCount];\r\n const sn: StaveNoteStruct = {\r\n clef: smoNote.clef,\r\n duration,\r\n dots: smoNote.dots,\r\n type: smoNote.noteType\r\n };\r\n if (smoNote.flagState !== SmoNote.flagStates.auto) {\r\n sn.stem_direction = smoNote.flagState === SmoNote.flagStates.up ? 1 : -1;\r\n sn.auto_stem = false; \r\n } else {\r\n sn.auto_stem = true;\r\n }\r\n sn.keys = smoNoteToVexKeys(smoNote);\r\n return sn;\r\n}\r\nexport const getVoiceId = (smoMeasure:SmoMeasure, voiceIx: number) => {\r\n return smoMeasure.attrs.id + 'v' + voiceIx.toString();\r\n}\r\nfunction lastNoteInSystem(smoScore: SmoScore, selection: SmoSelection) {\r\n let rv = selection;\r\n let next: SmoSelection | null = null;\r\n next = SmoSelection.nextNoteSelection(smoScore, selection.selector.staff,\r\n selection.selector.measure, selection.selector.voice, selection.selector.tick);\r\n while (next) {\r\n if (next.measure.svg.rowInSystem !== selection.measure.svg.rowInSystem) {\r\n return rv;\r\n break;\r\n }\r\n rv = next;\r\n next = SmoSelection.nextNoteSelection(smoScore, next.selector.staff,\r\n next.selector.measure, next.selector.voice, next.selector.tick);\r\n }\r\n return rv;\r\n}\r\nfunction createMeasureModifiers(smoMeasure: SmoMeasure, strs: string[]) {\r\n const sb = smoMeasure.getStartBarline();\r\n const eb = smoMeasure.getEndBarline();\r\n const sym = smoMeasure.getRepeatSymbol();\r\n const vxStave = 'stave' + smoMeasure.attrs.id;\r\n if (smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && smoMeasure.format.padLeft === 0) {\r\n strs.push(`${vxStave}.setBegBarType(VF.Barline.type.NONE);`);\r\n } else {\r\n strs.push(`${vxStave}.setBegBarType(${toVexBarlineType(sb)});`);\r\n }\r\n if (smoMeasure.svg.multimeasureLength > 0 && !smoMeasure.svg.hideMultimeasure) {\r\n const bl = vexBarlineType[smoMeasure.svg.multimeasureEndBarline];\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n const bl = toVexBarlineType(eb);\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n }\r\n if (smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n strs.push(`${vxStave}.setSection('${rm.symbol}', 0);`);\r\n }\r\n }\r\n const tempo = smoMeasure.getTempo();\r\n if (tempo && smoMeasure.svg.forceTempo) {\r\n const vexTempo = tempo.toVexTempo();\r\n const tempoString = JSON.stringify(vexTempo);\r\n strs.push(`${vxStave}.setTempo(JSON.parse('${tempoString}'), -1 * ${tempo.yOffset});`);\r\n }\r\n}\r\nexport function renderVoltas(smoScore: SmoScore, startMeasure: number, endMeasure: number, strs: string[]) {\r\n const voltas = smoScore.staves[0].getVoltaMap(startMeasure, endMeasure);\r\n for (var i = 0; i < voltas.length; ++i) {\r\n const ending = voltas[i];\r\n for (var j = ending.startBar; j <= ending.endBar; ++j) {\r\n const smoMeasure = smoScore.staves[0].measures[j];\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vx = smoMeasure.staffX + ending.xOffsetStart;\r\n const vxStave = 'stave' + smoMeasure.attrs.id;\r\n const endingName = ending.attrs.id + smoMeasure.attrs.id;\r\n strs.push(`const ${endingName} = new VF.Volta(${vtype}, '${ending.number.toString()}', ${vx}, ${ending.yOffset});`);\r\n strs.push(`${endingName}.setContext(context).draw(${vxStave}, -1 * ${ending.xOffsetEnd});`);\r\n }\r\n }\r\n}\r\nfunction renderModifier(modifier: StaffModifierBase, startNote: SmoNote | null, endNote: SmoNote | null, strs: string[]) {\r\n const modifierName = getId();\r\n const startKey = SmoSelector.getNoteKey(modifier.startSelector);\r\n const endKey = SmoSelector.getNoteKey(modifier.endSelector);\r\n strs.push(`// modifier from ${startKey} to ${endKey}`);\r\n if (modifier.ctor === 'SmoStaffHairpin' && startNote && endNote) {\r\n const hp = modifier as SmoStaffHairpin; \r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = startNote.attrs.id;\r\n const hpParams = { first_note: vxStart, last_note: vxEnd };\r\n strs.push(`const ${modifierName} = new VF.StaveHairpin({ first_note: ${vxStart}, last_note: ${vxEnd},\r\n firstNote: ${vxStart}, lastNote: ${vxEnd} });`);\r\n strs.push(`${modifierName}.setRenderOptions({ height: ${hp.height}, y_shift: ${hp.yOffset}, left_shift_px: ${hp.xOffsetLeft},right_shift_px: ${hp.xOffsetRight} });`);\r\n strs.push(`${modifierName}.setContext(context).setPosition(${hp.position}).draw();`);\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const slur = modifier as SmoSlur; \r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n let slurX = 0;\r\n if (startNote === null || endNote === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n const hpParams = {\r\n thickness: slur.thickness,\r\n xShift: slurX,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n invert: slur.invert,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const paramStrings = JSON.stringify(hpParams);\r\n strs.push(`const ${modifierName} = new VF.Curve(${vxStart}, ${vxEnd}, JSON.parse('${paramStrings}'));`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n // TODO: handle case of overlap\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n if (ctie.lines.length > 0) {\r\n // Hack: if a chord changed, the ties may no longer be valid. We should check\r\n // this when it changes.\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n strs.push(`const ${modifierName} = new VF.StaveTie({ first_note: ${vxStart}, last_note: ${vxEnd}, \r\n firstNote: ${vxStart}, lastNote: ${vxEnd}, first_indices: [${fromLines}], last_indices: [${toLines}]});`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket' && startNote && endNote) {\r\n const ctext = modifier as SmoStaffTextBracket;\r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = endNote.attrs.id;\r\n if (vxStart && vxEnd) {\r\n strs.push(`const ${modifierName} = new VF.TextBracket({ start: ${vxStart}, stop: ${vxEnd}, text: '${ctext.text}', position: ${ctext.position} });`);\r\n strs.push(`${modifierName}.setLine(${ctext.line}).setContext(context).draw();`);\r\n }\r\n }\r\n}\r\nfunction renderModifiers(smoScore: SmoScore, staff: SmoSystemStaff, \r\n startMeasure: number, endMeasure: number, strs: string[]) {\r\n const modifiers = staff.renderableModifiers.filter((mm) => mm.startSelector.measure >= startMeasure && mm.endSelector.measure <= endMeasure);\r\n modifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(smoScore,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(smoScore,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n // TODO: handle case of multiple line slur/tie\r\n if (startNote && startNote.note && endNote && endNote.note) {\r\n if (endNote.measure.svg.lineIndex !== startNote.measure.svg.lineIndex) {\r\n const endFirst = lastNoteInSystem(smoScore, startNote);\r\n if (endFirst && endFirst.note) {\r\n const startLast = SmoSelection.noteSelection(smoScore, endNote.selector.staff,\r\n endNote.selector.measure, 0, 0);\r\n if (startLast && startLast.note) {\r\n renderModifier(modifier, startNote.note, null, strs);\r\n renderModifier(modifier, null, endNote.note, strs);\r\n }\r\n }\r\n } else {\r\n renderModifier(modifier, startNote.note, endNote.note, strs);\r\n }\r\n }\r\n });\r\n}\r\nfunction createStaveNote(renderInfo: VexNoteRenderInfo, key: string, row: number, strs: string[]) {\r\n const { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj } = { ...renderInfo };\r\n const id = smoNote.attrs.id;\r\n const ctorInfo = smoNoteToStaveNote(smoNote);\r\n const ctorString = JSON.stringify(ctorInfo);\r\n if (smoNote.noteType === '/') {\r\n strs.push(`const ${id} = new VF.GlyphNote(new VF.Glyph('repeatBarSlash', 40), { duration: '${ctorInfo.duration}' });`)\r\n } else {\r\n strs.push(`const ${id} = new VF.StaveNote(JSON.parse('${ctorString}'))`);\r\n }\r\n smoNoteToGraceNotes(smoNote, strs);\r\n strs.push(`${id}.setAttribute('id', '${id}');`);\r\n if (smoNote.fillStyle) {\r\n strs.push(`${id}.setStyle({ fillStyle: '${smoNote.fillStyle}' });`);\r\n } else if (voiceIx > 0) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#115511\" });`);\r\n } else if (smoNote.isHidden()) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#ffffff00\" });`);\r\n }\r\n if (smoNote.noteType === 'n') {\r\n smoNote.pitches.forEach((pitch, ix) => {\r\n const zz = SmoMusic.accidentalDisplay(pitch, key,\r\n tickmapObject.tickmaps[voiceIx].durationMap[noteIx], tickmapObject.accidentalArray);\r\n if (zz) {\r\n const aname = id + ix.toString() + 'acc';\r\n strs.push(`const ${aname} = new VF.Accidental('${zz.symbol}');`);\r\n if (zz.courtesy) {\r\n strs.push(`${aname}.setAsCautionary();`);\r\n }\r\n strs.push(`${id}.addModifier(${aname}, ${ix});`);\r\n }\r\n }); \r\n }\r\n for (var i = 0; i < smoNote.dots; ++i) {\r\n for (var j = 0; j < smoNote.pitches.length; ++j) {\r\n strs.push(`${id}.addModifier(new VF.Dot(), ${j});`); \r\n }\r\n }\r\n smoNote.articulations.forEach((aa) => {\r\n const position: number = SmoArticulation.positionToVex[aa.position];\r\n const vexArt = SmoArticulation.articulationToVex[aa.articulation];\r\n const sn = getId();\r\n strs.push(`const ${sn} = new VF.Articulation('${vexArt}').setPosition(${position});`);\r\n strs.push(`${id}.addModifier(${sn}, 0);`);\r\n });\r\n smoNote.getJazzOrnaments().forEach((ll) => {\r\n const vexCode = ll.toVex();\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`)\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n smoNote.getOrnaments().forEach((ll) => {\r\n const vexCode = vexOrnaments[ll.ornament];\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n strs.push(`${ll.attrs.id}.setDelayed(true);`);\r\n }\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n const lyrics = smoNote.getTrueLyrics();\r\n if (smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n let classString = 'lyric lyric-' + ll.verse;\r\n let text = ll.getText();\r\n if (!ll.skipRender) {\r\n if (!text.length && ll.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (text.length) {\r\n const sn = ll.attrs.id;\r\n text = text.replace(\"'\",\"\\\\'\");\r\n strs.push(`const ${sn} = new VF.Annotation('${text}');`);\r\n strs.push(`${sn}.setAttribute('id', '${sn}');`);\r\n const weight = ll.fontInfo.weight ?? 'normal';\r\n strs.push(`${sn}.setFont('${ll.fontInfo.family}', ${ll.fontInfo.size}, '${weight}');`)\r\n strs.push(`${sn}.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);`);\r\n strs.push(`${id}.addModifier(${sn});`);\r\n if (ll.adjY > 0) {\r\n const adjy = Math.round(ll.adjY);\r\n lyricAdj.push(`context.svg.getElementById('vf-${sn}').setAttributeNS('', 'transform', 'translate(0 ${adjy})');`);\r\n }\r\n if (ll.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n strs.push(`${sn}.addClass('${classString}');`);\r\n }\r\n }\r\n });\r\n }\r\n const chords = smoNote.getChords();\r\n chords.forEach((chord) => {\r\n strs.push(`const ${chord.attrs.id} = new VF.ChordSymbol();`);\r\n strs.push(`${chord.attrs.id}.setAttribute('id', '${chord.attrs.id}');`);\r\n const vblocks = getVexChordBlocks(chord);\r\n vblocks.forEach((vblock) => {\r\n const glyphParams = JSON.stringify(vblock);\r\n if (vblock.glyph) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${vblock.glyph}', JSON.parse('${glyphParams}'));`);\r\n } else {\r\n const btext = vblock.text ?? '';\r\n if (btext.trim().length) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${btext}', JSON.parse('${glyphParams}'));`);\r\n }\r\n }\r\n });\r\n strs.push(`${chord.attrs.id}.setFont('${chord.fontInfo.family}', ${chord.fontInfo.size}).setReportWidth(${chord.adjustNoteWidth});`);\r\n strs.push(`${id}.addModifier(${chord.attrs.id}, 0);`);\r\n });\r\n return id;\r\n}\r\nfunction createColumn(groups: Record, strs: string[]) {\r\n const groupKeys = Object.keys(groups);\r\n groupKeys.forEach((groupKey) => {\r\n const music = groups[groupKey];\r\n // Need to create beam groups before formatting\r\n strs.push(`// create beam groups and tuplets for format grp ${groupKey} before formatting`);\r\n music.measures.forEach((smoMeasure) => {\r\n createBeamGroups(smoMeasure, strs);\r\n createTuplets(smoMeasure, strs);\r\n });\r\n strs.push(' ');\r\n strs.push(`// formatting measures in staff group ${groupKey}`);\r\n const joinVoiceStr = '[' + music.voiceStrings.join(',') + ']';\r\n const widthMeasure = music.measures[0];\r\n const staffWidth = Math.round(widthMeasure.staffWidth -\r\n (widthMeasure.svg.adjX + widthMeasure.svg.adjRight + widthMeasure.format.padLeft) - 10);\r\n strs.push(`${music.formatter}.format(${joinVoiceStr}, ${staffWidth});`);\r\n music.measures.forEach((smoMeasure) => {\r\n createMeasure(smoMeasure, music.heightOffset, strs);\r\n });\r\n });\r\n}\r\nfunction createBeamGroups(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const bgs = smoMeasure.beamGroups.filter((bb) => bb.voice === voiceIx);\r\n for (var i = 0; i < bgs.length; ++i) {\r\n const bg = bgs[i];\r\n let keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n const sdName = 'dir' + bg.attrs.id;\r\n strs.push(`const ${sdName} = ${bg.notes[keyNoteIx].attrs.id}.getStemDirection();`);\r\n const nar: string[] = [];\r\n for (var j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n if (note.noteType !== '/') {\r\n nar.push(vexNote);\r\n }\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n strs.push(`${vexNote}.setStemDirection(${sdName});`);\r\n }\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${bg.attrs.id} = new VF.Beam(${narString});`);\r\n }\r\n });\r\n}\r\nfunction createTuplets(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const tps = smoMeasure.tuplets.filter((tp) => tp.voice === voiceIx);\r\n for (var i = 0; i < tps.length; ++i) {\r\n const tp = tps[i];\r\n const nar: string[] = [];\r\n for (var j = 0; j < tp.notes.length; ++j) {\r\n const note = tp.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n nar.push(vexNote);\r\n }\r\n const direction = tp.getStemDirection(smoMeasure.clef) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const tpParams: TupletOptions = {\r\n num_notes: tp.num_notes,\r\n notes_occupied: tp.notes_occupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: direction\r\n };\r\n const tpParamString = JSON.stringify(tpParams);\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${tp.attrs.id} = new VF.Tuplet(${narString}, JSON.parse('${tpParamString}'));`);\r\n }\r\n });\r\n}\r\nfunction createMeasure(smoMeasure: SmoMeasure, heightOffset: number, strs: string[]) {\r\n const ssid = 'stave' + smoMeasure.attrs.id;\r\n const staffY = smoMeasure.svg.staffY + heightOffset;\r\n const staffWidth = Math.round(smoMeasure.svg.staffWidth);\r\n strs.push(`const ${ssid} = new VF.Stave(${smoMeasure.svg.staffX}, ${staffY}, ${staffWidth});`);\r\n strs.push(`${ssid}.setAttribute('id', '${ssid}');`);\r\n createMeasureModifiers(smoMeasure, strs);\r\n if (smoMeasure.svg.forceClef) {\r\n strs.push(`${ssid}.addClef('${smoMeasure.clef}');`);\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n const ts = smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (smoMeasure.timeSignature.displayString.length) {\r\n tsString = smoMeasure.timeSignature.displayString;\r\n }\r\n strs.push(`${ssid}.addTimeSignature('${tsString}');`);\r\n }\r\n if (smoMeasure.svg.forceKeySignature) {\r\n const key = SmoMusic.vexKeySignatureTranspose(smoMeasure.keySignature, 0);\r\n const ksid = 'key' + smoMeasure.attrs.id;\r\n strs.push(`const ${ksid} = new VF.KeySignature('${key}');`);\r\n if (smoMeasure.canceledKeySignature) {\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(smoMeasure.canceledKeySignature, 0);\r\n strs.push(`${ksid}.cancelKey('${canceledKey}');`);\r\n }\r\n strs.push(`${ksid}.addToStave(${ssid});`);\r\n }\r\n strs.push(`${ssid}.setContext(context);`);\r\n strs.push(`${ssid}.draw();`);\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const vs = getVoiceId(smoMeasure, voiceIx);\r\n strs.push(`${vs}.draw(context, ${ssid});`);\r\n });\r\n smoMeasure.beamGroups.forEach((bg) => {\r\n strs.push(`${bg.attrs.id}.setContext(context);`);\r\n strs.push(`${bg.attrs.id}.draw();`)\r\n });\r\n smoMeasure.tuplets.forEach((tp) => {\r\n strs.push(`${tp.attrs.id}.setContext(context).draw();`)\r\n })\r\n}\r\n// ## SmoToVex\r\n// Simple serialize class that produced VEX note and voice objects\r\n// for vex EasyScore (for easier bug reports and test cases)\r\nexport class SmoToVex {\r\n static convert(smoScore: SmoScore, options: any): string {\r\n let div = 'boo';\r\n let page = 0;\r\n options = options ?? {};\r\n if (typeof(options['div']) === 'string') {\r\n div = options.div\r\n }\r\n if (typeof(options['page']) === 'number') {\r\n page = options.page;\r\n }\r\n let startMeasure = -1;\r\n let endMeasure = -1;\r\n const strs: string[] = [];\r\n const pageHeight = smoScore.layoutManager?.getGlobalLayout().pageHeight ?? 1056;\r\n const pageWidth = smoScore.layoutManager?.getGlobalLayout().pageWidth ?? 816;\r\n const pageLength = smoScore.staves[0].measures[smoScore.staves[0].measures.length - 1].svg.pageIndex + 1;\r\n let scoreName = smoScore.scoreInfo.title + ' p ' + (page + 1).toString() + '/' + pageLength.toString();\r\n const scoreSub = smoScore.scoreInfo.subTitle?.length ? `(${smoScore.scoreInfo.subTitle})` : '';\r\n scoreName = `${scoreName} ${scoreSub} by ${smoScore.scoreInfo.composer}`;\r\n strs.push(`// @@ ${scoreName}`);\r\n strs.push('function main() {');\r\n strs.push('// create the div and svg element for the music');\r\n strs.push(`const div = document.getElementById('${div}');`);\r\n strs.push('const VF = Vex.Flow;');\r\n strs.push(`const renderer = new VF.Renderer(div, VF.Renderer.Backends.SVG);`);\r\n const zoomScale = (smoScore.layoutManager?.getZoomScale() ?? 1.0);\r\n const svgScale = (smoScore.layoutManager?.getGlobalLayout().svgScale ?? 1.0);\r\n const width = zoomScale * pageWidth;\r\n const height = zoomScale * pageHeight;\r\n const scale = svgScale * zoomScale;\r\n const heightOffset = -1 * (height * page) / scale;\r\n const vbWidth = Math.round(width / scale);\r\n const vbHeight = Math.round(height / scale);\r\n strs.push('const context = renderer.getContext();');\r\n strs.push('const svg = context.svg');\r\n strs.push(`svg.setAttributeNS('', 'width', '${width}');`);\r\n strs.push(`svg.setAttributeNS('', 'height', '${height}');`);\r\n strs.push(`svg.setAttributeNS('', 'viewBox', '0 0 ${vbWidth} ${vbHeight}');`);\r\n strs.push('//');\r\n strs.push('// create the musical objects');\r\n const font = smoScore.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n const fs = fontStacks[font.family].join(',');\r\n strs.push(`VF.setMusicFont(${fs});`);\r\n }\r\n const measureCount = smoScore.staves[0].measures.length;\r\n const lyricAdj: string[] = [];\r\n for (var k = 0; k < measureCount; ++k) {\r\n const groupMap: Record = {};\r\n if (smoScore.staves[0].measures[k].svg.pageIndex < page) {\r\n continue;\r\n }\r\n if (smoScore.staves[0].measures[k].svg.pageIndex > page) {\r\n break;\r\n }\r\n startMeasure = startMeasure < 0 ? k : startMeasure;\r\n endMeasure = Math.max(k, endMeasure);\r\n smoScore.staves.forEach((smoStaff, staffIx) => {\r\n const smoMeasure = smoStaff.measures[k];\r\n const selection = SmoSelection.measureSelection(smoScore, smoStaff.staffId, smoMeasure.measureNumber.measureIndex);\r\n if (!selection) {\r\n throw('ouch no selection');\r\n }\r\n const systemGroup = smoScore.getSystemGroupForStaff(selection);\r\n const justifyGroup: string = (systemGroup && smoMeasure.format.autoJustify) ? systemGroup.attrs.id : selection.staff.attrs.id;\r\n const tickmapObject = smoMeasure.createMeasureTickmaps();\r\n const measureIx = smoMeasure.measureNumber.measureIndex;\r\n const voiceStrings: string[] = [];\r\n const fmtid = 'fmt' + smoMeasure.attrs.id + measureIx.toString();\r\n strs.push(`const ${fmtid} = new VF.Formatter();`);\r\n if (!groupMap[justifyGroup]) {\r\n groupMap[justifyGroup] = {\r\n formatter: fmtid,\r\n measures: [],\r\n heightOffset,\r\n voiceStrings: [],\r\n systemGroup\r\n }\r\n }\r\n groupMap[justifyGroup].measures.push(smoMeasure);\r\n strs.push('//');\r\n strs.push(`// voices and notes for stave ${smoStaff.staffId} ${smoMeasure.measureNumber.measureIndex}`);\r\n smoMeasure.voices.forEach((smoVoice: SmoVoice, voiceIx: number) => { \r\n const vn = getVoiceId(smoMeasure, voiceIx);\r\n groupMap[justifyGroup].voiceStrings.push(vn);\r\n const vc = vn + 'ar';\r\n const ts = JSON.stringify({\r\n numBeats: smoMeasure.timeSignature.actualBeats,\r\n beatValue: smoMeasure.timeSignature.beatDuration\r\n });\r\n strs.push(`const ${vn} = new VF.Voice(JSON.parse('${ts}')).setMode(VF.Voice.Mode.SOFT);`);\r\n strs.push(`const ${vc} = [];`);\r\n smoVoice.notes.forEach((smoNote: SmoNote, noteIx: number) => {\r\n const renderInfo: VexNoteRenderInfo = { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj };\r\n const noteId = createStaveNote(renderInfo, smoMeasure.keySignature, smoMeasure.svg.rowInSystem, strs);\r\n strs.push(`${vc}.push(${noteId});`);\r\n });\r\n strs.push(`${vn}.addTickables(${vc})`);\r\n voiceStrings.push(vn);\r\n strs.push(`${fmtid}.joinVoices([${vn}]);`);\r\n });\r\n if (smoMeasure.svg.rowInSystem === smoScore.staves.length - 1) {\r\n createColumn(groupMap, strs);\r\n const mapKeys = Object.keys(groupMap);\r\n mapKeys.forEach((mapKey) => {\r\n const tmpGroup = groupMap[mapKey];\r\n if (tmpGroup.systemGroup) {\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const startMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.startSelector.staff].measures[k].attrs.id;\r\n const endMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.endSelector.staff].measures[k].attrs.id;\r\n const leftConnector = leftConnectorVx(tmpGroup.systemGroup);\r\n const rightConnector = rightConnectorVx(tmpGroup.systemGroup);\r\n const jgname = justifyGroup + startMeasure + staffIx.toString();\r\n if (systemIndex === 0 && smoScore.staves.length > 1) {\r\n strs.push(`const left${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${leftConnector});`);\r\n strs.push(`left${jgname}.setContext(context).draw();`);\r\n }\r\n let endStave = false;\r\n if (smoMeasure.measureNumber.systemIndex !== 0) {\r\n if (smoMeasure.measureNumber.systemIndex === smoScore.staves[0].measures.length - 1) {\r\n endStave = true;\r\n } else if (smoScore.staves[0].measures.length > k + 1 &&\r\n smoScore.staves[0].measures[k + 1].measureNumber.systemIndex === 0) {\r\n endStave = true;\r\n }\r\n }\r\n if (endStave) {\r\n strs.push(`const right${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${rightConnector});`);\r\n strs.push(`right${jgname}.setContext(context).draw();`);\r\n } \r\n }\r\n });\r\n }\r\n });\r\n }\r\n smoScore.staves.forEach((staff) => {\r\n renderModifiers(smoScore, staff, startMeasure, endMeasure, strs);\r\n });\r\n renderVoltas(smoScore, startMeasure, endMeasure, strs);\r\n if (lyricAdj.length) {\r\n strs.push('// ');\r\n strs.push('// Align lyrics on different measures, once they are rendered.');\r\n }\r\n const render = strs.concat(lyricAdj);\r\n render.push('}');\r\n return render.join(`\\n`);\r\n // console.log(render.join(`\\n`));\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## Description:\r\n// This file calls the vexflow routines that actually render a\r\n// measure of music. If multiple measures are justified in a\r\n// column, the rendering is deferred until all the measures have been\r\n// preformatted.\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\nimport { SmoRepeatSymbol, SmoMeasureText, SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SourceSerifProFont } from '../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoLyric, \r\n SmoArpeggio, SmoNoteModifierBase, VexAnnotationParams } from '../../smo/data/noteModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoMeasure, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { Clef, IsClef } from '../../smo/data/common';\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, toVexSymbol,\r\n toVexTextJustification, toVexTextPosition, getVexChordBlocks, toVexStemDirection } from './smoAdapter';\r\nimport { VexFlow, Stave,StemmableNote, Note, Beam, Tuplet, Voice,\r\n Formatter, Accidental, Annotation, StaveNoteStruct, StaveText, StaveModifier,\r\n createStaveText, renderDynamics, applyStemDirection,\r\n getVexNoteParameters, defaultNoteScale, defaultCueScale, getVexTuplets,\r\n createStave, createVoice, getOrnamentGlyph, getSlashGlyph, getRepeatBar, getMultimeasureRest,\r\n addChordGlyph } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n\r\ndeclare var $: any;\r\n// const VF = eval('Vex.Flow');\r\n\r\n/**\r\n * This is the interface for VexFlow library that actually does the engraving.\r\n * @category SuiRender\r\n */\r\nexport class VxMeasure {\r\n context: SvgPage;\r\n printing: boolean;\r\n selection: SmoSelection;\r\n softmax: number;\r\n smoMeasure: SmoMeasure;\r\n rendered: boolean = false;\r\n noteToVexMap: Record = {};\r\n beamToVexMap: Record = {};\r\n tupletToVexMap: Record = {};\r\n multimeasureRest: any | null = null;\r\n vexNotes: Note[] = [];\r\n vexBeamGroups: Beam[] = [];\r\n vexTuplets: Tuplet[] = [];\r\n tickmapObject: MeasureTickmaps | null = null;\r\n stave: Stave | null = null; // vex stave\r\n voiceNotes: Note[] = []; // notes for current voice, as rendering\r\n voiceAr: Voice[] = [];\r\n formatter: Formatter | null = null;\r\n allCues: boolean = false;\r\n modifiersToBox: SmoNoteModifierBase[] = [];\r\n collisionMap: Record = {};\r\n dbgLeftX: number = 0;\r\n dbgWidth: number = 0;\r\n\r\n constructor(context: SvgPage, selection: SmoSelection, printing: boolean, softmax: number) {\r\n this.context = context;\r\n this.rendered = false;\r\n this.selection = selection;\r\n this.smoMeasure = this.selection.measure;\r\n this.printing = printing;\r\n this.allCues = selection.staff.partInfo.displayCues;\r\n this.tupletToVexMap = {};\r\n this.vexNotes = [];\r\n this.vexBeamGroups = [];\r\n this.vexBeamGroups = [];\r\n this.beamToVexMap = {};\r\n this.softmax = softmax;\r\n }\r\n\r\n static get fillStyle() {\r\n return '#000';\r\n }\r\n\r\n isWholeRest() {\r\n return (this.smoMeasure.voices.length === 1 &&\r\n this.smoMeasure.voices[0].notes.length === 1 &&\r\n this.smoMeasure.voices[0].notes[0].isRest()\r\n );\r\n }\r\n // We add microtones to the notes, without regard really to how they interact\r\n _createMicrotones(smoNote: SmoNote, vexNote: Note) {\r\n const tones = smoNote.getMicrotones();\r\n tones.forEach((tone) => {\r\n const acc: Accidental = new VF.Accidental(tone.toVex);\r\n vexNote.addModifier(acc, tone.pitchIndex);\r\n });\r\n }\r\n createDots(smoNote: SmoNote, vexNote: Note) {\r\n for (var i = 0; i < smoNote.dots; ++i) {\r\n for (var j = 0; j < smoNote.pitches.length; ++j) {\r\n if (!this.isWholeRest()) {\r\n vexNote.addModifier(new VF.Dot(), j);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Create accidentals based on the active key and previous accidentals in this voice\r\n * @param smoNote \r\n * @param vexNote \r\n * @param tickIndex \r\n * @param voiceIx \r\n * @returns \r\n */\r\n _createAccidentals(smoNote: SmoNote, vexNote: Note, tickIndex: number, voiceIx: number) {\r\n let i = 0;\r\n if (smoNote.noteType === '/') {\r\n return;\r\n }\r\n if (smoNote.noteType !== 'n') {\r\n this.createDots(smoNote, vexNote);\r\n return;\r\n }\r\n smoNote.accidentalsRendered = [];\r\n for (i = 0; i < smoNote.pitches.length && this.tickmapObject !== null; ++i) {\r\n const pitch = smoNote.pitches[i];\r\n const zz = SmoMusic.accidentalDisplay(pitch, this.smoMeasure.keySignature,\r\n this.tickmapObject.tickmaps[voiceIx].durationMap[tickIndex], this.tickmapObject.accidentalArray);\r\n if (zz) {\r\n const acc = new VF.Accidental(zz.symbol);\r\n if (zz.courtesy) {\r\n acc.setAsCautionary();\r\n }\r\n smoNote.accidentalsRendered.push(pitch.accidental);\r\n vexNote.addModifier(acc, i);\r\n } else {\r\n smoNote.accidentalsRendered.push('');\r\n }\r\n }\r\n this.createDots(smoNote, vexNote);\r\n this._createMicrotones(smoNote, vexNote);\r\n if (smoNote.arpeggio) {\r\n vexNote.addModifier(new VF.Stroke(smoNote.arpeggio.typeCode));\r\n }\r\n }\r\n\r\n _createJazzOrnaments(smoNote: SmoNote, vexNote: Note) {\r\n const o = smoNote.getJazzOrnaments();\r\n o.forEach((ll) => {\r\n const mod = new VF.Ornament(ll.toVex());\r\n vexNote.addModifier(mod, 0);\r\n });\r\n }\r\n\r\n _createOrnaments(smoNote: SmoNote, vexNote: Note) {\r\n const o = smoNote.getOrnaments();\r\n o.forEach((ll) => {\r\n const ornamentCode = getOrnamentGlyph(ll.ornament);\r\n const mod = new VF.Ornament(ornamentCode);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n mod.setDelayed(true);\r\n }\r\n vexNote.addModifier(mod, 0);\r\n });\r\n }\r\n _addLyricAnnotationToNote(vexNote: Note, lyric: SmoLyric) {\r\n let classString = 'lyric lyric-' + lyric.verse;\r\n let text = lyric.getText();\r\n if (lyric.skipRender) {\r\n return;\r\n }\r\n if (!text.length && lyric.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (!text.length) {\r\n return;\r\n }\r\n const vexL: Annotation = new VF.Annotation(text); // .setReportWidth(lyric.adjustNoteWidth);\r\n vexL.setAttribute('id', lyric.attrs.id); //\r\n\r\n // If we adjusted this note for the lyric, adjust the lyric as well.\r\n vexL.setFont(lyric.fontInfo.family, lyric.fontInfo.size, lyric.fontInfo.weight);\r\n vexL.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);\r\n vexNote.addModifier(vexL);\r\n if (lyric.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n vexL.addClass(classString);\r\n }\r\n\r\n _addChordChangeToNote(vexNote: Note, lyric: SmoLyric) {\r\n const cs = new VF.ChordSymbol();\r\n cs.setAttribute('id', lyric.attrs.id);\r\n const blocks = getVexChordBlocks(lyric);\r\n blocks.forEach((block) => {\r\n if (block.glyph) {\r\n // Vex 5 broke this, does not distinguish between glyph and text\r\n // the reverse is for vex4 which expects the non-mangled identifier here,\r\n // e.g. 'diminished' and not 'csymDiminished'\r\n addChordGlyph(cs, block.glyph);\r\n } else {\r\n cs.addGlyphOrText(block.text ?? '', block);\r\n }\r\n });\r\n cs.setFont(lyric.fontInfo.family, lyric.fontInfo.size).setReportWidth(lyric.adjustNoteWidth);\r\n vexNote.addModifier(cs, 0);\r\n const classString = 'chord chord-' + lyric.verse;\r\n cs.addClass(classString);\r\n }\r\n\r\n _createLyric(smoNote: SmoNote, vexNote: Note) {\r\n const lyrics = smoNote.getTrueLyrics();\r\n if (smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n this._addLyricAnnotationToNote(vexNote, ll);\r\n });\r\n }\r\n const chords = smoNote.getChords();\r\n chords.forEach((chord) => {\r\n this._addChordChangeToNote(vexNote, chord);\r\n });\r\n }\r\n\r\n _createGraceNotes(smoNote: SmoNote, vexNote: Note) {\r\n let i = 0;\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const group: any[] = [];\r\n gar.forEach((g) => {\r\n const gr = new VF.GraceNote(g.toVexGraceNote());\r\n gr.setAttribute('id', g.attrs.id);\r\n for (i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const accidental = new VF.Accidental(pitch.accidental);\r\n if (pitch.cautionary) {\r\n accidental.setAsCautionary();\r\n }\r\n gr.addModifier(accidental, i);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n gr.addClass('grace-note'); // note: this doesn't work :(\r\n\r\n g.renderId = gr.getAttribute('id');\r\n group.push(gr);\r\n });\r\n const grace: any = new VF.GraceNoteGroup(group);\r\n if (toBeam) {\r\n grace.beamNotes();\r\n }\r\n vexNote.addModifier(grace, 0);\r\n }\r\n }\r\n\r\n createCollisionTickmap() {\r\n let i = 0;\r\n let j = 0;\r\n if (!this.tickmapObject) {\r\n return;\r\n }\r\n for (i = 0; i < this.smoMeasure.voices.length; ++i) {\r\n const tm = this.tickmapObject.tickmaps[i];\r\n for (j = 0; j < tm.durationMap.length; ++j) {\r\n if (typeof(this.collisionMap[tm.durationMap[j]]) === 'undefined') {\r\n this.collisionMap[tm.durationMap[j]] = [];\r\n }\r\n this.collisionMap[tm.durationMap[j]].push(this.smoMeasure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n isCollision(voiceIx: number, tickIx: number): boolean {\r\n let i = 0;\r\n let j = 0;\r\n let k = 0;\r\n let staffLines: number[] = [];\r\n if (!this.tickmapObject) {\r\n return false;\r\n }\r\n const tick = this.tickmapObject.tickmaps[voiceIx].durationMap[tickIx];\r\n // Just one note, no collision\r\n if (this.collisionMap[tick].length < 2) {\r\n return false;\r\n }\r\n for (i = 0; i < this.collisionMap[tick].length; ++i) {\r\n const note = this.collisionMap[tick][i];\r\n for (j = 0; j < note.pitches.length; ++j) {\r\n const clef: Clef = IsClef(note.clef) ? note.clef : 'treble';\r\n const pitch = note.pitches[j];\r\n const curLine = SmoMusic.pitchToStaffLine(clef, pitch);\r\n for (k = 0;k < staffLines.length; ++k) {\r\n if (Math.abs(curLine - staffLines[k]) < 1) {\r\n return true;\r\n }\r\n }\r\n staffLines.push(curLine);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * convert a smoNote into a vxNote so it can be rasterized\r\n * @param smoNote \r\n * @param tickIndex - used to calculate accidental\r\n * @param voiceIx \r\n * @returns \r\n */\r\n _createVexNote(smoNote: SmoNote, tickIndex: number, voiceIx: number) {\r\n let vexNote: Note | null = null;\r\n let timestamp = new Date().valueOf();\r\n const closestTicks = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n const exactTicks = SmoMusic.ticksToDuration[smoNote.tickCount];\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n const smoNoteParams = {\r\n isTuplet: smoNote.isTuplet, measureIndex: this.smoMeasure.measureNumber.measureIndex,\r\n clef: smoNote.clef,\r\n closestTicks, exactTicks, keys,\r\n noteType: smoNote.noteType };\r\n const { noteParams, duration } = getVexNoteParameters(smoNoteParams);\r\n if (smoNote.noteType === '/') {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n vexNote = getSlashGlyph();\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n } else {\r\n const smoVexStemParams = {\r\n voiceCount: this.smoMeasure.voices.length,\r\n voiceIx,\r\n isAuto: smoNote.flagState === SmoNote.flagStates.auto,\r\n isUp: smoNote.flagState === SmoNote.flagStates.up\r\n }\r\n applyStemDirection(smoVexStemParams, noteParams);\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATA, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n vexNote = new VF.StaveNote(noteParams);\r\n if (voiceIx > 0 && this.isCollision(voiceIx, tickIndex)) {\r\n vexNote.setXShift(-10);\r\n }\r\n if (this.isWholeRest()) {\r\n noteParams.duration = 'wr';\r\n vexNote = new VF.StaveNote(noteParams);\r\n vexNote.setCenterAlignment(true);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATB, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n if (smoNote.fillStyle && !this.printing) {\r\n vexNote.setStyle({ fillStyle: smoNote.fillStyle });\r\n } else if (voiceIx > 0 && !this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#115511\" });\r\n } else if (smoNote.isHidden() && this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#ffffff00\" });\r\n }\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n }\r\n\r\n this._createAccidentals(smoNote, vexNote, tickIndex, voiceIx);\r\n this._createLyric(smoNote, vexNote);\r\n this._createOrnaments(smoNote, vexNote);\r\n this._createJazzOrnaments(smoNote, vexNote);\r\n this._createGraceNotes(smoNote, vexNote);\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATC, new Date().valueOf() - timestamp);\r\n\r\n return vexNote;\r\n }\r\n\r\n _renderArticulations(vix: number) {\r\n const i = 0;\r\n this.smoMeasure.voices[vix].notes.forEach((smoNote) => {\r\n smoNote.articulations.forEach((art) => {\r\n if (smoNote.noteType === 'n') {\r\n const vx = this.noteToVexMap[smoNote.attrs.id];\r\n const position: number = SmoArticulation.positionToVex[art.position];\r\n const vexArt = SmoArticulation.articulationToVex[art.articulation];\r\n const vxArt = new VF.Articulation(vexArt).setPosition(position);\r\n vx.addModifier(vxArt, i);\r\n }\r\n });\r\n });\r\n }\r\n\r\n _renderNoteGlyph(smoNote: SmoNote, textObj: SmoDynamicText) {\r\n var x = this.noteToVexMap[smoNote.attrs.id].getAbsoluteX() + textObj.xOffset;\r\n // the -3 is copied from vexflow textDynamics\r\n var y = this.stave!.getYForLine(textObj.yOffsetLine - 3) + textObj.yOffsetPixels;\r\n let maxh = 0;\r\n const minx = x;\r\n var group = this.context.getContext().openGroup();\r\n group.classList.add(textObj.attrs.id + '-' + smoNote.attrs.id);\r\n group.classList.add(textObj.attrs.id);\r\n // const duration = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n for (var i = 0; i < textObj.text.length; i += 1 ) {\r\n const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]].code,\r\n textObj.fontSize, x, y);\r\n /* const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]],\r\n textObj.fontSize, x, y); */\r\n x += width;\r\n maxh = Math.max(height, maxh); \r\n }\r\n textObj.logicalBox = SvgHelpers.boxPoints(minx, y + this.context.box.y, x - minx, maxh);\r\n textObj.element = group;\r\n this.modifiersToBox.push(textObj);\r\n this.context.getContext().closeGroup();\r\n }\r\n\r\n renderDynamics() {\r\n this.smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((smoNote) => {\r\n const mods = smoNote.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoDynamicText'\r\n );\r\n mods.forEach((btm) => {\r\n const tm = btm as SmoDynamicText;\r\n this._renderNoteGlyph(smoNote, tm);\r\n });\r\n });\r\n });\r\n }\r\n createRepeatSymbol() {\r\n this.voiceNotes = [];\r\n // const vexNote = new VF.GlyphNote('\\uE500', { duration: 'w' }, { line: 2 });\r\n const vexNote = getRepeatBar();\r\n vexNote.setCenterAlignment(true);\r\n this.vexNotes.push(vexNote);\r\n this.voiceNotes.push(vexNote);\r\n }\r\n /**\r\n * create an a array of VF.StaveNote objects to render the active voice.\r\n * @param voiceIx \r\n */\r\n createVexNotes(voiceIx: number) {\r\n let i = 0;\r\n this.voiceNotes = [];\r\n const voice = this.smoMeasure.voices[voiceIx];\r\n for (i = 0;\r\n i < voice.notes.length; ++i) {\r\n const smoNote = voice.notes[i];\r\n const vexNote = this._createVexNote(smoNote, i, voiceIx);\r\n this.noteToVexMap[smoNote.attrs.id] = vexNote;\r\n this.vexNotes.push(vexNote);\r\n this.voiceNotes.push(vexNote);\r\n if (isNaN(smoNote.ticks.numerator) || isNaN(smoNote.ticks.denominator)\r\n || isNaN(smoNote.ticks.remainder)) {\r\n throw ('vxMeasure: NaN in ticks');\r\n }\r\n }\r\n if (!this.smoMeasure.repeatSymbol) {\r\n this._renderArticulations(voiceIx);\r\n }\r\n }\r\n\r\n /**\r\n * Group the notes for beaming and create Vex beam objects\r\n * @param vix - voice index\r\n * @returns \r\n */\r\n createVexBeamGroups(vix: number) {\r\n let keyNoteIx = -1;\r\n let i = 0;\r\n let j = 0;\r\n let stemDirection = VF.Stem.DOWN;\r\n for (i = 0; i < this.smoMeasure.beamGroups.length; ++i) {\r\n const bg = this.smoMeasure.beamGroups[i];\r\n if (bg.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: StemmableNote[] = [];\r\n keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n\r\n // Fix stem bug: key off first non-rest note.\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n if (note.noteType === '/') {\r\n continue;\r\n }\r\n const vexNote = this.noteToVexMap[note.attrs.id];\r\n // some type of redraw condition?\r\n if (!(vexNote instanceof VF.StaveNote || vexNote instanceof VF.GraceNote)) {\r\n return;\r\n }\r\n if (keyNoteIx === j) {\r\n stemDirection = note.flagState === SmoNote.flagStates.auto ?\r\n vexNote.getStemDirection() : toVexStemDirection(note);\r\n }\r\n vexNote.setStemDirection(stemDirection);\r\n vexNotes.push(vexNote); \r\n }\r\n const vexBeam = new VF.Beam(vexNotes);\r\n this.beamToVexMap[bg.attrs.id] = vexBeam;\r\n this.vexBeamGroups.push(vexBeam);\r\n }\r\n }\r\n\r\n /**\r\n * Create the VF tuplet objects based on the smo tuplet objects\r\n * @param vix \r\n */\r\n // \r\n createVexTuplets(vix: number) {\r\n var j = 0;\r\n var i = 0;\r\n this.vexTuplets = [];\r\n this.tupletToVexMap = {};\r\n for (i = 0; i < this.smoMeasure.tuplets.length; ++i) {\r\n const tp = this.smoMeasure.tuplets[i];\r\n if (tp.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: Note[] = [];\r\n for (j = 0; j < tp.notes.length; ++j) {\r\n const smoNote = tp.notes[j];\r\n vexNotes.push(this.noteToVexMap[smoNote.attrs.id]);\r\n }\r\n const location = tp.getStemDirection(this.smoMeasure.clef) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const smoTupletParams = {\r\n vexNotes,\r\n numNotes: tp.numNotes,\r\n notesOccupied: tp.note_ticks_occupied,\r\n location\r\n }\r\n const vexTuplet = getVexTuplets(smoTupletParams);\r\n this.tupletToVexMap[tp.attrs.id] = vexTuplet;\r\n this.vexTuplets.push(vexTuplet);\r\n }\r\n }\r\n\r\n /**\r\n * create the modifiers for the stave itself, bar lines etc.\r\n */\r\n createMeasureModifiers() {\r\n const sb = this.smoMeasure.getStartBarline();\r\n const eb = this.smoMeasure.getEndBarline();\r\n const sym = this.smoMeasure.getRepeatSymbol();\r\n if (!this.stave) {\r\n return;\r\n }\r\n\r\n // don't create a begin bar for any but the 1st measure.\r\n if (this.smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && this.smoMeasure.format.padLeft === 0) {\r\n this.stave.setBegBarType(VF.Barline.type.NONE);\r\n } else {\r\n this.stave.setBegBarType(toVexBarlineType(sb));\r\n }\r\n if (this.smoMeasure.svg.multimeasureLength > 0 && !this.smoMeasure.svg.hideMultimeasure) {\r\n this.stave.setEndBarType(vexBarlineType[this.smoMeasure.svg.multimeasureEndBarline]);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n this.stave.setEndBarType(toVexBarlineType(eb));\r\n }\r\n if (sym && sym.symbol !== SmoRepeatSymbol.symbols.None) {\r\n const rep = new VF.Repetition(toVexSymbol(sym), sym.xOffset + this.smoMeasure.staffX, sym.yOffset);\r\n this.stave.getModifiers().push(rep);\r\n }\r\n const tms = this.smoMeasure.getMeasureText();\r\n // TODO: set font\r\n tms.forEach((tmb: SmoMeasureModifierBase) => {\r\n const tm = tmb as SmoMeasureText;\r\n const offset = tm.position === SmoMeasureText.positions.left ? this.smoMeasure.format.padLeft : 0;\r\n const staveText = createStaveText(tm.text, toVexTextPosition(tm), \r\n {\r\n shiftX: tm.adjustX + offset, shiftY: tm.adjustY, justification: toVexTextJustification(tm)\r\n }\r\n );\r\n this.stave?.addModifier(staveText);\r\n\r\n // hack - we can't create staveText directly so this is the only way I could set the font\r\n const ar = this.stave!.getModifiers();\r\n const vm = ar[ar.length - 1];\r\n vm.setFont(tm.fontInfo);\r\n });\r\n if (this.smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = this.smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n this.stave.setSection(rm.symbol, 0);\r\n }\r\n }\r\n\r\n const tempo = this.smoMeasure.getTempo();\r\n if (tempo && this.smoMeasure.svg.forceTempo) {\r\n this.stave.setTempo(tempo.toVexTempo(), -1 * tempo.yOffset);\r\n const vexTempo = this.stave.getModifiers().find((mod: StaveModifier) => mod.getAttribute('type') === 'StaveTempo');\r\n if (vexTempo) {\r\n vexTempo.setFont({ family: SourceSerifProFont.fontFamily, size: 13, weight: 'bold' });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create all Vex notes and modifiers. We defer the format and rendering so\r\n * we can align across multiple staves\r\n */\r\n preFormat() {\r\n var j = 0;\r\n if (this.smoMeasure.svg.element !== null) {\r\n this.smoMeasure.svg.element.remove();\r\n this.smoMeasure.svg.element = null;\r\n }\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n // Note: need to do this to get it into VEX KS format\r\n const staffX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft;\r\n const staffY = this.smoMeasure.staffY - this.context.box.y;\r\n const key = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.keySignature, 0);\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.canceledKeySignature, 0);\r\n const smoVexStaveParams = {\r\n x: staffX,\r\n y: staffY,\r\n padLeft: this.smoMeasure.format.padLeft,\r\n id: this.smoMeasure.attrs.id,\r\n staffX: this.smoMeasure.staffX,\r\n staffY: this.smoMeasure.staffY,\r\n staffWidth: this.smoMeasure.staffWidth,\r\n forceClef: this.smoMeasure.svg.forceClef,\r\n clef: this.smoMeasure.clef,\r\n forceKey: this.smoMeasure.svg.forceKeySignature,\r\n key,\r\n canceledKey,\r\n startX: this.smoMeasure.svg.maxColumnStartX,\r\n adjX: this.smoMeasure.svg.adjX,\r\n context: this.context.getContext()\r\n }\r\n this.stave = createStave(smoVexStaveParams);\r\n if (this.smoMeasure.svg.forceTimeSignature) {\r\n const ts = this.smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (this.smoMeasure.timeSignature.displayString.length) {\r\n tsString = this.smoMeasure.timeSignature.displayString;\r\n }\r\n this.stave.addTimeSignature(tsString);\r\n }\r\n // Connect it to the rendering context and draw!\r\n this.stave.setContext(this.context.getContext());\r\n\r\n this.createMeasureModifiers();\r\n\r\n this.tickmapObject = this.smoMeasure.createMeasureTickmaps();\r\n this.createCollisionTickmap();\r\n\r\n this.voiceAr = [];\r\n this.vexNotes = [];\r\n this.noteToVexMap = {};\r\n\r\n // If there are multiple voices, add them all to the formatter at the same time so they don't collide\r\n for (j = 0; j < this.smoMeasure.voices.length; ++j) {\r\n const smoVexVoiceParams = {\r\n actualBeats: this.smoMeasure.timeSignature.actualBeats,\r\n beatDuration: this.smoMeasure.timeSignature.beatDuration,\r\n notes: this.vexNotes\r\n }\r\n if (!this.smoMeasure.svg.multimeasureLength && !this.smoMeasure.repeatSymbol) {\r\n this.createVexNotes(j);\r\n smoVexVoiceParams.notes = this.voiceNotes;\r\n this.createVexTuplets(j);\r\n this.createVexBeamGroups(j);\r\n\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n if (this.smoMeasure.repeatSymbol) {\r\n this.createRepeatSymbol();\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n }\r\n\r\n // Need to format for x position, then set y position before drawing dynamics.\r\n this.formatter = new VF.Formatter({ softmaxFactor: this.softmax, globalSoftmax: false });\r\n this.formatter.joinVoices(this.voiceAr);\r\n /* this.voiceAr.forEach((voice) => {\r\n if (this.formatter) {\r\n this.formatter.joinVoices([voice]);\r\n }\r\n });*/\r\n }\r\n /**\r\n * Create the Vex formatter that calculates the X and Y positions of the notes. A formatter\r\n * may actually span multiple staves for justified staves. The notes are drawn in their\r\n * individual vxMeasure objects but formatting is done once for all justified staves\r\n * @param voices Voice objects from VexFlow\r\n * @returns \r\n */\r\n format(voices: Voice[]) {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n if (this.smoMeasure.svg.multimeasureLength > 0) {\r\n this.multimeasureRest = getMultimeasureRest(this.smoMeasure.svg.multimeasureLength);\r\n this.multimeasureRest.setContext(this.context.getContext());\r\n this.multimeasureRest.setStave(this.stave);\r\n return;\r\n }\r\n if (!this.formatter) {\r\n return;\r\n }\r\n const timestamp = new Date().valueOf();\r\n const staffWidth = this.smoMeasure.staffWidth -\r\n (this.smoMeasure.svg.maxColumnStartX + this.smoMeasure.svg.adjRight + this.smoMeasure.format.padLeft) - 10;\r\n this.dbgLeftX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft + this.smoMeasure.svg.adjX;\r\n this.dbgWidth = staffWidth;\r\n this.formatter.format(voices, staffWidth);\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.FORMAT, new Date().valueOf() - timestamp);\r\n }\r\n /**\r\n * render is called after format. Actually draw the things.\r\n */\r\n render() {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n var group = this.context.getContext().openGroup() as SVGSVGElement;\r\n this.smoMeasure.svg.element = group;\r\n var mmClass = this.smoMeasure.getClassId();\r\n var j = 0;\r\n try {\r\n // bound each measure in its own SVG group for easy deletion and mapping to screen coordinate\r\n group.classList.add(this.smoMeasure.attrs.id);\r\n group.classList.add(mmClass);\r\n group.id = this.smoMeasure.attrs.id;\r\n this.stave!.draw();\r\n this.smoMeasure.svg.element = group;\r\n\r\n for (j = 0; j < this.voiceAr.length; ++j) {\r\n this.voiceAr[j].draw(this.context.getContext(), this.stave!);\r\n }\r\n\r\n this.vexBeamGroups.forEach((b) => {\r\n b.setContext(this.context.getContext()).draw();\r\n });\r\n\r\n this.vexTuplets.forEach((tuplet) => {\r\n tuplet.setContext(this.context.getContext()).draw();\r\n });\r\n if (this.multimeasureRest) {\r\n this.multimeasureRest.draw();\r\n }\r\n // this._updateLyricDomSelectors();\r\n this.renderDynamics();\r\n // this.smoMeasure.adjX = this.stave.start_x - (this.smoMeasure.staffX);\r\n\r\n this.context.getContext().closeGroup();\r\n // layoutDebug.setTimestamp(layoutDebug.codeRegions.RENDER, new Date().valueOf() - timestamp);\r\n\r\n this.rendered = true;\r\n if (layoutDebug.mask & layoutDebug.values['adjust']) {\r\n SvgHelpers.debugBoxNoText(this.context.getContext().svg,\r\n SvgHelpers.boxPoints(this.dbgLeftX, \r\n this.smoMeasure.svg.staffY, this.dbgWidth, 40), 'render-x-dbg', 0);\r\n }\r\n } catch (exc) {\r\n console.warn('unable to render measure ' + this.smoMeasure.measureNumber.measureIndex);\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { VxMeasure } from './vxMeasure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, StaffModifierBase, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { leftConnectorVx, rightConnectorVx } from './smoAdapter';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText'\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { SuiScroller } from '../sui/scroller';\r\nimport { VexFlow, Voice, Note, createHairpin, createSlur, createTie } from '../../common/vex';\r\nimport { toVexVolta, vexOptions } from './smoAdapter';\r\nconst VF = VexFlow;\r\n\r\nexport interface VoltaInfo {\r\n smoMeasure: SmoMeasure,\r\n ending: SmoVolta\r\n}\r\nexport interface SuiSystemGroup {\r\n firstMeasure: VxMeasure,\r\n voices: Voice[]\r\n}\r\n/**\r\n * Create a system of staves and draw music on it. This calls the Vex measure\r\n * rendering methods, and also draws all the score and system level stuff like slurs, \r\n * text, aligns the lyrics.\r\n * */\r\nexport class VxSystem {\r\n context: SvgPage;\r\n leftConnector: any[] = [null, null];\r\n score: SmoScore;\r\n vxMeasures: VxMeasure[] = [];\r\n smoMeasures: SmoMeasure[] = [];\r\n lineIndex: number;\r\n maxStaffIndex: number;\r\n maxSystemIndex: number;\r\n minMeasureIndex: number = -1;\r\n maxMeasureIndex: number = 0;\r\n width: number;\r\n staves: SmoSystemStaff[] = [];\r\n box: SvgBox = SvgBox.default;\r\n currentY: number;\r\n topY: number;\r\n clefWidth: number;\r\n ys: number[] = [];\r\n measures: VxMeasure[] = [];\r\n modifiers: any[] = [];\r\n constructor(context: SvgPage, topY: number, lineIndex: number, score: SmoScore) {\r\n this.context = context;\r\n this.lineIndex = lineIndex;\r\n this.score = score;\r\n this.maxStaffIndex = -1;\r\n this.maxSystemIndex = -1;\r\n this.width = -1;\r\n this.staves = [];\r\n this.currentY = 0;\r\n this.topY = topY;\r\n this.clefWidth = 70;\r\n this.ys = [];\r\n }\r\n\r\n getVxMeasure(smoMeasure: SmoMeasure) {\r\n let i = 0;\r\n for (i = 0; i < this.vxMeasures.length; ++i) {\r\n const vm = this.vxMeasures[i];\r\n if (vm.smoMeasure.attrs.id === smoMeasure.attrs.id) {\r\n return vm;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getVxNote(smoNote: SmoNote): Note | null {\r\n let i = 0;\r\n if (!smoNote) {\r\n return null;\r\n }\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (mm.noteToVexMap[smoNote.attrs.id]) {\r\n return mm.noteToVexMap[smoNote.attrs.id];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _updateChordOffsets(note: SmoNote) {\r\n var i = 0;\r\n for (i = 0; i < 3; ++i) {\r\n const chords = note.getLyricForVerse(i, SmoLyric.parsers.chord);\r\n chords.forEach((bchord) => {\r\n const chord = bchord as SmoLyric;\r\n const dom = this.context.svg.getElementById('vf-' + chord.attrs.id);\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + chord.translateX + ' ' + (-1 * chord.translateY) + ')');\r\n }\r\n });\r\n }\r\n }\r\n _lowestYLowestVerse(lyrics: SmoLyric[], vxMeasures: VxMeasure[]) {\r\n // Move each verse down, according to the lowest lyric on that line/verse,\r\n // and the accumulation of the verses above it\r\n let lowestY = 0;\r\n for (var lowVerse = 0; lowVerse < 4; ++lowVerse) {\r\n let maxVerseHeight = 0;\r\n const verseLyrics = lyrics.filter((ll) => ll.verse === lowVerse);\r\n if (lowVerse === 0) {\r\n // first verse, go through list twice. first find lowest points\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n // 'lowest' Y on screen is Y with largest value...\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n lowestY = Math.max(ly + lyric.musicYOffset, lowestY);\r\n }\r\n });\r\n // second offset all to that point\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n } else {\r\n // subsequent verses, first find the tallest lyric\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n maxVerseHeight = Math.max(lyric.logicalBox.height, maxVerseHeight);\r\n }\r\n });\r\n // adjust lowestY to be the verse height below the previous verse\r\n lowestY = lowestY + maxVerseHeight * 1.1; // 1.1 magic number?\r\n // and offset these lyrics\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ### updateLyricOffsets\r\n // Adjust the y position for all lyrics in the line so they are even.\r\n // Also replace '-' with a longer dash do indicate 'until the next measure'\r\n updateLyricOffsets() {\r\n let i = 0;\r\n for (i = 0; i < this.score.staves.length; ++i) {\r\n const tmpI = i;\r\n const lyricsDash: SmoLyric[] = [];\r\n const lyricHyphens: SmoLyric[] = [];\r\n const lyricVerseMap: Record = {};\r\n const lyrics: SmoLyric[] = [];\r\n // is this necessary? They should all be from the current line\r\n const vxMeasures = this.vxMeasures.filter((vx) =>\r\n vx.smoMeasure.measureNumber.staffId === tmpI\r\n );\r\n\r\n // All the lyrics on this line\r\n // The vertical bounds on each line\r\n vxMeasures.forEach((mm) => {\r\n var smoMeasure = mm.smoMeasure;\r\n\r\n // Get lyrics from any voice.\r\n smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n this._updateChordOffsets(note);\r\n note.getTrueLyrics().forEach((ll: SmoLyric) => {\r\n const hasLyric = ll.getText().length > 0 || ll.isHyphenated();\r\n if (hasLyric && ll.logicalBox && !lyricVerseMap[ll.verse]) {\r\n lyricVerseMap[ll.verse] = [];\r\n }else if (hasLyric && !ll.logicalBox) {\r\n console.warn(\r\n `unrendered lyric for note ${note.attrs.id} measure ${smoMeasure.measureNumber.staffId}-${smoMeasure.measureNumber.measureIndex}`);\r\n }\r\n if (hasLyric && ll.logicalBox) {\r\n lyricVerseMap[ll.verse].push(ll);\r\n lyrics.push(ll);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n // calculate y offset so the lyrics all line up\r\n this._lowestYLowestVerse(lyrics, vxMeasures);\r\n const vkey: string[] = Object.keys(lyricVerseMap).sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\r\n vkey.forEach((sverse) => {\r\n const verse = parseInt(sverse, 10);\r\n let hyphenLyric: SmoLyric | null = null;\r\n const lastVerse = lyricVerseMap[verse][lyricVerseMap[verse].length - 1].attrs.id;\r\n lyricVerseMap[verse].forEach((ll: SmoLyric) => {\r\n if (hyphenLyric !== null && hyphenLyric.logicalBox !== null && ll.logicalBox !== null) {\r\n const x = ll.logicalBox.x - (ll.logicalBox.x -\r\n (hyphenLyric.logicalBox.x + hyphenLyric.logicalBox.width)) / 2;\r\n ll.hyphenX = x;\r\n lyricHyphens.push(ll);\r\n }\r\n if (ll.isHyphenated() && ll.logicalBox !== null) {\r\n if (ll.attrs.id === lastVerse) {\r\n // Last word on the system, place the hyphen after the word\r\n const fontSize = SmoScoreText.fontPointSize(ll.fontInfo.size);\r\n ll.hyphenX = ll.logicalBox.x + ll.logicalBox.width + fontSize / 2;\r\n lyricHyphens.push(ll);\r\n } else if (ll.getText().length) {\r\n // place the hyphen 1/2 between next word and this one.\r\n hyphenLyric = ll;\r\n }\r\n } else {\r\n hyphenLyric = null;\r\n }\r\n });\r\n });\r\n lyrics.forEach((lyric) => {\r\n const dom = this.context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + lyric.adjX + ' ' + lyric.adjY + ')');\r\n // Keep track of lyrics that are 'dash'\r\n if (lyric.isDash()) {\r\n lyricsDash.push(lyric);\r\n }\r\n }\r\n });\r\n lyricHyphens.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const text = document.createElementNS(SvgHelpers.namespace, 'text');\r\n text.textContent = '-';\r\n const fontSize = SmoScoreText.fontPointSize(lyric.fontInfo.size);\r\n text.setAttributeNS('', 'x', (lyric.hyphenX - fontSize / 3).toString());\r\n text.setAttributeNS('', 'y', (ly + (lyric.logicalBox.height * 2) / 3).toString());\r\n text.setAttributeNS('', 'font-size', '' + fontSize + 'pt');\r\n parent.appendChild(text);\r\n }\r\n });\r\n lyricsDash.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n const ymax = Math.round(ly + lyric.logicalBox.height / 2);\r\n const offset = Math.round(lyric.logicalBox.width / 2);\r\n line.setAttributeNS('', 'x1', (lyric.logicalBox.x - offset).toString());\r\n line.setAttributeNS('', 'y1', ymax.toString());\r\n line.setAttributeNS('', 'x2', (lyric.logicalBox.x + lyric.logicalBox.width + offset).toString());\r\n line.setAttributeNS('', 'y2', ymax.toString());\r\n line.setAttributeNS('', 'stroke-width', '1');\r\n line.setAttributeNS('', 'fill', 'none');\r\n line.setAttributeNS('', 'stroke', '#999999');\r\n parent.appendChild(line);\r\n const texts = parent.getElementsByTagName('text');\r\n // hide hyphen and replace with dash\r\n if (texts && texts.length) {\r\n const text = texts[0];\r\n text.setAttributeNS('', 'fill', '#fff');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### renderModifier\r\n // render a line-type modifier that is associated with a staff (e.g. slur)\r\n renderModifier(scroller: SuiScroller, modifier: StaffModifierBase,\r\n vxStart: Note | null, vxEnd: Note | null, smoStart: SmoSelection, smoEnd: SmoSelection) {\r\n let xoffset = 0;\r\n const setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n };\r\n if (smoStart && smoStart.note && smoStart.note.noteType === '/') {\r\n return;\r\n } if (smoEnd && smoEnd.note && smoEnd.note.noteType === '/') {\r\n return;\r\n }\r\n // if it is split between lines, render one artifact for each line, with a common class for\r\n // both if it is removed.\r\n if (vxStart) {\r\n const toRemove = this.context.svg.getElementById('vf-' + modifier.attrs.id);\r\n if (toRemove) {\r\n toRemove.remove();\r\n }\r\n }\r\n const artifactId = modifier.attrs.id + '-' + this.lineIndex;\r\n const group = this.context.getContext().openGroup('slur', artifactId);\r\n group.classList.add(modifier.attrs.id);\r\n const measureMod = 'mod-' + smoStart.selector.staff + '-' + smoStart.selector.measure;\r\n const staffMod = 'mod-' + smoStart.selector.staff;\r\n group.classList.add(measureMod);\r\n group.classList.add(staffMod);\r\n if (modifier.ctor === 'SmoStaffHairpin') {\r\n const hp = modifier as SmoStaffHairpin;\r\n if (!vxStart && !vxEnd) {\r\n this.context.getContext().closeGroup();\r\n }\r\n vxStart = setSameIfNull(vxStart, vxEnd);\r\n vxEnd = setSameIfNull(vxEnd, vxStart);\r\n const smoVexHairpinParams = {\r\n vxStart,\r\n vxEnd,\r\n hairpinType: hp.hairpinType,\r\n height: hp.height,\r\n yOffset: hp.yOffset,\r\n leftShiftPx: hp.xOffsetLeft,\r\n rightShiftPx: hp.xOffsetRight\r\n };\r\n const hairpin = createHairpin(smoVexHairpinParams);\r\n hairpin.setContext(this.context.getContext()).setPosition(hp.position).draw();\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const slur = modifier as SmoSlur;\r\n let slurX = slur.xOffset;\r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n const lyric = startNote.longestLyric() as SmoLyric;\r\n if (lyric && lyric.getText()) {\r\n // If there is a lyric, the bounding box of the start note is stretched to the right.\r\n // slide the slur left, and also make it a bit wider.\r\n const xtranslate = (-1 * lyric.getText().length * 6);\r\n xoffset += (xtranslate / 2) - SmoSlur.defaults.xOffset;\r\n }\r\n if (vxStart === null || vxEnd === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n const smoVexSlurParams = {\r\n vxStart, vxEnd,\r\n thickness: slur.thickness,\r\n xShift: slur.xOffset,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n invert: slur.invert,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const curve = createSlur(smoVexSlurParams);\r\n curve.setContext(this.context.getContext()).draw();\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const endNote: SmoNote = smoEnd!.note as SmoNote;\r\n ctie.checkLines(startNote, endNote);\r\n if (ctie.lines.length > 0) {\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n const smoVexTieParams = {\r\n fromLines,\r\n toLines,\r\n firstNote: vxStart,\r\n lastNote: vxEnd,\r\n vexOptions: vexOptions(ctie)\r\n }\r\n const tie = createTie(smoVexTieParams);\r\n tie.setContext(this.context.getContext()).draw();\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket') {\r\n if (vxStart && !vxEnd) {\r\n vxEnd = vxStart;\r\n } else if (vxEnd && !vxStart) {\r\n vxStart = vxEnd;\r\n }\r\n if (vxStart && vxEnd) {\r\n const smoBracket = (modifier as SmoStaffTextBracket);\r\n const bracket = new VF.TextBracket({\r\n start: vxStart, stop: vxEnd, text: smoBracket.text, superscript: smoBracket.superscript, position: smoBracket.position\r\n });\r\n bracket.setLine(smoBracket.line).setContext(this.context.getContext()).draw();\r\n }\r\n }\r\n\r\n this.context.getContext().closeGroup();\r\n if (xoffset) {\r\n const slurBox = this.context.svg.getElementById('vf-' + artifactId) as SVGSVGElement;\r\n if (slurBox) {\r\n SvgHelpers.translateElement(slurBox, xoffset, 0);\r\n }\r\n }\r\n modifier.element = group;\r\n }\r\n\r\n renderEndings(scroller: SuiScroller) {\r\n let j = 0;\r\n let i = 0;\r\n if (this.staves.length < 1) {\r\n return;\r\n }\r\n const voltas = this.staves[0].getVoltaMap(this.minMeasureIndex, this.maxMeasureIndex);\r\n voltas.forEach((ending) => {\r\n ending.elements.forEach((element: SVGSVGElement) => {\r\n element.remove();\r\n });\r\n ending.elements = [];\r\n });\r\n for (j = 0; j < this.smoMeasures.length; ++j) {\r\n let pushed = false;\r\n const smoMeasure = this.smoMeasures[j];\r\n // Only draw volta on top staff of system\r\n if (smoMeasure.svg.rowInSystem > 0) {\r\n continue;\r\n }\r\n const vxMeasure = this.getVxMeasure(smoMeasure);\r\n const voAr: VoltaInfo[] = [];\r\n for (i = 0; i < voltas.length && vxMeasure !== null; ++i) {\r\n const ending = voltas[i];\r\n const mix = smoMeasure.measureNumber.measureIndex;\r\n if ((ending.startBar <= mix) && (ending.endBar >= mix) && vxMeasure.stave !== null) {\r\n const group = this.context.getContext().openGroup(null, ending.attrs.id);\r\n group.classList.add(ending.attrs.id);\r\n group.classList.add(ending.endingId);\r\n ending.elements.push(group);\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vxVolta = new VF.Volta(vtype, ending.number.toString(), smoMeasure.staffX + ending.xOffsetStart, ending.yOffset);\r\n vxVolta.setContext(this.context.getContext()).draw(vxMeasure.stave, -1 * ending.xOffsetEnd);\r\n this.context.getContext().closeGroup();\r\n // ending.logicalBox = this.context.offsetBbox(group);\r\n if (!pushed) {\r\n voAr.push({ smoMeasure, ending });\r\n pushed = true;\r\n }\r\n vxMeasure.stave.getModifiers().push(vxVolta);\r\n }\r\n }\r\n // Adjust real height of measure to match volta height\r\n for (i = 0; i < voAr.length; ++i) {\r\n const mm = voAr[i].smoMeasure;\r\n const ending = voAr[i].ending;\r\n if (ending.logicalBox !== null) {\r\n const delta = mm.svg.logicalBox.y - ending.logicalBox.y;\r\n if (delta > 0) {\r\n mm.setBox(SvgHelpers.boxPoints(\r\n mm.svg.logicalBox.x, mm.svg.logicalBox.y - delta, mm.svg.logicalBox.width, mm.svg.logicalBox.height + delta),\r\n 'vxSystem adjust for volta');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMeasureByIndex(measureIndex: number, staffId: number) {\r\n let i = 0;\r\n for (i = 0; i < this.smoMeasures.length; ++i) {\r\n const mm = this.smoMeasures[i];\r\n if (measureIndex === mm.measureNumber.measureIndex && staffId === mm.measureNumber.staffId) {\r\n return mm;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // ## renderMeasure\r\n // ## Description:\r\n // Create the graphical (VX) notes and render them on svg. Also render the tuplets and beam\r\n // groups\r\n renderMeasure(smoMeasure: SmoMeasure, printing: boolean) {\r\n if (smoMeasure.svg.hideMultimeasure) {\r\n return;\r\n }\r\n const measureIndex = smoMeasure.measureNumber.measureIndex;\r\n if (this.minMeasureIndex < 0 || this.minMeasureIndex > measureIndex) {\r\n this.minMeasureIndex = measureIndex;\r\n }\r\n if (this.maxMeasureIndex < measureIndex) {\r\n this.maxMeasureIndex = measureIndex;\r\n }\r\n let brackets = false;\r\n const staff = this.score.staves[smoMeasure.measureNumber.staffId];\r\n const staffId = staff.staffId;\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const selection = SmoSelection.measureSelection(this.score, staff.staffId, smoMeasure.measureNumber.measureIndex);\r\n this.smoMeasures.push(smoMeasure);\r\n if (this.staves.length <= staffId) {\r\n this.staves.push(staff);\r\n }\r\n if (selection === null) {\r\n return;\r\n }\r\n let softmax = selection.measure.format.proportionality;\r\n if (softmax === SmoMeasureFormat.defaultProportionality) {\r\n softmax = this.score.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n const vxMeasure: VxMeasure = new VxMeasure(this.context, selection, printing, softmax);\r\n\r\n // create the vex notes, beam groups etc. for the measure\r\n vxMeasure.preFormat();\r\n this.vxMeasures.push(vxMeasure);\r\n\r\n const lastStaff = (staffId === this.score.staves.length - 1);\r\n const smoGroupMap: Record = {};\r\n const adjXMap: Record = {};\r\n const vxMeasures = this.vxMeasures.filter((mm) => !mm.smoMeasure.svg.hideEmptyMeasure);\r\n // If this is the last staff in the column, render the column with justification\r\n if (lastStaff) {\r\n vxMeasures.forEach((mm) => {\r\n if (typeof(adjXMap[mm.smoMeasure.measureNumber.systemIndex]) === 'undefined') {\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = mm.smoMeasure.svg.adjX;\r\n }\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = Math.max(adjXMap[mm.smoMeasure.measureNumber.systemIndex], mm.smoMeasure.svg.adjX);\r\n });\r\n vxMeasures.forEach((vv: VxMeasure) => {\r\n if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure) {\r\n vv.vexNotes.forEach((vnote) => {\r\n vnote.setXShift(vnote.getXShift() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);\r\n });\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n const justifyGroup: string = (systemGroup && vv.smoMeasure.format.autoJustify) ? systemGroup.attrs.id : vv.selection.staff.attrs.id;\r\n if (!smoGroupMap[justifyGroup]) {\r\n smoGroupMap[justifyGroup] = { firstMeasure: vv, voices: [] };\r\n }\r\n smoGroupMap[justifyGroup].voices =\r\n smoGroupMap[justifyGroup].voices.concat(vv.voiceAr);\r\n }\r\n });\r\n }\r\n const keys = Object.keys(smoGroupMap);\r\n keys.forEach((key) => {\r\n smoGroupMap[key].firstMeasure.format(smoGroupMap[key].voices);\r\n });\r\n if (lastStaff) {\r\n vxMeasures.forEach((vv) => {\r\n if (!vv.rendered) {\r\n vv.render();\r\n }\r\n });\r\n }\r\n // Keep track of the y coordinate for the nth staff\r\n const renderedConnection: Record = {};\r\n\r\n if (systemIndex === 0 && lastStaff) {\r\n if (staff.bracketMap[this.lineIndex]) {\r\n staff.bracketMap[this.lineIndex].forEach((element) => {\r\n element.remove();\r\n });\r\n }\r\n staff.bracketMap[this.lineIndex] = [];\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('lineBracket-' + this.lineIndex);\r\n group.classList.add('lineBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n vxMeasures.forEach((vv) => {\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n if (systemGroup && !renderedConnection[systemGroup.attrs.id] && \r\n !vv.smoMeasure.svg.hideEmptyMeasure) {\r\n renderedConnection[systemGroup.attrs.id] = 1;\r\n const startSel = this.vxMeasures[systemGroup.startSelector.staff];\r\n const endSel = this.vxMeasures[systemGroup.endSelector.staff];\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(leftConnectorVx(systemGroup));\r\n c1.setContext(this.context.getContext()).draw();\r\n brackets = true;\r\n }\r\n }\r\n });\r\n if (!brackets && vxMeasures.length > 1) {\r\n const c2 = new VF.StaveConnector(vxMeasures[0].stave!, vxMeasures[vxMeasures.length - 1].stave!);\r\n c2.setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n }\r\n // draw outer brace on parts with multiple staves (e.g. keyboards)\r\n vxMeasures.forEach((vv) => {\r\n if (vv.selection.staff.partInfo.stavesAfter > 0) {\r\n if (this.vxMeasures.length > vv.selection.selector.staff + 1) {\r\n const endSel = this.vxMeasures[vv.selection.selector.staff + 1];\r\n const startSel = vv;\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(VF.StaveConnector.type.BRACE);\r\n c1.setContext(this.context.getContext()).draw(); \r\n }\r\n }\r\n };\r\n });\r\n this.context.getContext().closeGroup();\r\n } else if (lastStaff && smoMeasure.measureNumber.measureIndex + 1 < staff.measures.length) {\r\n if (staff.measures[smoMeasure.measureNumber.measureIndex + 1].measureNumber.systemIndex === 0) {\r\n const endMeasure = vxMeasure;\r\n const startMeasure = vxMeasures.find((vv) => vv.selection.selector.staff === 0 &&\r\n vv.selection.selector.measure === vxMeasure.selection.selector.measure && \r\n vv.smoMeasure.svg.hideEmptyMeasure === false);\r\n if (endMeasure && endMeasure.stave && startMeasure && startMeasure.stave) {\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('endBracket-' + this.lineIndex);\r\n group.classList.add('endBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n const c2 = new VF.StaveConnector(startMeasure.stave, endMeasure.stave)\r\n .setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n }\r\n // keep track of left-hand side for system connectors\r\n if (systemIndex === 0) {\r\n if (staffId === 0) {\r\n this.leftConnector[0] = vxMeasure.stave;\r\n } else if (staffId > this.maxStaffIndex) {\r\n this.maxStaffIndex = staffId;\r\n this.leftConnector[1] = vxMeasure.stave;\r\n }\r\n } else if (smoMeasure.measureNumber.systemIndex > this.maxSystemIndex) {\r\n this.maxSystemIndex = smoMeasure.measureNumber.systemIndex;\r\n }\r\n this.measures.push(vxMeasure);\r\n }\r\n}\r\n","/**\r\n * definitions shared by all SMO types\r\n * @module /smo/data/common\r\n */\r\n/**\r\n * Same as attrs object in Vex objects.\r\n * @param id - unique identifier, can be used in DOM elements\r\n * @param type - a little bit redundate with `ctor` in `SmoObjectParams`\r\n */\r\nexport interface SmoAttrs {\r\n id: string,\r\n type: string\r\n}\r\n\r\nvar nextId = 32768;\r\nexport const getId = () => `smo` + (nextId++).toString();\r\n/**\r\n * All note, measure, staff, and score objects have\r\n * a serialize method and are deserializable with constructor `ctor`\r\n */\r\nexport interface SmoObjectParams {\r\n ctor: string,\r\n attrs?: SmoAttrs\r\n}\r\n\r\n/**\r\n * Note duration. The same abstraction used by vex, except here denominator is\r\n * always 1. remainder is used to reconstruct non-tuplets from tuplets.\r\n * @param numerator - duration, 4096 is 1/4 note\r\n * @param denominator - always 1 for SMO objects\r\n * @param remainder - used for tuplets whose duration doesn't divide evenly\r\n */\r\nexport interface Ticks {\r\n numerator: number,\r\n denominator: number,\r\n remainder: number\r\n}\r\n\r\n/**\r\n * constraint for SmoPitch.letter value, in lower case\r\n */\r\nexport type PitchLetter = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g';\r\n\r\nexport function IsPitchLetter(letter: PitchLetter | string): letter is PitchLetter {\r\n return letter.length === 1 && letter[0] >= 'a' && letter[0] <= 'g';\r\n}\r\n\r\n/**\r\n * PitchKey is a SmoPitch, without the octave\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n */\r\nexport interface PitchKey {\r\n letter: PitchLetter,\r\n accidental: string\r\n}\r\n/**\r\n * Represents a single pitch in Smo object model.\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n * @param octave - standard octave\r\n * @param cautionary? - can be used for courtesy accidental\r\n */\r\nexport interface Pitch {\r\n letter: PitchLetter,\r\n accidental: string,\r\n octave: number,\r\n cautionary?: boolean,\r\n forced?: boolean,\r\n role?: string\r\n}\r\n\r\n/**\r\n * A tuple indicating measure location in the score:\r\n * @param measureIndex - the actual offset from the first measure\r\n * @param localIndex - the index as shown to the user, considers renumbering\r\n * @param sytemIndex - which bar (column) of a system this measure is\r\n * @param staffId - which staff (row) of a system this measure is\r\n */\r\nexport interface MeasureNumber {\r\n measureIndex: number,\r\n localIndex: number,\r\n systemIndex: number,\r\n staffId: number\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\nexport class SvgPoint {\r\n x: number;\r\n y: number;\r\n static get default() {\r\n return { x: 0, y: 0 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\n export class SvgBox {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n static get default(): SvgBox {\r\n return { x: 0, y: 0, width: -1, height: -1 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n this.width = -1;\r\n this.height = -1;\r\n }\r\n}\r\n/**\r\n * kind of a pointless class...\r\n */\r\nexport interface SvgDimensions {\r\n width: number,\r\n height: number\r\n}\r\n/**\r\n * A `Transposable` is an abstraction of a note.\r\n * Can be passed into methods that transform pitches for both\r\n * grace notes and normal notes.\r\n * @param pitches - SMO pitch type\r\n * @param noteType - same convention as VexFlow, 'n' for note, 'r' for rest\r\n * @param renderId - ID for the containing SVG group, used to map UI elements\r\n * @param renderedBox - bounding box in client coordinates\r\n * @param logicalBox - bounding box in SVG coordinates\r\n */\r\nexport interface Transposable {\r\n pitches: Pitch[],\r\n noteType: string,\r\n renderId: string | null,\r\n logicalBox: SvgBox | null\r\n}\r\n\r\n/**\r\n * All note, measure etc. modifiers have these attributes. The SVG info\r\n * is for the tracker to track the artifacts in the UI (mouse events, etc)\r\n * @param ctor - constructor name for deserialize\r\n * @param logicalBox - bounding box in SVG coordinates\r\n * @param attr - unique ID, simlar to vex object attrs field\r\n */\r\nexport interface SmoModifierBase {\r\n ctor: string,\r\n logicalBox: SvgBox | null,\r\n attrs: SmoAttrs\r\n}\r\n\r\n/**\r\n * Renderable is just a thing that has a bounding box\r\n */\r\nexport interface Renderable {\r\n logicalBox: SvgBox | null | undefined\r\n}\r\n/**\r\n * Restriction from string to supported clefs\r\n */\r\nexport type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n | 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n\r\nexport var Clefs: Clef[] = ['treble' , 'bass' , 'tenor' , 'alto' , 'soprano' , 'percussion'\r\n, 'mezzo-soprano' , 'baritone-c' , 'baritone-f' , 'subbass' , 'french'];\r\n\r\nexport function IsClef(clef: Clef | string): clef is Clef {\r\n return Clefs.findIndex((x) => clef === x) >= 0;\r\n}\r\n\r\n/**\r\n * Most event handling in SMO is an 'any' from jquery, but\r\n * key events are sometimes narrowed to the common browser key event\r\n */\r\nexport interface KeyEvent {\r\n type: string,\r\n shiftKey: boolean,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n key: string,\r\n keyCode: string,\r\n code: string,\r\n event: string | null\r\n}\r\n\r\nexport interface TickAccidental {\r\n duration: number,\r\n pitch: Pitch\r\n}\r\n\r\n/**\r\n * Used to create {@link MeasureTickmaps}\r\n */\r\nexport interface AccidentalArray {\r\n duration: string | number,\r\n pitches: Record\r\n}\r\n\r\nexport interface AccidentalDisplay {\r\n symbol: string,\r\n courtesy: boolean,\r\n forced: boolean\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Contains definition and supporting classes for {@link SmoMeasure}.\r\n * Most of the engraving is done at the measure level. Measure contains multiple (at least 1)\r\n * voices, which in turn contain notes. Each measure also contains formatting information. This\r\n * is mostly serialized outside of measure (in score), since columns and often an entire region\r\n * share measure formatting. Measures also contain modifiers like barlines. Tuplets and beam groups\r\n * are contained at the measure level.\r\n * @module /smo/data/measure\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport {\r\n SmoBarline, SmoMeasureModifierBase, SmoRepeatSymbol, SmoTempoText, SmoMeasureFormat,\r\n SmoVolta, SmoRehearsalMarkParams, SmoRehearsalMark, SmoTempoTextParams, TimeSignature,\r\n TimeSignatureParametersSer, SmoMeasureFormatParamsSer, SmoTempoTextParamsSer\r\n} from './measureModifiers';\r\nimport { SmoNote, NoteType, SmoNoteParamsSer } from './note';\r\nimport { SmoTuplet, SmoTupletParamsSer, SmoTupletParams } from './tuplet';\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { TickMap } from '../xform/tickMap';\r\nimport { MeasureNumber, SvgBox, SmoAttrs, Pitch, PitchLetter, Clef, \r\n TickAccidental, AccidentalArray, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n/**\r\n * Voice is just a container for {@link SmoNote}\r\n */\r\nexport interface SmoVoice {\r\n notes: SmoNote[]\r\n}\r\n\r\nexport interface SmoVoiceSer {\r\n notes: SmoNoteParamsSer[]\r\n}\r\n/**\r\n * TickMappable breaks up a circular dependency on modifiers\r\n * like @SmoDuration\r\n */\r\nexport interface TickMappable {\r\n voices: SmoVoice[],\r\n keySignature: string\r\n}\r\n\r\nexport interface MeasureTick {\r\n voiceIndex: number,\r\n tickIndex: number\r\n}\r\n\r\n/**\r\n * Break up a circlar dependency with {@link SmoBeamGroup}\r\n */\r\nexport interface ISmoBeamGroup {\r\n notes: SmoNote[],\r\n voice: number,\r\n attrs: SmoAttrs\r\n}\r\n/**\r\n * geometry information about the current measure for rendering and\r\n * score layout.\r\n * @internal\r\n */\r\nexport interface MeasureSvg {\r\n staffWidth: number,\r\n unjustifiedWidth: number,\r\n adjX: number, // The start point of the music in the stave (after time sig, etc)\r\n maxColumnStartX: number,\r\n staffX: number, // The left-most x position of the staff\r\n staffY: number,\r\n logicalBox: SvgBox,\r\n yTop: number,\r\n adjRight: number,\r\n history: string[],\r\n lineIndex: number,\r\n pageIndex: number,\r\n rowInSystem: number,\r\n forceClef: boolean,\r\n forceKeySignature: boolean,\r\n forceTimeSignature: boolean,\r\n forceTempo: boolean,\r\n hideEmptyMeasure: boolean,\r\n hideMultimeasure: boolean,\r\n multimeasureLength: number,\r\n multimeasureEndBarline: number,\r\n element: SVGSVGElement | null\r\n}\r\n\r\n/**\r\n * Interface for a {@link TickMap} for each voice\r\n * for formatting\r\n */\r\nexport interface MeasureTickmaps {\r\n tickmaps: TickMap[],\r\n accidentalMap: Record>,\r\n accidentalArray: AccidentalArray[]\r\n}\r\n/**\r\n * Column-mapped modifiers, managed by the {@link SmoScore}\r\n */\r\nexport interface ColumnMappedParams {\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n timeSignature: any,\r\n keySignature: string,\r\n tempo: any\r\n}\r\n// @internal\r\nexport type SmoMeasureNumberParam = 'transposeIndex' | 'activeVoice' | 'lines' | 'repeatCount';\r\n// @internal\r\nexport const SmoMeasureNumberParams: SmoMeasureNumberParam[] = ['transposeIndex', 'activeVoice', 'lines', 'repeatCount'];\r\n// @internal\r\nexport type SmoMeasureStringParam = 'keySignature';\r\n// @internal\r\nexport const SmoMeasureStringParams: SmoMeasureStringParam[] = ['keySignature'];\r\n/**\r\n * constructor parameters for a {@link SmoMeasure}. Usually you will call\r\n * {@link SmoMeasure.defaults}, and modify the parameters you need to change.\r\n *\r\n * @param timeSignature\r\n * @param keySignature\r\n * @param tuplets\r\n * @param transposeIndex calculated from {@link SmoPartInfo} for non-concert-key instruments\r\n * @param lines number of lines in the stave\r\n * @param staffY Y coordinate (UL corner) of the measure stave\r\n * @param measureNumber combination configured/calculated measure number\r\n * @param clef\r\n * @param voices\r\n * @param activeVoice the active voice in the editor\r\n * @param tempo\r\n * @param format measure format, is managed by the score\r\n * @param modifiers All measure modifiers that5 aren't format, timeSignature or tempo\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureParams {\r\n timeSignature: TimeSignature,\r\n keySignature: string,\r\n tuplets: SmoTuplet[],\r\n transposeIndex: number,\r\n lines: number,\r\n staffY: number,\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: MeasureNumber,\r\n clef: Clef,\r\n voices: SmoVoice[],\r\n activeVoice: number,\r\n tempo: SmoTempoText,\r\n format: SmoMeasureFormat | null,\r\n modifiers: SmoMeasureModifierBase[],\r\n repeatSymbol: boolean,\r\n repeatCount: number\r\n}\r\n\r\n/**\r\n * The serializeable bits of SmoMeasure. Some parameters are \r\n * mapped by the stave if the don't change every measure, e.g.\r\n * time signature.\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * id of the measure\r\n */\r\n attrs: SmoAttrs;\r\n /**\r\n * time signature serialization\r\n */\r\n timeSignature?: TimeSignatureParametersSer,\r\n /**\r\n * key signature\r\n */\r\n keySignature?: string,\r\n /**\r\n * a list of tuplets (serialized)\r\n */\r\n tuplets: SmoTupletParamsSer[],\r\n /**\r\n * transpose the notes up/down. TODO: this should not be serialized\r\n * as its part of the instrument parameters\r\n */\r\n transposeIndex: number,\r\n /**\r\n * lines in the staff (e.g. percussion)\r\n */\r\n lines: number,\r\n /**\r\n * y coordinate of stave. TODO: this should not be serialized\r\n * since it is calculated as part of layout\r\n */\r\n staffY: number,\r\n /**\r\n * measure number, absolute and relative/remapped\r\n */\r\n measureNumber: MeasureNumber,\r\n /**\r\n * start clef\r\n */\r\n clef: Clef,\r\n /**\r\n * voices contain notes\r\n */\r\n voices: SmoVoiceSer[],\r\n /**\r\n * tempo at this point\r\n */\r\n tempo: SmoTempoTextParamsSer,\r\n /**\r\n * format customizations\r\n */\r\n format: SmoMeasureFormatParamsSer | null,\r\n /**\r\n * all other modifiers (barlines, etc)\r\n */\r\n modifiers: SmoMeasureModifierBase[]\r\n}\r\n\r\n/**\r\n * Only arrays and measure numbers are serilialized with default values.\r\n * @param params - result of serialization\r\n * @returns \r\n */\r\nfunction isSmoMeasureParamsSer(params: Partial):params is SmoMeasureParamsSer {\r\n if (!Array.isArray(params.voices) || \r\n !Array.isArray(params.tuplets) || !Array.isArray(params.modifiers) ||\r\n typeof(params?.measureNumber?.measureIndex) !== 'number') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Data for a measure of music. Many rules of musical engraving are\r\n * enforced at a measure level: the duration of notes, accidentals, etc.\r\n * \r\n * Measures contain {@link SmoNote}, {@link SmoTuplet}, and {@link SmoBeamGroup}\r\n * Measures are contained in {@link SmoSystemStaff}\r\n * @category SmoObject\r\n */\r\nexport class SmoMeasure implements SmoMeasureParams, TickMappable {\r\n static get timeSignatureDefault(): TimeSignature {\r\n return new TimeSignature(TimeSignature.defaults);\r\n }\r\n static defaultDupleDuration: number = 4096;\r\n static defaultTripleDuration: number = 2048 * 3;\r\n // @internal\r\n static readonly _defaults: SmoMeasureParams = {\r\n timeSignature: SmoMeasure.timeSignatureDefault,\r\n keySignature: 'C',\r\n tuplets: [],\r\n transposeIndex: 0,\r\n modifiers: [],\r\n staffY: 40,\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n },\r\n clef: 'treble',\r\n lines: 5,\r\n voices: [],\r\n format: new SmoMeasureFormat(SmoMeasureFormat.defaults),\r\n activeVoice: 0,\r\n tempo: new SmoTempoText(SmoTempoText.defaults),\r\n repeatSymbol: false,\r\n repeatCount: 0 \r\n }\r\n\r\n /**\r\n * Default constructor parameters. Defaults are always copied so the\r\n * caller can modify them to create a new measure.\r\n * @returns constructor params for a new measure\r\n */\r\n static get defaults(): SmoMeasureParams {\r\n const proto: any = JSON.parse(JSON.stringify(SmoMeasure._defaults));\r\n proto.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n proto.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n return proto;\r\n }\r\n // @ignore\r\n static convertLegacyTimeSignature(ts: string) {\r\n const rv = new TimeSignature(TimeSignature.defaults);\r\n rv.timeSignature = ts;\r\n return rv;\r\n }\r\n timeSignature: TimeSignature = SmoMeasure.timeSignatureDefault;\r\n /**\r\n * Overrides display of actual time signature, in the case of\r\n * pick-up notes where the actual and displayed durations are different\r\n */\r\n keySignature: string = '';\r\n canceledKeySignature: string = '';\r\n tuplets: SmoTuplet[] = [];\r\n repeatSymbol: boolean = false;\r\n repeatCount: number = 0;\r\n /**\r\n * Adjust for non-concert pitch intstruments\r\n */\r\n transposeIndex: number = 0;\r\n modifiers: SmoMeasureModifierBase[] = [];\r\n /**\r\n * Row, column, and custom numbering information about this measure.\r\n */\r\n measureNumber: MeasureNumber = {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n };\r\n clef: Clef = 'treble';\r\n voices: SmoVoice[] = [];\r\n /**\r\n * the active voice in the editor, if there are multiple voices\r\n * */\r\n activeVoice: number = 0;\r\n tempo: SmoTempoText;\r\n beamGroups: ISmoBeamGroup[] = [];\r\n lines: number = 5;\r\n /**\r\n * Runtime information about rendering\r\n */\r\n svg: MeasureSvg;\r\n /**\r\n * Measure-specific formatting parameters.\r\n */\r\n format: SmoMeasureFormat;\r\n /**\r\n * Information for identifying this object\r\n */\r\n attrs: SmoAttrs;\r\n\r\n /**\r\n * Fill in components. We assume the modifiers are already constructed,\r\n * e.g. by deserialize or the calling function.\r\n * @param params\r\n */\r\n constructor(params: SmoMeasureParams) {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n this.svg = {\r\n staffWidth: 0,\r\n unjustifiedWidth: 0,\r\n staffX: 0,\r\n staffY: 0,\r\n logicalBox: {\r\n x: 0, y: 0, width: 0, height: 0\r\n },\r\n yTop: 0,\r\n adjX: 0,\r\n maxColumnStartX: 0,\r\n adjRight: 0,\r\n history: [],\r\n lineIndex: 0,\r\n pageIndex: 0,\r\n rowInSystem: 0,\r\n forceClef: false,\r\n forceKeySignature: false,\r\n forceTimeSignature: false,\r\n forceTempo: false,\r\n hideEmptyMeasure: false,\r\n hideMultimeasure: false,\r\n multimeasureLength: 0,\r\n multimeasureEndBarline: SmoBarline.barlines['singleBar'],\r\n element: null\r\n };\r\n\r\n const defaults = SmoMeasure.defaults;\r\n SmoMeasureNumberParams.forEach((param) => {\r\n if (typeof (params[param]) !== 'undefined') {\r\n this[param] = params[param];\r\n }\r\n });\r\n SmoMeasureStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defaults[param];\r\n });\r\n this.clef = params.clef;\r\n this.repeatSymbol = params.repeatSymbol;\r\n this.measureNumber = JSON.parse(JSON.stringify(params.measureNumber));\r\n if (params.tempo) {\r\n this.tempo = new SmoTempoText(params.tempo);\r\n }\r\n // Handle legacy time signature format\r\n if (params.timeSignature) {\r\n const tsAny = params.timeSignature as any;\r\n if (typeof (tsAny) === 'string') {\r\n this.timeSignature = SmoMeasure.convertLegacyTimeSignature(tsAny);\r\n } else {\r\n this.timeSignature = TimeSignature.createFromPartial(tsAny);\r\n }\r\n }\r\n this.voices = params.voices ? params.voices : [];\r\n this.tuplets = params.tuplets ? params.tuplets : [];\r\n this.modifiers = params.modifiers ? params.modifiers : defaults.modifiers;\r\n this.setDefaultBarlines();\r\n this.keySignature = SmoMusic.vexKeySigWithOffset(this.keySignature, this.transposeIndex);\r\n\r\n if (!(params.format)) {\r\n this.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n this.format.measureIndex = this.measureNumber.measureIndex;\r\n } else {\r\n this.format = new SmoMeasureFormat(params.format);\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoMeasure'\r\n };\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get defaultAttributes() {\r\n return [\r\n 'keySignature', \r\n 'measureNumber',\r\n 'activeVoice', 'clef', 'transposeIndex',\r\n 'format', 'rightMargin', 'lines', 'repeatSymbol', 'repeatCount'\r\n ];\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get formattingOptions() {\r\n return ['customStretch', 'customProportion', 'autoJustify', 'systemBreak',\r\n 'pageBreak', 'padLeft'];\r\n }\r\n // @internal\r\n // used for serialization\r\n static get columnMappedAttributes() {\r\n return ['timeSignature', 'keySignature', 'tempo'];\r\n }\r\n static get serializableAttributes() {\r\n const rv: any = [];\r\n SmoMeasure.defaultAttributes.forEach((attr) => {\r\n if (SmoMeasure.columnMappedAttributes.indexOf(attr) < 0) {\r\n rv.push(attr);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n // Return true if the time signatures are the same, for display purposes (e.g. if a time sig change\r\n // is required)\r\n */\r\n static timeSigEqual(o1: TimeSignature, o2: TimeSignature) {\r\n return o1.timeSignature === o2.timeSignature && o1.useSymbol === o2.useSymbol;\r\n }\r\n\r\n /**\r\n * @internal\r\n * @returns column mapped parameters, serialized. caller will\r\n * decide if the parameters need to be persisted\r\n */\r\n serializeColumnMapped(): ColumnMappedParams {\r\n //\r\n return {\r\n timeSignature: this.timeSignature.serialize(),\r\n keySignature: this.keySignature,\r\n tempo: this.tempo.serialize()\r\n };\r\n }\r\n\r\n /**\r\n * Convert this measure object to a JSON object, recursively serializing all the notes,\r\n * note modifiers, etc.\r\n */\r\n serialize(): SmoMeasureParamsSer {\r\n const params: Partial = {};\r\n let ser = true;\r\n smoSerialize.serializedMergeNonDefault(SmoMeasure.defaults, SmoMeasure.serializableAttributes, this, params);\r\n // measure number can't be defaulted b/c tempos etc. can map to default measure\r\n params.measureNumber = JSON.parse(JSON.stringify(this.measureNumber));\r\n params.tuplets = [];\r\n params.voices = [];\r\n params.modifiers = [];\r\n\r\n this.tuplets.forEach((tuplet) => {\r\n params.tuplets!.push(tuplet.serialize());\r\n });\r\n\r\n this.voices.forEach((voice) => {\r\n const obj: any = {\r\n notes: []\r\n };\r\n voice.notes.forEach((note) => {\r\n obj.notes.push(note.serialize());\r\n });\r\n params.voices!.push(obj);\r\n });\r\n\r\n this.modifiers.forEach((modifier) => {\r\n ser = true;\r\n /* don't serialize default modifiers */\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.start &&\r\n (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.end\r\n && (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoTempoText') {\r\n // we don't save tempo text as a modifier anymore\r\n ser = false;\r\n } else if ((modifier as SmoRepeatSymbol).ctor === 'SmoRepeatSymbol' && (modifier as SmoRepeatSymbol).position === SmoRepeatSymbol.positions.start\r\n && (modifier as SmoRepeatSymbol).symbol === SmoRepeatSymbol.symbols.None) {\r\n ser = false;\r\n }\r\n if (ser) {\r\n params.modifiers!.push(modifier.serialize());\r\n }\r\n });\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw 'invalid measure';\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * restore a serialized measure object. Usually called as part of deserializing a score,\r\n * but can also be used to restore a measure due to an undo operation. Recursively\r\n * deserialize all the notes and modifiers to construct a new measure.\r\n * @param jsonObj the serialized SmoMeasure\r\n * @returns\r\n */\r\n static deserialize(jsonObj: SmoMeasureParamsSer): SmoMeasure {\r\n let j = 0;\r\n let i = 0;\r\n const voices: SmoVoice[] = [];\r\n const noteSum = [];\r\n for (j = 0; j < jsonObj.voices.length; ++j) {\r\n const voice = jsonObj.voices[j];\r\n const notes: SmoNote[] = [];\r\n voices.push({\r\n notes\r\n });\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const noteParams = voice.notes[i];\r\n const smoNote = SmoNote.deserialize(noteParams);\r\n notes.push(smoNote);\r\n noteSum.push(smoNote);\r\n }\r\n }\r\n\r\n const tuplets = [];\r\n for (j = 0; j < jsonObj.tuplets.length; ++j) {\r\n const tupJson = SmoTuplet.defaults;\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, jsonObj.tuplets[j], tupJson);\r\n const noteAr = noteSum.filter((nn: any) =>\r\n nn.isTuplet && nn.tuplet.id === tupJson.attrs!.id);\r\n\r\n // Bug fix: A tuplet with no notes may be been overwritten\r\n // in a copy/paste operation\r\n if (noteAr.length > 0) {\r\n tupJson.notes = noteAr;\r\n const tuplet = new SmoTuplet(tupJson);\r\n tuplets.push(tuplet);\r\n }\r\n }\r\n\r\n const modifiers: SmoMeasureModifierBase[] = [];\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const modifier: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modParams);\r\n modifiers.push(modifier);\r\n });\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, jsonObj, params);\r\n\r\n // explode column-mapped\r\n if (jsonObj.tempo) {\r\n params.tempo = SmoTempoText.deserialize(jsonObj.tempo);\r\n } else {\r\n params.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n\r\n // timeSignatureString is now part of timeSignature. upconvert old scores\r\n let timeSignatureString = '';\r\n const jsonLegacy = (jsonObj as any);\r\n if (typeof(jsonLegacy.timeSignatureString) === 'string' && jsonLegacy.timeSignatureString.length > 0) {\r\n timeSignatureString = jsonLegacy.timeSignatureString;\r\n }\r\n if (jsonObj.timeSignature) {\r\n if (timeSignatureString.length) {\r\n jsonObj.timeSignature.displayString = timeSignatureString; \r\n }\r\n params.timeSignature = TimeSignature.deserialize(jsonObj.timeSignature);\r\n } else {\r\n const tparams = TimeSignature.defaults;\r\n if (timeSignatureString.length) {\r\n tparams.displayString = timeSignatureString;\r\n }\r\n params.timeSignature = new TimeSignature(tparams);\r\n }\r\n params.keySignature = jsonObj.keySignature ?? 'C';\r\n params.voices = voices;\r\n params.tuplets = tuplets;\r\n params.modifiers = modifiers;\r\n const rv = new SmoMeasure(params);\r\n // Handle migration for measure-mapped parameters\r\n rv.modifiers.forEach((mod) => {\r\n if (mod.ctor === 'SmoTempoText') {\r\n rv.tempo = (mod as SmoTempoText);\r\n }\r\n });\r\n if (!rv.tempo) {\r\n rv.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the default pitch\r\n * for a clef (appears on 3rd line)\r\n */\r\n static get defaultPitchForClef(): Record {\r\n return {\r\n 'treble': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'bass': {\r\n letter: 'd',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'tenor': {\r\n letter: 'a',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'alto': {\r\n letter: 'c',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'percussion': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'mezzo-soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'baritone-c': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'baritone-f': {\r\n letter: 'e',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'subbass': {\r\n letter: 'd',\r\n accidental: '',\r\n octave: 2\r\n },\r\n 'french': {\r\n letter: 'b',\r\n accidental: '',\r\n octave: 4\r\n } // no idea\r\n };\r\n }\r\n static _emptyMeasureNoteType: NoteType = 'r';\r\n static set emptyMeasureNoteType(tt: NoteType) {\r\n SmoMeasure._emptyMeasureNoteType = tt;\r\n }\r\n static get emptyMeasureNoteType(): NoteType {\r\n return SmoMeasure._emptyMeasureNoteType;\r\n }\r\n static timeSignatureNotes(timeSignature: TimeSignature, clef: Clef) {\r\n const pitch = SmoMeasure.defaultPitchForClef[clef];\r\n const maxTicks = SmoMusic.timeSignatureToTicks(timeSignature.timeSignature);\r\n const noteTick = 8192 / (timeSignature.beatDuration / 2);\r\n let ticks = 0;\r\n const pnotes: SmoNote[] = [];\r\n while (ticks < maxTicks) {\r\n const nextNote = SmoNote.defaults;\r\n nextNote.pitches = [JSON.parse(JSON.stringify(pitch))];\r\n nextNote.noteType = 'r';\r\n nextNote.clef = clef;\r\n nextNote.ticks.numerator = noteTick;\r\n pnotes.push(new SmoNote(nextNote));\r\n ticks += noteTick;\r\n }\r\n if (timeSignature.beatDuration === 8 && (timeSignature.actualBeats % 3 === 0 || timeSignature.actualBeats % 2 !== 0)) {\r\n let ix = 0;\r\n pnotes.forEach((pnote) => {\r\n if ((ix + 1) % 3 === 0) {\r\n pnote.endBeam = true;\r\n }\r\n pnote.beamBeats = 2048 * 3;\r\n ix += 1;\r\n });\r\n }\r\n return pnotes;\r\n }\r\n /**\r\n * Get a measure full of default notes for a given timeSignature/clef.\r\n * returns 8th notes for triple-time meters, etc.\r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultNotes(params: SmoMeasureParams): SmoNote[] {\r\n return SmoMeasure.timeSignatureNotes(new TimeSignature(params.timeSignature), params.clef);\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * This version returns params with no notes, for callers that want to use their own notes.\r\n * If you want the default notes, see {@link getDefaultMeasureWithNotes}\r\n * \r\n * @param params\r\n * @returns \r\n */\r\n static getDefaultMeasure(params: SmoMeasureParams): SmoMeasure {\r\n const obj: any = {};\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, SmoMeasure.defaults, obj);\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, params, obj);\r\n // Don't copy column-formatting options to new measure in new column\r\n smoSerialize.serializedMerge(SmoMeasure.formattingOptions, SmoMeasure.defaults, obj);\r\n obj.timeSignature = new TimeSignature(params.timeSignature);\r\n // The measure expects to get concert KS in constructor and adjust for instrument. So do the\r\n // opposite.\r\n obj.keySignature = SmoMusic.vexKeySigWithOffset(obj.keySignature, -1 * obj.transposeIndex);\r\n // Don't redisplay tempo for a new measure\r\n const rv = new SmoMeasure(obj);\r\n if (rv.tempo && rv.tempo.display) {\r\n rv.tempo.display = false;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * \r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultMeasureWithNotes(params: SmoMeasureParams): SmoMeasure {\r\n var measure = SmoMeasure.getDefaultMeasure(params);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(params)\r\n });\r\n // fix a bug.\r\n // new measures only have 1 voice, make sure active voice is 0\r\n measure.activeVoice = 0;\r\n return measure;\r\n }\r\n /**\r\n * used by xml export \r\n * @internal\r\n * @param val \r\n */\r\n getForceSystemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n // @internal\r\n setDefaultBarlines() {\r\n if (!this.getStartBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n if (!this.getEndBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n }\r\n\r\n get containsSound(): boolean {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n let j = 0;\r\n const voice = this.voices[i];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n if (voice.notes[j].noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * The rendered width of the measure, or estimate of same\r\n */\r\n get staffWidth() {\r\n return this.svg.staffWidth;\r\n }\r\n\r\n /**\r\n * set the rendered width of the measure, or estimate of same\r\n */\r\n setWidth(width: number, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n this.svg.history.push('setWidth ' + this.staffWidth + '=> ' + width + ' ' + description);\r\n }\r\n if (isNaN(width)) {\r\n throw ('NAN in setWidth');\r\n }\r\n this.svg.staffWidth = width;\r\n }\r\n\r\n /**\r\n * Get rendered or estimated start x\r\n */\r\n get staffX(): number {\r\n return this.svg.staffX;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start x\r\n */\r\n setX(x: number, description: string) {\r\n if (isNaN(x)) {\r\n throw ('NAN in setX');\r\n }\r\n layoutDebug.measureHistory(this, 'staffX', x, description);\r\n this.svg.staffX = Math.round(x);\r\n }\r\n /**\r\n * A time signature has possibly changed. add/remove notes to\r\n * match the new length\r\n */\r\n alignNotesWithTimeSignature() {\r\n const tsTicks = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n if (tsTicks === this.getMaxTicksVoice()) {\r\n return;\r\n }\r\n const replaceNoteWithDuration = (target: number, ar: SmoNote[], note: SmoNote) => {\r\n const fitNote = new SmoNote(SmoNote.defaults);\r\n const duration = SmoMusic.closestDurationTickLtEq(target);\r\n if (duration > 128) {\r\n fitNote.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n fitNote.pitches = note.pitches;\r\n fitNote.noteType = note.noteType;\r\n fitNote.clef = note.clef;\r\n ar.push(fitNote);\r\n }\r\n }\r\n const voices: SmoVoice[] = [];\r\n const tuplets: SmoTuplet[] = [];\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n const newNotes: SmoNote[] = [];\r\n let voiceTicks = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n // if a tuplet, make sure the whole tuplet fits.\r\n if (note.isTuplet) {\r\n const tuplet = this.getTupletForNote(note);\r\n if (tuplet) {\r\n // remaining notes of an approved tuplet, just add them\r\n if (tuplet.startIndex !== j) {\r\n newNotes.push(note);\r\n continue;\r\n }\r\n else if (tuplet.tickCount + voiceTicks <= tsTicks) {\r\n // first note of the tuplet, it fits, add it\r\n voiceTicks += tuplet.tickCount;\r\n newNotes.push(note);\r\n tuplets.push(tuplet);\r\n } else {\r\n // tuplet will not fit. Make a note as close to remainder as possible and add it\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n } else { // missing tuplet, now what?\r\n console.warn('missing tuplet info');\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n }\r\n } else {\r\n if (note.tickCount + voiceTicks <= tsTicks) {\r\n newNotes.push(note);\r\n voiceTicks += note.tickCount;\r\n } else {\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n }\r\n }\r\n if (tsTicks - voiceTicks > 128) {\r\n const np = SmoNote.defaults;\r\n np.clef = this.clef;\r\n const nnote = new SmoNote(np);\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, nnote);\r\n }\r\n voices.push({ notes: newNotes });\r\n }\r\n this.voices = voices;\r\n this.tuplets = tuplets;\r\n }\r\n /**\r\n * Get rendered or estimated start y\r\n */\r\n get staffY(): number {\r\n return this.svg.staffY;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start y\r\n */\r\n setY(y: number, description: string) {\r\n if (isNaN(y)) {\r\n throw ('NAN in setY');\r\n }\r\n layoutDebug.measureHistory(this, 'staffY', y, description);\r\n this.svg.staffY = Math.round(y);\r\n }\r\n\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n get yTop(): number {\r\n return this.svg.yTop;\r\n }\r\n\r\n /**\r\n * WHen setting an instrument, offset the pitches to match the instrument key\r\n * @param offset \r\n * @param newClef \r\n */\r\n transposeToOffset(offset: number, targetKey: string, newClef?: Clef) {\r\n const diff = offset - this.transposeIndex;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n const pitches: number[] = [...Array(note.pitches.length).keys()];\r\n // when the note is a rest, preserve the rest but match the new clef.\r\n if (newClef && note.noteType === 'r') {\r\n const defp = JSON.parse(JSON.stringify(SmoMeasure.defaultPitchForClef[newClef]));\r\n note.pitches = [defp];\r\n } else {\r\n note.transpose(pitches, diff, this.keySignature, targetKey);\r\n note.getGraceNotes().forEach((gn) => {\r\n const gpitch: number[] = [...Array(gn.pitches.length).keys()];\r\n const xpose = SmoNote.transpose(gn, gpitch, diff, this.keySignature, targetKey);\r\n gn.pitches = xpose.pitches;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n setYTop(y: number, description: string) {\r\n layoutDebug.measureHistory(this, 'yTop', y, description);\r\n this.svg.yTop = y;\r\n }\r\n\r\n /**\r\n * Return actual or estimated bounding box\r\n */\r\n setBox(box: SvgBox, description: string) {\r\n layoutDebug.measureHistory(this, 'logicalBox', box, description);\r\n this.svg.logicalBox = SvgHelpers.smoBox(box);\r\n }\r\n /**\r\n * @returns the DOM identifier for this measure when rendered\r\n */\r\n getClassId() {\r\n return 'mm-' + this.measureNumber.staffId + '-' + this.measureNumber.measureIndex;\r\n }\r\n /**\r\n * \r\n * @param id \r\n * @returns \r\n */\r\n getRenderedNote(id: string) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const voice = this.voices[j];\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const note = voice.notes[i];\r\n if (note.renderId === id) {\r\n return {\r\n smoNote: note,\r\n voice: j,\r\n tick: i\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getNotes() {\r\n return this.voices[this.activeVoice].notes;\r\n }\r\n\r\n getActiveVoice() {\r\n return this.activeVoice;\r\n }\r\n\r\n setActiveVoice(vix: number) {\r\n if (vix >= 0 && vix < this.voices.length) {\r\n this.activeVoice = vix;\r\n }\r\n }\r\n\r\n tickmapForVoice(voiceIx: number) {\r\n return new TickMap(this, voiceIx);\r\n }\r\n\r\n // ### createMeasureTickmaps\r\n // A tickmap is a map of notes to ticks for the measure. It is speciifc per-voice\r\n // since each voice may have different numbers of ticks. The accidental map is\r\n // overall since accidentals in one voice apply to accidentals in the other\r\n // voices. So we return the tickmaps and the overall accidental map.\r\n createMeasureTickmaps(): MeasureTickmaps {\r\n let i = 0;\r\n const tickmapArray: TickMap[] = [];\r\n const accidentalMap: Record> =\r\n {} as Record>;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n tickmapArray.push(this.tickmapForVoice(i));\r\n }\r\n\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const tickmap: TickMap = tickmapArray[i];\r\n const durationKeys: string[] = Object.keys((tickmap.durationAccidentalMap));\r\n\r\n durationKeys.forEach((durationKey: string) => {\r\n if (!accidentalMap[durationKey]) {\r\n accidentalMap[durationKey] = tickmap.durationAccidentalMap[durationKey];\r\n } else {\r\n const amap = accidentalMap[durationKey];\r\n const tickable: Record = tickmap.durationAccidentalMap[durationKey];\r\n const letterKeys: PitchLetter[] = Object.keys(tickable) as Array;\r\n letterKeys.forEach((pitchKey) => {\r\n if (!amap[pitchKey]) {\r\n amap[pitchKey] = tickmap.durationAccidentalMap[durationKey][pitchKey];\r\n }\r\n });\r\n }\r\n });\r\n }\r\n // duration: duration, pitches: Record\r\n const accidentalArray: AccidentalArray[] = [];\r\n Object.keys(accidentalMap).forEach((durationKey) => {\r\n accidentalArray.push({ duration: durationKey, pitches: accidentalMap[durationKey] });\r\n });\r\n return {\r\n tickmaps: tickmapArray,\r\n accidentalMap,\r\n accidentalArray\r\n };\r\n }\r\n // ### createRestNoteWithDuration\r\n // pad some duration of music with rests.\r\n static createRestNoteWithDuration(duration: number, clef: Clef): SmoNote {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[clef]));\r\n const note = new SmoNote(SmoNote.defaults);\r\n note.pitches = [pitch];\r\n note.noteType = 'r';\r\n note.hidden = true;\r\n note.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n return note;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in each voice and return max\r\n * @returns \r\n */\r\n getMaxTicksVoice() {\r\n let i = 0;\r\n let max = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voiceTicks = this.getTicksFromVoice(i);\r\n max = Math.max(voiceTicks, max);\r\n }\r\n return max;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in a specific voice\r\n * @param voiceIndex \r\n * @returns \r\n */\r\n getTicksFromVoice(voiceIndex: number): number {\r\n let ticks = 0;\r\n this.voices[voiceIndex].notes.forEach((note) => {\r\n ticks += note.tickCount;\r\n });\r\n return ticks;\r\n }\r\n\r\n getClosestTickCountIndex(voiceIndex: number, tickCount: number): number {\r\n let i = 0;\r\n let rv = 0;\r\n for (i = 0; i < this.voices[voiceIndex].notes.length; ++i) {\r\n const note = this.voices[voiceIndex].notes[i];\r\n if (note.tickCount + rv > tickCount) {\r\n return rv;\r\n }\r\n rv += note.tickCount;\r\n }\r\n return rv;\r\n }\r\n\r\n isPickup(): boolean {\r\n const ticks = this.getTicksFromVoice(0);\r\n const goal = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n return (ticks < goal);\r\n }\r\n\r\n clearBeamGroups() {\r\n this.beamGroups = [];\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricFont(fontInfo);\r\n });\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setChordFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordFont(fontInfo);\r\n });\r\n });\r\n }\r\n\r\n // ### tuplet methods.\r\n //\r\n // #### tupletNotes\r\n tupletNotes(tuplet: SmoTuplet) {\r\n let j = 0;\r\n let i = 0;\r\n const tnotes = [];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const vnotes = this.voices[j].notes;\r\n for (i = 0; i < vnotes.length; ++i) {\r\n const note = vnotes[i] as SmoNote;\r\n if (note.tuplet && note.tuplet.id === tuplet.attrs.id) {\r\n tnotes.push(vnotes[i]);\r\n }\r\n }\r\n }\r\n return tnotes;\r\n }\r\n\r\n // #### tupletIndex\r\n // return the index of the given tuplet\r\n tupletIndex(tuplet: SmoTuplet) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const notes = this.voices[j].notes;\r\n for (i = 0; i < notes.length; ++i) {\r\n const note = notes[i] as SmoNote;\r\n if (note.tuplet && note.tuplet.id === tuplet.attrs.id) {\r\n return i;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n // #### getTupletForNote\r\n // Finds the tuplet for a given note, or null if there isn't one.\r\n getTupletForNote(note: SmoNote | null): SmoTuplet | null {\r\n let i = 0;\r\n if (!note) {\r\n return null;\r\n }\r\n if (!note.isTuplet) {\r\n return null;\r\n }\r\n for (i = 0; i < this.tuplets.length; ++i) {\r\n const tuplet = this.tuplets[i];\r\n if (note.tuplet !== null && tuplet.attrs.id === note.tuplet.id) {\r\n return tuplet;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n removeTupletForNote(note: SmoNote) {\r\n let i = 0;\r\n const tuplets = [];\r\n for (i = 0; i < this.tuplets.length; ++i) {\r\n const tuplet = this.tuplets[i];\r\n if (note.tuplet !== null && note.tuplet.id !== tuplet.attrs.id) {\r\n tuplets.push(tuplet);\r\n }\r\n }\r\n this.tuplets = tuplets;\r\n }\r\n setClef(clef: Clef) {\r\n const oldClef = this.clef;\r\n this.clef = clef;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.clef = clef;\r\n });\r\n });\r\n }\r\n\r\n isRest() {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n if (!voice.notes[j].isRest()) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n // ### populateVoice\r\n // Create a new voice in this measure, and populate it with the default note\r\n // for this measure/key/clef\r\n populateVoice(index: number) {\r\n if (index !== this.voices.length) {\r\n return;\r\n }\r\n this.voices.push({ notes: SmoMeasure.getDefaultNotes(this) });\r\n this.activeVoice = index;\r\n }\r\n private _removeSingletonModifier(name: string) {\r\n const ar = this.modifiers.filter(obj => obj.attrs.type !== name);\r\n this.modifiers = ar;\r\n }\r\n\r\n addRehearsalMark(parameters: SmoRehearsalMarkParams) {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n this.modifiers.push(new SmoRehearsalMark(parameters));\r\n }\r\n removeRehearsalMark() {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n }\r\n getRehearsalMark(): SmoMeasureModifierBase | undefined {\r\n return this.modifiers.find(obj => obj.attrs.type === 'SmoRehearsalMark');\r\n }\r\n getModifiersByType(type: string) {\r\n return this.modifiers.filter((mm) => type === mm.attrs.type);\r\n }\r\n\r\n setTempo(params: SmoTempoTextParams) {\r\n this.tempo = new SmoTempoText(params);\r\n }\r\n /**\r\n * Set measure tempo to the default {@link SmoTempoText}\r\n */\r\n resetTempo() {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n getTempo() {\r\n if (typeof (this.tempo) === 'undefined') {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return this.tempo;\r\n }\r\n /**\r\n * Measure text is deprecated, and may not be supported in the future.\r\n * Better to use SmoTextGroup and attach to the measure.\r\n * @param mod \r\n * @returns \r\n */\r\n addMeasureText(mod: SmoMeasureModifierBase) {\r\n var exist = this.modifiers.filter((mm) =>\r\n mm.attrs.id === mod.attrs.id\r\n );\r\n if (exist.length) {\r\n return;\r\n }\r\n this.modifiers.push(mod);\r\n }\r\n\r\n getMeasureText() {\r\n return this.modifiers.filter(obj => obj.ctor === 'SmoMeasureText');\r\n }\r\n\r\n removeMeasureText(id: string) {\r\n var ar = this.modifiers.filter(obj => obj.attrs.id !== id);\r\n this.modifiers = ar;\r\n }\r\n\r\n setRepeatSymbol(rs: SmoRepeatSymbol) {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n let toAdd = true;\r\n const exSymbol = this.getRepeatSymbol();\r\n if (exSymbol && exSymbol.symbol === rs.symbol) {\r\n toAdd = false;\r\n }\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n if (toAdd) {\r\n ar.push(rs);\r\n }\r\n }\r\n getRepeatSymbol(): SmoRepeatSymbol | null {\r\n const rv = this.modifiers.filter(obj => obj.ctor === 'SmoRepeatSymbol');\r\n if (rv.length > 0) {\r\n return rv[0] as SmoRepeatSymbol;\r\n }\r\n return null;\r\n }\r\n clearRepeatSymbols() {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n }\r\n\r\n setBarline(barline: SmoBarline) {\r\n var ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline') {\r\n const o = modifier as SmoBarline;\r\n if (o.position !== barline.position) {\r\n ar.push(o);\r\n }\r\n } else {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n ar.push(barline);\r\n }\r\n\r\n private _getBarline(pos: number): SmoBarline {\r\n let rv = null;\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === pos) {\r\n rv = modifier;\r\n }\r\n });\r\n if (rv === null) {\r\n return new SmoBarline(SmoBarline.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n getEndBarline(): SmoBarline { \r\n return this._getBarline(SmoBarline.positions.end);\r\n }\r\n getStartBarline(): SmoBarline {\r\n return this._getBarline(SmoBarline.positions.start);\r\n }\r\n\r\n addNthEnding(ending: SmoVolta) {\r\n const mods = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoVolta' || (modifier as SmoVolta).startBar !== ending.startBar ||\r\n (modifier as SmoVolta).endBar !== ending.endBar) {\r\n mods.push(modifier);\r\n }\r\n });\r\n mods.push(ending);\r\n this.modifiers = mods;\r\n }\r\n\r\n removeNthEnding(ending: SmoVolta) {\r\n const mods: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n const volta = modifier as SmoVolta;\r\n if (ending.startSelector === null || ending.endSelector === null || volta.startSelector === null || volta.endSelector === null) {\r\n return;\r\n }\r\n if (!SmoSelector.sameMeasure(ending.startSelector, volta.startSelector) || !SmoSelector.sameMeasure(ending.endSelector, volta.endSelector)\r\n && ending.number !== volta.number) {\r\n mods.push(modifier);\r\n }\r\n } else {\r\n mods.push(modifier);\r\n }\r\n });\r\n this.modifiers = mods;\r\n }\r\n\r\n getNthEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier: SmoMeasureModifierBase) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n getEndEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier: SmoMeasureModifierBase) => {\r\n if (modifier.ctor === 'SmoVolta' && (modifier as SmoVolta).endBar === this.measureNumber.systemIndex\r\n && (modifier as SmoVolta).startBar !== this.measureNumber.systemIndex) {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n getMidEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoVolta' && (modifier as SmoVolta).endBar > this.measureNumber.systemIndex\r\n && (modifier as SmoVolta).startBar < this.measureNumber.systemIndex) {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n setKeySignature(sig: string) {\r\n this.keySignature = sig;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.keySignature = sig;\r\n });\r\n });\r\n }\r\n setMeasureNumber(num: MeasureNumber) {\r\n this.measureNumber = num;\r\n }\r\n getBeamGroupForNote(note: SmoNote) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < this.beamGroups.length; ++i) {\r\n const bg = this.beamGroups[i];\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n if (bg.notes[j].attrs.id === note.attrs.id) {\r\n return bg;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /smo/data/measureModifiers\r\n * **/\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport { SmoAttrs, MeasureNumber, SmoObjectParams, SvgBox, SmoModifierBase, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * Measure modifiers are attached to the measure itself. Each instance has a\r\n * `serialize()` method and a `ctor` attribute for deserialization.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoMeasureModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\nexport type SmoMeasureFormatNumberAttributes = 'customStretch' | 'proportionality' | 'padLeft' | 'measureIndex';\r\nexport const SmoMeasureFormatNumberKeys: SmoMeasureFormatNumberAttributes[] =\r\n ['customStretch', 'proportionality', 'padLeft', 'measureIndex'];\r\nexport type SmoMeasueFormatBooleanAttributes = 'autoJustify' | 'systemBreak' | 'skipMeasureCount' | 'pageBreak' | 'padAllInSystem' | 'restBreak' | 'forceRest';\r\nexport const SmoMeasureFormatBooleanKeys: SmoMeasueFormatBooleanAttributes[] = ['autoJustify','skipMeasureCount', 'systemBreak', 'pageBreak', 'padAllInSystem', 'restBreak', 'forceRest'];\r\n\r\n/**\r\n * Constructor parameter for measure formatting object\r\n */\r\nexport interface SmoMeasureFormatParams {\r\n /**\r\n * additional pixels to a measure (plus or minus)\r\n */\r\n customStretch: number | null,\r\n /**\r\n * softmax factor, controls how tightly rhythms are formatted\r\n */\r\n proportionality: number | null,\r\n /**\r\n * break justification for this column\r\n */\r\n autoJustify: boolean | null,\r\n /**\r\n * create a new system before this measure\r\n */\r\n systemBreak: boolean | null,\r\n /**\r\n * create a new system before this page\r\n */\r\n pageBreak: boolean | null,\r\n /**\r\n * force a break in multi-measure rest\r\n */\r\n restBreak: boolean | null,\r\n /**\r\n * treat this measure like a whole rest\r\n */\r\n forceRest: boolean | null,\r\n /**\r\n * if score is grouping measures per system, skip this measure in the count\r\n * (used for short measures, or pickups)\r\n */\r\n skipMeasureCount: boolean | null,\r\n /**\r\n * pad left, e.g. for the first stave in a system\r\n */\r\n padLeft: number | null,\r\n /**\r\n * if padding left, pad all the measures in the column\r\n */\r\n padAllInSystem: boolean | null,\r\n /**\r\n * renumber measures\r\n */\r\n measureIndex: number | null,\r\n}\r\n/**\r\n * Serialization for measure formatting customization, like system break\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureFormatParamsSer extends SmoMeasureFormatParams{\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string\r\n }\r\n function isSmoMeasureParamsSer(params: Partial):params is SmoMeasureFormatParamsSer {\r\n return typeof(params.ctor) === 'string';\r\n }\r\n/**\r\n * ISmoMeasureFormatMgr is the DI interface to the\r\n * format manager. Measure formats are often the same to multiple measures\r\n * so we don't serialize each one - instead we map them with this interface\r\n */\r\nexport interface ISmoMeasureFormatMgr {\r\n format: SmoMeasureFormatParams,\r\n measureNumber: MeasureNumber\r\n}\r\n/**\r\n * Measure format holds parameters about the automatic formatting of the measure itself, such as the witch and\r\n * how the durations are proportioned. Note that measure formatting is also controlled by the justification\r\n * between voices and staves. For instance, 2 measures in different staves will have to have the same width\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureFormat extends SmoMeasureModifierBase implements SmoMeasureFormatParams {\r\n static get attributes() {\r\n return ['customStretch', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', \r\n 'padLeft', 'measureIndex', 'padAllInSystem', 'skipMeasureCount', 'restBreak', 'forceRest'];\r\n }\r\n static get formatAttributes() {\r\n return ['customStretch', 'skipMeasureCount', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', 'padLeft'];\r\n }\r\n static get defaultProportionality() {\r\n return 0;\r\n }\r\n static get legacyProportionality() {\r\n return 0;\r\n }\r\n static fromLegacyMeasure(measure: any) {\r\n const o: any = {};\r\n SmoMeasureFormat.formatAttributes.forEach((attr: string | number) => {\r\n if (typeof (measure[attr]) !== 'undefined') {\r\n o[attr] = measure[attr];\r\n } else {\r\n const rhs = (SmoMeasureFormat.defaults as any)[attr];\r\n o[attr] = rhs;\r\n }\r\n o.measureIndex = measure.measureNumber.measureIndex;\r\n });\r\n return new SmoMeasureFormat(o);\r\n }\r\n static get defaults(): SmoMeasureFormatParams {\r\n return JSON.parse(JSON.stringify({\r\n customStretch: 0,\r\n proportionality: SmoMeasureFormat.defaultProportionality,\r\n systemBreak: false,\r\n pageBreak: false,\r\n restBreak: false,\r\n forceRest: false,\r\n padLeft: 0,\r\n padAllInSystem: true,\r\n skipMeasureCount: false,\r\n autoJustify: true,\r\n measureIndex: 0,\r\n }));\r\n }\r\n customStretch: number = SmoMeasureFormat.defaultProportionality;\r\n proportionality: number = 0;\r\n systemBreak: boolean = false;\r\n pageBreak: boolean = false;\r\n restBreak: boolean = false;\r\n skipMeasureCount: boolean = false;\r\n forceRest: boolean = false;\r\n padLeft: number = 0;\r\n padAllInSystem: boolean = true;\r\n autoJustify: boolean = true;\r\n measureIndex: number = 0;\r\n eq(o: SmoMeasureFormatParams) {\r\n let rv = true;\r\n SmoMeasureFormatBooleanKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr]) {\r\n rv = false;\r\n }\r\n });\r\n SmoMeasureFormatNumberKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr] && attr !== 'measureIndex') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n get isDefault() {\r\n return this.eq(SmoMeasureFormat.defaults);\r\n }\r\n constructor(parameters: SmoMeasureFormatParams) {\r\n super('SmoMeasureFormat');\r\n const def = SmoMeasureFormat.defaults;\r\n SmoMeasureFormatNumberKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n SmoMeasureFormatBooleanKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n }\r\n formatMeasure(mm: ISmoMeasureFormatMgr) {\r\n mm.format = new SmoMeasureFormat(this);\r\n mm.format.measureIndex = mm.measureNumber.measureIndex;\r\n }\r\n serialize(): SmoMeasureFormatParamsSer {\r\n const params: Partial = { ctor: 'SmoMeasureFormat' };\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureFormat.defaults, SmoMeasureFormat.attributes, this, params);\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw('bad type SmoMeasureFormatParamsSer');\r\n }\r\n return params;\r\n }\r\n}\r\n/**\r\n * Used to create a {@link SmoBarline}\r\n */\r\nexport interface SmoBarlineParams {\r\n position: number | null,\r\n barline: number | null\r\n}\r\n\r\nexport interface SmoBarlineParamsSer extends SmoBarlineParams {\r\n ctor: string,\r\n position: number | null,\r\n barline: number | null\r\n}\r\n/**\r\n * Barline is just that, there is a start and end in each measure, which defaults to 'single'.\r\n * @category SmoModifier\r\n */\r\nexport class SmoBarline extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n };\r\n\r\n static readonly barlines: Record = {\r\n singleBar: 0,\r\n doubleBar: 1,\r\n endBar: 2,\r\n startRepeat: 3,\r\n endRepeat: 4,\r\n noBar: 5\r\n }\r\n\r\n static get _barlineToString() {\r\n return ['singleBar', 'doubleBar', 'endBar', 'startRepeat', 'endRepeat', 'noBar'];\r\n }\r\n static barlineString(inst: SmoBarline) {\r\n return SmoBarline._barlineToString[inst.barline];\r\n }\r\n\r\n static get defaults(): SmoBarlineParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n\r\n static get attributes() {\r\n return ['position', 'barline'];\r\n }\r\n serialize(): SmoBarlineParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoBarline.defaults, SmoBarline.attributes, this, params);\r\n params.ctor = 'SmoBarline';\r\n return params;\r\n }\r\n\r\n constructor(parameters: SmoBarlineParams | null) {\r\n super('SmoBarline');\r\n let ops = parameters as any;\r\n if (typeof (parameters) === 'undefined' || parameters === null) {\r\n ops = {};\r\n }\r\n smoSerialize.serializedMerge(SmoBarline.attributes, SmoBarline.defaults, this);\r\n smoSerialize.serializedMerge(SmoBarline.attributes, ops, this);\r\n }\r\n barline: number = SmoBarline.barlines.singleBar;\r\n position: number = SmoBarline.positions.start;\r\n}\r\n\r\n/**\r\n * Constructor for SmoRepeatSymbol\r\n */\r\nexport interface SmoRepeatSymbolParams {\r\n /**\r\n * The symbol enumeration\r\n */\r\n symbol: number,\r\n /**\r\n * x offset for DC, sign etc.\r\n */\r\n xOffset: number,\r\n /**\r\n * y offset for DC, sign etc.\r\n */\r\n yOffset: number,\r\n /**\r\n * position, above or below\r\n */\r\n position: number\r\n}\r\n\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoRepeatSymbolParamsSer extends SmoRepeatSymbolParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\nfunction isSmoRepeatSymbolParamsSer(params: Partial):params is SmoRepeatSymbolParamsSer {\r\n return typeof(params.ctor) === 'string' && params.ctor === 'SmoRepeatSymbol';\r\n }\r\n/**\r\n * Repeat symbols like DC, Fine etc. Note: voltas are their own thing,\r\n * and repeats are types of barlines.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRepeatSymbol extends SmoMeasureModifierBase {\r\n static readonly symbols: Record = {\r\n None: 0,\r\n Coda: 1,\r\n Segno: 2,\r\n Dc: 3,\r\n ToCoda: 1,\r\n DcAlCoda: 4,\r\n DcAlFine: 5,\r\n Ds: 6,\r\n DsAlCoda: 7,\r\n DsAlFine: 8,\r\n Fine: 9\r\n }\r\n\r\n static readonly defaultXOffset: number[] = [0, 0, 0, -20, -60, -60, -50, -60, -50, -40]\r\n\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n }\r\n static get defaults(): SmoRepeatSymbolParams {\r\n return JSON.parse(JSON.stringify({\r\n symbol: SmoRepeatSymbol.symbols.Coda,\r\n xOffset: 0,\r\n yOffset: 30,\r\n position: SmoRepeatSymbol.positions.end\r\n }));\r\n }\r\n static get attributes() {\r\n return ['symbol', 'xOffset', 'yOffset', 'position'];\r\n }\r\n symbol: number = SmoRepeatSymbol.symbols.Coda;\r\n xOffset: number = 0;\r\n yOffset: number = 30;\r\n position: number = SmoRepeatSymbol.positions.end;\r\n\r\n serialize(): SmoRepeatSymbolParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRepeatSymbol.defaults, SmoRepeatSymbol.attributes, this, params);\r\n params.ctor = 'SmoRepeatSymbol';\r\n if (!isSmoRepeatSymbolParamsSer(params)) {\r\n throw 'bad type SmoRepeatSymbolParamsSer';\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoRepeatSymbolParams) {\r\n super('SmoRepeatSymbol');\r\n if (!parameters.symbol) {\r\n parameters.symbol = SmoRepeatSymbol.symbols.Coda;\r\n }\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, SmoRepeatSymbol.defaults, this);\r\n this.xOffset = SmoRepeatSymbol.defaultXOffset[parameters.symbol];\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, parameters, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoVolta} (2nd ending)\r\n * @category SmoParameters\r\n */\r\nexport interface SmoVoltaParams {\r\n /**\r\n * start bar of ending\r\n */\r\n startBar: number,\r\n /**\r\n * end bar (how long it stretches)\r\n */\r\n endBar: number,\r\n /**\r\n * xoffset for start, for collisions\r\n */\r\n xOffsetStart: number,\r\n /**\r\n * xoffset for end, for collisions\r\n */\r\n xOffsetEnd: number,\r\n /**\r\n * yOffset, for collisions\r\n */\r\n yOffset: number,\r\n /**\r\n * 2nd ending, 3rd etc.\r\n */\r\n number: number\r\n}\r\n/**\r\n * serializable bits of volta/endings\r\n * @category serialization\r\n */\r\nexport interface SmoVoltaParamsSer extends SmoVoltaParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Voltas (2nd endings) behave more like staff modifiers, but they are associated with the measure\r\n * since each measure has it's own rules for displaying part of the volta.\r\n * @category SmoModifier\r\n */\r\nexport class SmoVolta extends SmoMeasureModifierBase {\r\n startBar: number = 1;\r\n endBar: number = 1;\r\n xOffsetStart: number = 0;\r\n xOffsetEnd: number = 0;\r\n yOffset: number = 20;\r\n number: number = 1;\r\n endingId: string | null = null;\r\n startSelector: SmoSelector | null = null;\r\n endSelector: SmoSelector | null = null;\r\n elements: SVGSVGElement[] = [];\r\n constructor(parameters: SmoVoltaParams) {\r\n super('SmoVolta');\r\n smoSerialize.serializedMerge(SmoVolta.attributes, SmoVolta.defaults, this);\r\n smoSerialize.serializedMerge(SmoVolta.attributes, parameters, this);\r\n }\r\n get id() {\r\n return this.attrs.id;\r\n }\r\n get type() {\r\n return this.attrs.type;\r\n }\r\n static get attributes() {\r\n return ['startBar', 'endBar', 'endingId', 'startSelector', 'endSelector', 'xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n static get editableAttributes() {\r\n return ['xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n\r\n serialize(): SmoVoltaParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoVolta.defaults, SmoVolta.attributes, this, params);\r\n params.ctor = 'SmoVolta';\r\n return params;\r\n }\r\n\r\n static get defaults(): SmoVoltaParams {\r\n return JSON.parse(JSON.stringify({\r\n startBar: 1,\r\n endBar: 1,\r\n xOffsetStart: 0,\r\n xOffsetEnd: 0,\r\n yOffset: 20,\r\n number: 1\r\n }));\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMeasureText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureTextParams {\r\n position: number,\r\n fontInfo: FontInfo,\r\n text: string,\r\n adjustX: number,\r\n adjustY: number,\r\n justification: number\r\n}\r\n/**\r\n * Serialized fields of SmoMeasureTextParams\r\n */\r\nexport interface SmoMeasureTextParamsSer extends SmoMeasureTextParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\n/**\r\n * Measure text is just that. Now that score text can be associated with musical elements, this\r\n * class has falled into disrepair. It may be used for part notations in the score later.\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureText extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3, none: 4\r\n }\r\n\r\n static readonly justifications: Record = {\r\n left: 0, right: 1, center: 2\r\n }\r\n\r\n static readonly _positionToString: string[] = ['above', 'below', 'left', 'right']\r\n\r\n static get attributes() {\r\n return ['position', 'fontInfo', 'text', 'adjustX', 'adjustY', 'justification'];\r\n }\r\n\r\n static readonly defaults: SmoMeasureTextParams = {\r\n position: SmoMeasureText.positions.above,\r\n fontInfo: {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n text: 'Smo',\r\n adjustX: 0,\r\n adjustY: 0,\r\n justification: SmoMeasureText.justifications.center\r\n }\r\n justification: number = SmoMeasureText.justifications.center;\r\n position: number = SmoMeasureText.positions.above;\r\n text: string = '';\r\n adjustX: number = 0;\r\n adjustY: number = 0;\r\n fontInfo: FontInfo = {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n serialize(): SmoMeasureTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureText.defaults, SmoMeasureText.attributes, this, params);\r\n params.ctor = 'SmoMeasureText';\r\n return params as SmoMeasureTextParamsSer; // trivial class, no 'is'\r\n }\r\n\r\n constructor(parameters: SmoMeasureTextParams | null) {\r\n super('SmoMeasureText');\r\n let pobj = parameters as any;\r\n if (pobj === null) {\r\n pobj = SmoMeasureText.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, SmoMeasureText.defaults, this);\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, pobj, this);\r\n\r\n // right-justify left text and left-justify right text by default\r\n if (!pobj.justification) {\r\n // eslint-disable-next-line\r\n this.justification = (this.position === SmoMeasureText.positions.left) ? SmoMeasureText.justifications.right :\r\n (this.position === SmoMeasureText.positions.right ? SmoMeasureText.justifications.left : this.justification);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Used to construct {@link SmoRehearsalMark}\r\n * @category SmoParams\r\n * */\r\nexport interface SmoRehearsalMarkParams {\r\n /**\r\n * cardinal position\r\n */\r\n position: number,\r\n /**\r\n * Symbol. by default, letters that auto-increment\r\n */\r\n symbol: string,\r\n /**\r\n * future, define how increment works\r\n */\r\n cardinality: string,\r\n /**\r\n * disable to make your own symbols for each new one.\r\n */\r\n increment: boolean\r\n}\r\n\r\n/**\r\n * Serialized fields for rehearsal mark\r\n * @category serialization\r\n */\r\nexport interface SmoRehearsalMarkParamsSer extends SmoRehearsalMarkParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Rehearsal marks are some type of auto-incrementing markers on a measure index.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRehearsalMark extends SmoMeasureModifierBase {\r\n static readonly cardinalities: Record = {\r\n capitals: 'capitals', lowerCase: 'lowerCase', numbers: 'numbers'\r\n }\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3\r\n }\r\n\r\n static get _positionToString(): string[] {\r\n return ['above', 'below', 'left', 'right'];\r\n }\r\n\r\n // TODO: positions don't work.\r\n static get defaults(): SmoRehearsalMarkParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoRehearsalMark.positions.above,\r\n cardinality: SmoRehearsalMark.cardinalities.capitals,\r\n symbol: 'A',\r\n increment: true\r\n }));\r\n }\r\n static get attributes() {\r\n return ['cardinality', 'symbol', 'position', 'increment'];\r\n }\r\n position: number = SmoRehearsalMark.positions.above;\r\n cardinality: string = SmoRehearsalMark.cardinalities.capitals;\r\n symbol: string = 'A';\r\n increment: boolean = true;\r\n\r\n getIncrement() {\r\n if (this.cardinality !== 'number') {\r\n const code = this.symbol.charCodeAt(0) + 1;\r\n const symbol = String.fromCharCode(code);\r\n return symbol;\r\n } else {\r\n return (parseInt(this.symbol, 10) + 1).toString();\r\n }\r\n }\r\n getInitial() {\r\n // eslint-disable-next-line\r\n return this.cardinality === SmoRehearsalMark.cardinalities.capitals ? 'A' :\r\n (this.cardinality === SmoRehearsalMark.cardinalities.lowerCase ? 'a' : '1');\r\n }\r\n serialize(): SmoRehearsalMarkParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRehearsalMark.defaults, SmoRehearsalMark.attributes, this, params);\r\n params.ctor = 'SmoRehearsalMark';\r\n return params as SmoRehearsalMarkParamsSer;\r\n }\r\n constructor(parameters: SmoRehearsalMarkParams) {\r\n super('SmoRehearsalMark');\r\n let pobj = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = SmoRehearsalMark.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, SmoRehearsalMark.defaults, this);\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, pobj, this);\r\n if (!pobj.symbol) {\r\n this.symbol = this.getInitial();\r\n }\r\n }\r\n}\r\n\r\nexport type SmoTempoNumberAttribute = 'bpm' | 'beatDuration' | 'yOffset';\r\nexport type SmoTempoStringAttribute = 'tempoMode' | 'tempoText' | 'customText';\r\nexport type SmoTempoBooleanAttribute = 'display';\r\n\r\nexport type SmoTempoMode = 'duration' | 'text' | 'custom';\r\n/**\r\n * constructor parameters for {@link SmoTempoText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTempoTextParams {\r\n /**\r\n * text (e.g. Allegro) or bpm\r\n */\r\n tempoMode: string,\r\n /**\r\n * playback bpm\r\n */\r\n bpm: number,\r\n /**\r\n * note type for a metronome beat\r\n */\r\n beatDuration: number,\r\n /**\r\n * if text mode, the text\r\n */\r\n tempoText: string,\r\n /**\r\n * move the text to keep it from colliding with other things\r\n */\r\n yOffset: number,\r\n /**\r\n * indicate if we are displaying, false if only affects playback\r\n */\r\n display: boolean,\r\n /**\r\n * text taht is not a standards notation\r\n */\r\n customText: string\r\n}\r\n/**\r\n * serialized tempo parameters\r\n * @category serialization\r\n */\r\nexport interface SmoTempoTextParamsSer extends SmoTempoTextParams {\r\n ctor: string;\r\n}\r\nexport interface VexTempoTextParams {\r\n duration?: string, dots?: number, bpm?: number, name?: string \r\n}\r\n\r\n/**\r\n * Information about both playback tempo and how the tempo is notated.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTempoText extends SmoMeasureModifierBase implements SmoTempoTextParams {\r\n static get tempoModes(): Record {\r\n return {\r\n durationMode: 'duration',\r\n textMode: 'text',\r\n customMode: 'custom'\r\n };\r\n }\r\n static get tempoTexts(): Record {\r\n return {\r\n larghissimo: 'Larghissimo',\r\n grave: 'Grave',\r\n lento: 'Lento',\r\n largo: 'Largo',\r\n larghetto: 'Larghetto',\r\n adagio: 'Adagio',\r\n adagietto: 'Adagietto',\r\n andante_moderato: 'Andante moderato',\r\n andante: 'Andante',\r\n andantino: 'Andantino',\r\n moderator: 'Moderato',\r\n allegretto: 'Allegretto',\r\n allegro: 'Allegro',\r\n vivace: 'Vivace',\r\n presto: 'Presto',\r\n prestissimo: 'Prestissimo'\r\n };\r\n }\r\n\r\n /**\r\n * create defaults for tempo initialization\r\n */\r\n static get defaults(): SmoTempoTextParams {\r\n return JSON.parse(JSON.stringify({\r\n tempoMode: SmoTempoText.tempoModes.durationMode,\r\n bpm: 120,\r\n beatDuration: 4096,\r\n tempoText: SmoTempoText.tempoTexts.allegro,\r\n yOffset: 0,\r\n display: false,\r\n customText: ''\r\n }));\r\n }\r\n static get attributes() {\r\n return ['tempoMode', 'bpm', 'display', 'beatDuration', 'tempoText', 'yOffset', 'customText'];\r\n }\r\n tempoMode: SmoTempoMode = SmoTempoText.tempoModes.durationMode\r\n bpm: number = 120;\r\n beatDuration: number = 4096;\r\n tempoText: string = 'Allegro';\r\n yOffset: number = 0;\r\n display: boolean = false;\r\n customText: string = '';\r\n\r\n _toVexTextTempo(): VexTempoTextParams {\r\n return { name: this.tempoText };\r\n }\r\n\r\n /**\r\n * Return equality wrt the tempo marking, e.g. 2 allegro in textMode will be equal but\r\n * an allegro and duration 120bpm will not.\r\n * @param t1 \r\n * @param t2 \r\n * @returns \r\n */\r\n static eq(t1: SmoTempoText, t2: SmoTempoText) {\r\n if (t1.tempoMode !== t2.tempoMode) {\r\n return false;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n return t1.tempoText === t2.tempoText;\r\n } else {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration &&\r\n t1.tempoText === t2.tempoText;\r\n }\r\n }\r\n\r\n static get bpmFromText(): Record {\r\n const rv: any = {};\r\n rv[SmoTempoText.tempoTexts.larghissimo] = 24;\r\n rv[SmoTempoText.tempoTexts.grave] = 40;\r\n rv[SmoTempoText.tempoTexts.lento] = 45;\r\n rv[SmoTempoText.tempoTexts.largo] = 40;\r\n rv[SmoTempoText.tempoTexts.larghetto] = 60;\r\n rv[SmoTempoText.tempoTexts.adagio] = 72;\r\n rv[SmoTempoText.tempoTexts.adagietto] = 72;\r\n rv[SmoTempoText.tempoTexts.andante_moderato] = 72;\r\n rv[SmoTempoText.tempoTexts.andante] = 84;\r\n rv[SmoTempoText.tempoTexts.andantino] = 92;\r\n rv[SmoTempoText.tempoTexts.moderator] = 96;\r\n rv[SmoTempoText.tempoTexts.allegretto] = 96;\r\n rv[SmoTempoText.tempoTexts.allegro] = 120;\r\n rv[SmoTempoText.tempoTexts.vivace] = 144;\r\n rv[SmoTempoText.tempoTexts.presto] = 168;\r\n rv[SmoTempoText.tempoTexts.prestissimo] = 240;\r\n\r\n return rv as Record;\r\n }\r\n\r\n _toVexDurationTempo(): VexTempoTextParams {\r\n var vd = SmoMusic.ticksToDuration[this.beatDuration];\r\n var dots = (vd.match(/d/g) || []).length;\r\n vd = vd.replace(/d/g, '');\r\n const rv: any = { duration: vd, dots, bpm: this.bpm };\r\n if (this.customText.length) {\r\n rv.name = this.customText;\r\n }\r\n return rv;\r\n }\r\n toVexTempo(): VexTempoTextParams {\r\n if (this.tempoMode === SmoTempoText.tempoModes.durationMode ||\r\n this.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n return this._toVexDurationTempo();\r\n }\r\n return this._toVexTextTempo();\r\n }\r\n serialize(): SmoTempoTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTempoText.defaults, SmoTempoText.attributes, this, params);\r\n params.ctor = 'SmoTempoText';\r\n return params as SmoTempoTextParamsSer;\r\n }\r\n constructor(parameters: SmoTempoTextParams | null) {\r\n super('SmoTempoText');\r\n let pobj: any = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = {};\r\n }\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, SmoTempoText.defaults, this);\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, pobj, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for a time signature\r\n * @category SmoParameters\r\n */\r\nexport interface TimeSignatureParameters {\r\n /**\r\n * numerator\r\n */\r\n actualBeats: number,\r\n /**\r\n * denominator, always power of 2\r\n */\r\n beatDuration: number,\r\n /**\r\n * indicates cut time/common time\r\n */\r\n useSymbol: boolean,\r\n /**\r\n * display, else just affects measure lengths.\r\n */\r\n display: boolean,\r\n /**\r\n * for pickups, display the non-pickup value\r\n */\r\n displayString: string\r\n}\r\n\r\n/**\r\n * serialized time signature\r\n * @category serialization\r\n */\r\nexport interface TimeSignatureParametersSer extends TimeSignatureParameters {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Time signatures contain duration information for a measure, and information\r\n * about the display of the time signature.\r\n * @category SmoModifier\r\n */\r\nexport class TimeSignature extends SmoMeasureModifierBase {\r\n static get defaults(): TimeSignatureParameters {\r\n return {\r\n actualBeats: 4,\r\n beatDuration: 4,\r\n useSymbol: false,\r\n display: true,\r\n displayString: ''\r\n };\r\n }\r\n static equal(ts1: TimeSignature, ts2: TimeSignature): boolean {\r\n return (ts1.actualBeats === ts2.actualBeats && ts1.beatDuration === ts2.beatDuration);\r\n }\r\n static createFromPartial(value: Partial) {\r\n const params = TimeSignature.defaults;\r\n smoSerialize.serializedMerge(TimeSignature.parameters, value, params);\r\n return new TimeSignature(params);\r\n }\r\n // timeSignature: string = '4/4';\r\n actualBeats: number = 4;\r\n beatDuration: number = 4;\r\n useSymbol: boolean = false;\r\n display: boolean = true;\r\n displayString: string = '';\r\n get timeSignature() {\r\n return this.actualBeats.toString() + '/' + this.beatDuration.toString();\r\n }\r\n static get parameters() {\r\n return ['actualBeats', 'beatDuration', 'useSymbol', 'display', 'displayString'];\r\n }\r\n static get boolParameters() {\r\n return [];\r\n }\r\n set timeSignature(value: string) {\r\n const ar = value.split('/');\r\n this.actualBeats = parseInt(ar[0], 10);\r\n this.beatDuration = parseInt(ar[1], 10);\r\n }\r\n serialize(): TimeSignatureParametersSer {\r\n const rv: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(TimeSignature.defaults, TimeSignature.parameters, this, rv);\r\n rv.ctor = 'TimeSignature';\r\n return rv as TimeSignatureParametersSer;\r\n }\r\n constructor(params: TimeSignatureParameters) {\r\n super('TimeSignature');\r\n this.actualBeats = params.actualBeats;\r\n this.beatDuration = params.beatDuration;\r\n this.useSymbol = params.useSymbol;\r\n this.display = params.display;\r\n this.displayString = params.displayString;\r\n }\r\n}\r\n","/**\r\n * shared music theory and audio frequency routines, helper functions etc.\r\n * @module /smo/data/music\r\n */\r\n\r\n// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote } from './note';\r\nimport { Pitch, PitchKey, Clef, PitchLetter, TickAccidental, \r\n AccidentalArray, AccidentalDisplay } from './common';\r\nimport { SmoMicrotone } from './noteModifiers';\r\nimport { VexFlow, pitchToLedgerLine, vexCanonicalNotes } from '../../common/vex';\r\n\r\n/**\r\n * Used for xml clef conversion\r\n */\r\nexport interface ClefSign {\r\n sign: string,\r\n line?: number,\r\n octave?: number\r\n}\r\n\r\n/**\r\n * calculate the pitch frequency, just temperment a=440, etc.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoAudioPitch {\r\n // ### _frequencies\r\n // Compute the equal-temperment frequencies of the notes.\r\n static _computeFrequencies() {\r\n const map: Record = {};\r\n let lix = 0;\r\n const octaves = [1, 2, 3, 4, 5, 6, 7];\r\n const letters = ['cn', 'c#', 'dn', 'd#', 'en', 'fn', 'f#', 'gn', 'g#', 'an', 'a#', 'bn'];\r\n\r\n const just = Math.pow(2, (1.0 / 12));\r\n const baseFrequency = (440 / 16) * Math.pow(just, 3);\r\n\r\n octaves.forEach((octave) => {\r\n const base = baseFrequency * Math.pow(2, octave - 1);\r\n lix = 0;\r\n letters.forEach((letter) => {\r\n const freq = base * Math.pow(just, lix);\r\n var enharmonics = SmoMusic.getEnharmonics(letter);\r\n enharmonics.forEach((en) => {\r\n // Adjust for B4 higher than C4\r\n const adjOctave = (letter[0] === 'b' && en[0] === 'c') ?\r\n octave + 1 : octave;\r\n map[en + adjOctave.toString()] = freq;\r\n });\r\n lix += 1;\r\n });\r\n });\r\n\r\n return map;\r\n }\r\n static frequencies: Record | null = null;\r\n\r\n static get pitchFrequencyMap() {\r\n if (!SmoAudioPitch.frequencies) {\r\n SmoAudioPitch.frequencies = SmoAudioPitch._computeFrequencies();\r\n }\r\n\r\n return SmoAudioPitch.frequencies;\r\n }\r\n\r\n static _rawPitchToFrequency(smoPitch: Pitch, offset: number): number {\r\n const npitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch) + offset);\r\n const vx = npitch.letter.toLowerCase() + npitch.accidental + npitch.octave.toString();\r\n return SmoAudioPitch.pitchFrequencyMap[vx];\r\n }\r\n /**\r\n * \r\n * @param smoPitch - pitch from the SMO object\r\n * @param offset - transpose 1/2 steps, 0 means no transpose\r\n * @param tone - optional transpose microtone\r\n * @returns \r\n */\r\n static smoPitchToFrequency(smoPitch: Pitch, offset: number, tone: SmoMicrotone | null) {\r\n let pitchInt = 0;\r\n let rv = SmoAudioPitch._rawPitchToFrequency(smoPitch, offset);\r\n if (tone) {\r\n const coeff = tone.toPitchCoeff;\r\n pitchInt = SmoMusic.smoPitchToInt(smoPitch);\r\n pitchInt += (coeff > 0) ? 1 : -1;\r\n const otherSmo = SmoMusic.smoIntToPitch(pitchInt);\r\n const otherPitch = SmoAudioPitch._rawPitchToFrequency(otherSmo, offset);\r\n rv += Math.abs(rv - otherPitch) * coeff;\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * interface for valid non-tuplet duration value (all the\r\n * base note lengths + dots)\r\n */\r\nexport interface SimpleDuration {\r\n index: number, \r\n ticks: number,\r\n baseTicks: number,\r\n dots: number\r\n}\r\n/**\r\n * description of a scale entry, from vex theory routines\r\n */\r\nexport interface VexNoteValue {\r\n root_index: number,\r\n int_val: number\r\n};\r\n/**\r\n * Describe the music theory role of an accidental vs. the key signature. \r\n * Used to determine default enharmonic spelling.\r\n * @category SmoUtilities\r\n */\r\nexport interface KeySignatureRole {\r\n letter: PitchLetter,\r\n accidental: string,\r\n role: string\r\n};\r\n\r\n/**\r\n * Helper functions that build on the VX music theory routines, and other\r\n * utilities I wish were in VF.Music but aren't\r\n * ## Note on pitch and duration format\r\n * We use some VEX music theory routines and frequently need to convert\r\n * formats from SMO format. We also use the same 'ticks' abstraction for\r\n * durations.\r\n * \r\n * `Smo` uses pitch JSON:\r\n * ```javascript\r\n * {note:'c',accidental:'#',octave:4}\r\n * ```\r\n * \r\n * `Vex` usually uses a canonical string:\r\n * \r\n * `'c#/4'`\r\n * \r\n * Depending on the operation, the octave might be omitted\r\n * \r\n * `Smo` uses a JSON for duration always:\r\n * ```javascript\r\n * {numerator:4096,denominator:1,remainder:0}\r\n * ```\r\n * `Vex` uses a letter duration (`'4'` or `'q'`for 1/4 note) and `'d'` for dot.\r\n * \r\n * I try to indicate whether I am using vex or smo notation in the function name.\r\n * Duration methods start around line 1100\r\n * @category SmoUtilities\r\n */\r\nexport class SmoMusic {\r\n /**\r\n * Ported from vex, used to convert pitches to numerical values\r\n * */\r\n static get noteValues(): Record {\r\n return {\r\n c: { root_index: 0, int_val: 0 },\r\n cn: { root_index: 0, int_val: 0 },\r\n 'c#': { root_index: 0, int_val: 1 },\r\n 'c##': { root_index: 0, int_val: 2 },\r\n cb: { root_index: 0, int_val: 11 },\r\n cbb: { root_index: 0, int_val: 10 },\r\n d: { root_index: 1, int_val: 2 },\r\n dn: { root_index: 1, int_val: 2 },\r\n 'd#': { root_index: 1, int_val: 3 },\r\n 'd##': { root_index: 1, int_val: 4 },\r\n db: { root_index: 1, int_val: 1 },\r\n dbb: { root_index: 1, int_val: 0 },\r\n e: { root_index: 2, int_val: 4 },\r\n en: { root_index: 2, int_val: 4 },\r\n 'e#': { root_index: 2, int_val: 5 },\r\n 'e##': { root_index: 2, int_val: 6 },\r\n eb: { root_index: 2, int_val: 3 },\r\n ebb: { root_index: 2, int_val: 2 },\r\n f: { root_index: 3, int_val: 5 },\r\n fn: { root_index: 3, int_val: 5 },\r\n 'f#': { root_index: 3, int_val: 6 },\r\n 'f##': { root_index: 3, int_val: 7 },\r\n fb: { root_index: 3, int_val: 4 },\r\n fbb: { root_index: 3, int_val: 3 },\r\n g: { root_index: 4, int_val: 7 },\r\n gn: { root_index: 4, int_val: 7 },\r\n 'g#': { root_index: 4, int_val: 8 },\r\n 'g##': { root_index: 4, int_val: 9 },\r\n gb: { root_index: 4, int_val: 6 },\r\n gbb: { root_index: 4, int_val: 5 },\r\n a: { root_index: 5, int_val: 9 },\r\n an: { root_index: 5, int_val: 9 },\r\n 'a#': { root_index: 5, int_val: 10 },\r\n 'a##': { root_index: 5, int_val: 11 },\r\n ab: { root_index: 5, int_val: 8 },\r\n abb: { root_index: 5, int_val: 7 },\r\n b: { root_index: 6, int_val: 11 },\r\n bn: { root_index: 6, int_val: 11 },\r\n 'b#': { root_index: 6, int_val: 0 },\r\n 'b##': { root_index: 6, int_val: 1 },\r\n bb: { root_index: 6, int_val: 10 },\r\n bbb: { root_index: 6, int_val: 9 },\r\n };\r\n }\r\n static accidentalDisplay(pitch: Pitch, keySignature: string, duration: number, accArray: AccidentalArray[]):\r\n AccidentalDisplay | null {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, keySignature);\r\n const pitchOctave = pitch.letter + '-' + pitch.octave;\r\n const accidentals = accArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitchOctave]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitchOctave].pitch.accidental : keyAccidental;\r\n if ((declared !== pitch.accidental\r\n || pitch.cautionary)) { \r\n const rv: AccidentalDisplay = {\r\n symbol: pitch.accidental,\r\n courtesy: pitch.cautionary ?? false,\r\n forced: pitch.forced ?? false\r\n }\r\n return rv;\r\n }\r\n return null;\r\n }\r\n /**\r\n * return Vex canonical note enharmonic - e.g. Bb to A#\r\n * */\r\n static vexToCannonical(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n return vexCanonicalNotes()[SmoMusic.noteValues[vexKey].int_val];\r\n }\r\n\r\n /**\r\n * A note array (sans octave) in key-signature order\r\n */\r\n static get circleOfFifths(): PitchKey[] {\r\n return [{\r\n letter: 'c',\r\n accidental: 'n'\r\n }, {\r\n letter: 'g',\r\n accidental: 'n'\r\n }, {\r\n letter: 'd',\r\n accidental: 'n'\r\n }, {\r\n letter: 'a',\r\n accidental: 'n'\r\n }, {\r\n letter: 'e',\r\n accidental: 'n'\r\n }, {\r\n letter: 'b',\r\n accidental: 'n'\r\n }, {\r\n letter: 'f',\r\n accidental: '#'\r\n }, {\r\n letter: 'c',\r\n accidental: '#'\r\n }, {\r\n letter: 'a',\r\n accidental: 'b'\r\n }, {\r\n letter: 'e',\r\n accidental: 'b'\r\n }, {\r\n letter: 'b',\r\n accidental: 'b'\r\n }, {\r\n letter: 'f',\r\n accidental: 'n'\r\n }\r\n ];\r\n }\r\n /**\r\n * Return the number of lines above first ledger line below the staff.\r\n * e.g. middle c in treble clef returns 0. Top line f in treble returns 5.\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the first ledger line below\r\n */\r\n static pitchToStaffLine(clef: string, smoPitch: Pitch): number {\r\n const octave = smoPitch.octave * 7 - 4 * 7;\r\n const keyTable = smoPitch.letter + smoPitch.accidental;\r\n let line = (SmoMusic.noteValues[keyTable].root_index + octave) / 2;\r\n line += SmoMusic.clefLedgerShift[clef]\r\n return line;\r\n }\r\n /**\r\n * gives the index into circle-of-fifths array for a pitch, considering enharmonics.\r\n * */\r\n static circleOfFifthsIndex(smoPitch: Pitch) {\r\n const en1 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch)));\r\n const en2 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch))));\r\n const ix = SmoMusic.circleOfFifths.findIndex((el) =>\r\n (el.letter === smoPitch.letter && el.accidental === smoPitch.accidental) ||\r\n (el.letter === en1.letter && el.accidental === en1.accidental) ||\r\n (el.letter === en2.letter && el.accidental === en2.accidental)\r\n );\r\n return ix;\r\n }\r\n\r\n /**\r\n * Get pitch to the right in circle of fifths\r\n * */\r\n static addSharp(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n (SmoMusic.circleOfFifthsIndex(smoPitch) + 1) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Get pitch to the left in circle of fifths\r\n */\r\n static addFlat(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n ((SmoMusic.circleOfFifths.length - 1) + SmoMusic.circleOfFifthsIndex(smoPitch)) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Add @param {number} - sharps\r\n */\r\n static addSharps(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addSharp(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addSharp(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Add *distance* sharps/flats to given key\r\n */\r\n static addFlats(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addFlat(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addFlat(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert array of smo pitches to vex keys, with adjustment for transpose and notehead\r\n * @param pitchAr\r\n * @param keyOffset\r\n * @param noteHead\r\n * @returns {string[]} - array of vex keyx\r\n */\r\n static smoPitchesToVexKeys(pitchAr: Pitch[], keyOffset: number, noteHead: string | null): string[] {\r\n const noopFunc = keyOffset > 0 ? 'addSharps' : 'addFlats';\r\n\r\n const rv: string[] = [];\r\n pitchAr.forEach((pitch) => {\r\n rv.push(SmoMusic.pitchToVexKey(SmoMusic[noopFunc](pitch, keyOffset), noteHead));\r\n });\r\n return rv;\r\n }\r\n\r\n static get scaleIntervals(): Record {\r\n return {\r\n up: [2, 2, 1, 2, 2, 2, 1],\r\n down: [1, 2, 2, 2, 1, 2, 2]\r\n };\r\n }\r\n\r\n /**\r\n * return true if the pitches match, except for octave.\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'a', accidental: '#'}` returns true\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'b', accidental: 'b'}` returns false\r\n * */\r\n static smoScalePitchMatch(p1: Pitch, p2: Pitch): boolean {\r\n const pp1 = JSON.parse(JSON.stringify(p1));\r\n const pp2 = JSON.parse(JSON.stringify(p2));\r\n pp1.octave = 0;\r\n pp2.octave = 0;\r\n\r\n return SmoMusic.smoPitchToInt(pp1) === SmoMusic.smoPitchToInt(pp2);\r\n }\r\n\r\n /**\r\n * Return the number of ledger lines, or 0 if none. positive if\r\n * below the staff, negative if above\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the top staff line\r\n */\r\n static pitchToLedgerLine(clef: Clef, pitch: Pitch): number {\r\n // return the distance from the top ledger line, as 0.5 per line/space\r\n const line = SmoMusic.pitchToStaffLine(clef, pitch);\r\n if (line > 5) {\r\n return -1 * (line - 5);\r\n }\r\n if (line <= 0) {\r\n return -1 * (line - 1);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * return flag state (up === 1 or down === 2) based on pitch and clef if auto\r\n * */\r\n static flagStateFromNote(clef: Clef, note: SmoNote) {\r\n let fs = note.flagState;\r\n if (fs === SmoNote.flagStates.auto) {\r\n fs = SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n return fs;\r\n }\r\n\r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefSigns: Record = {\r\n 'treble': { sign: 'G', line: 2 },\r\n 'bass': { sign: 'F', line: 4 },\r\n 'tenor': { sign: 'C', line: 4 },\r\n 'alto': { sign: 'C', line: 3 },\r\n 'soprano': { sign: 'C', line: 1 },\r\n 'percussion': { sign: 'percussion' },\r\n 'mezzo-soprano': { sign: 'C', line: 2 },\r\n 'baritone-c': { sign: 'C', line: 5 },\r\n 'baritone-f': { sign: 'F', line: 3 },\r\n 'subbass': { sign: 'F', line: 3, octave: -1 },\r\n 'french': { sign: 'G', line: 1 },\r\n 'vocal-tenor': { sign: 'G', line: 2, octave: -1 }\r\n }\r\n \r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefLedgerShift: Record = {\r\n 'treble': 0,\r\n 'bass': 6,\r\n 'tenor': 4,\r\n 'alto': 3,\r\n 'soprano': 1,\r\n 'percussion': 0,\r\n 'mezzo-soprano': 2,\r\n 'baritone-c': 5,\r\n 'baritone-f': 5,\r\n 'subbass': 7,\r\n 'french': -1\r\n }\r\n static scaleTones: string[] = ['tonic', '2', '3', '4', '5', '6', '7'];\r\n static getScaleTonesForKey(keySignature: string): Record {\r\n const key = SmoMusic.enharmonicRoles[keySignature];\r\n const rv: Record = {};\r\n key.forEach((role) => {\r\n if (SmoMusic.scaleTones.indexOf(role.role) >= 0) {\r\n rv[role.letter] = role.letter + role.accidental;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * The purpose of this table is to keep consistent enharmonic spelling when transposing \r\n * instruments in different keys. It is not theoritically complete, e.g.\r\n * there is no reason to distinguish between #5 used as a leading tone for vi- or\r\n * as an augmented chord, the spelling is the same. It does not show a preference\r\n * for notes that don't have an obvious purpose in the key, e.g. it does not try to compute the\r\n * equivalent to 'e#' in the key of 'c'. The computation of the 'intended key area' is\r\n * beyond the scope of a music program to interpret.\r\n */\r\n static get enharmonicRoles(): Record {\r\n const tbl: Record =\r\n { 'c' : [\r\n { letter: 'c', accidental: 'n', role: 'tonic' },\r\n { letter: 'c', accidental: '#', role: '7/2' },\r\n { letter: 'd', accidental: 'b', role: 'b9' },\r\n { letter: 'd', accidental: 'n', role: '2' },\r\n { letter: 'd', accidental: '#', role: '7/3'},\r\n { letter: 'e', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: 'n', role: '3'},\r\n { letter: 'f', accidental: 'n', role: '4'},\r\n { letter: 'f', accidental: '#', role: '#11'},\r\n { letter: 'g', accidental: 'b', role: 'b5'},\r\n { letter: 'g', accidental: 'n', role: '5'},\r\n { letter: 'g', accidental: '#', role: '7/6'},\r\n { letter: 'a', accidental: 'b', role: 'b6'},\r\n { letter: 'a', accidental: 'n', role: '6'},\r\n { letter: 'a', accidental: '#', role: '7/7'},\r\n { letter: 'b', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: 'n', role: '7'}\r\n ], 'c#': [\r\n { letter: 'c', accidental: '#', role: 'tonic' },\r\n { letter: 'c', accidental: '##', role: '7/2' },\r\n { letter: 'd', accidental: 'n', role: 'b9' },\r\n { letter: 'd', accidental: '#', role: '2' },\r\n { letter: 'd', accidental: '##', role: '#2'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: '#', role: '3'},\r\n { letter: 'f', accidental: '#', role: '4'},\r\n { letter: 'f', accidental: '##', role: '#11'},\r\n { letter: 'g', accidental: 'n', role: 'b5'},\r\n { letter: 'g', accidental: '#', role: '5'},\r\n { letter: 'g', accidental: '##', role: '7/6'},\r\n { letter: 'a', accidental: 'n', role: 'b6'},\r\n { letter: 'a', accidental: '#', role: '6'},\r\n { letter: 'a', accidental: '##', role: '7/7'},\r\n { letter: 'b', accidental: 'n', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'db': [\r\n { letter: 'd', accidental: 'b', role: 'tonic' },\r\n { letter: 'd', accidental: 'n', role: '7/2' },\r\n { letter: 'e', accidental: 'bb', role: 'b9' },\r\n { letter: 'e', accidental: 'b', role: '2' },\r\n { letter: 'e', accidental: 'n', role: '7/3'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'f', accidental: 'n', role: '3'},\r\n { letter: 'g', accidental: 'b', role: '4'},\r\n { letter: 'g', accidental: 'n', role: '#11'},\r\n { letter: 'a', accidental: 'bb', role: 'b5'},\r\n { letter: 'a', accidental: 'b', role: '5'},\r\n { letter: 'a', accidental: 'n', role: '7/6'},\r\n { letter: 'b', accidental: 'bb', role: 'b6'},\r\n { letter: 'b', accidental: 'b', role: '6'},\r\n { letter: 'b', accidental: 'n', role: '7/7'},\r\n { letter: 'c', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'd': [\r\n { letter: 'd', accidental: 'n', role: 'tonic' },\r\n { letter: 'd', accidental: '#', role: '7/2' },\r\n { letter: 'e', accidental: 'b', role: 'b9' },\r\n { letter: 'e', accidental: 'n', role: '2' },\r\n { letter: 'e', accidental: '#', role: '7/3'},\r\n { letter: 'f', accidental: 'n', role: 'b3'},\r\n { letter: 'f', accidental: '#', role: '3'},\r\n { letter: 'g', accidental: 'n', role: '4'},\r\n { letter: 'g', accidental: '#', role: '#11'},\r\n { letter: 'a', accidental: 'b', role: 'b5'},\r\n { letter: 'a', accidental: 'n', role: '5'},\r\n { letter: 'a', accidental: '#', role: '7/6'},\r\n { letter: 'b', accidental: 'b', role: 'b6'},\r\n { letter: 'b', accidental: 'n', role: '6'},\r\n { letter: 'b', accidental: '#', role: '7/7'},\r\n { letter: 'c', accidental: 'n', role: 'b7'},\r\n { letter: 'c', accidental: '#', role: '7'}\r\n ], 'eb': [\r\n { letter: 'e', accidental: 'b', role: 'tonic' },\r\n { letter: 'e', accidental: 'n', role: '7/2' },\r\n { letter: 'f', accidental: 'b', role: 'b9' },\r\n { letter: 'f', accidental: 'n', role: '2' },\r\n { letter: 'f', accidental: '#', role: '7/3'},\r\n { letter: 'g', accidental: 'b', role: 'b3'},\r\n { letter: 'g', accidental: 'n', role: '3'},\r\n { letter: 'a', accidental: 'b', role: '4'},\r\n { letter: 'a', accidental: 'n', role: '#11'},\r\n { letter: 'b', accidental: 'bb', role: 'b5'},\r\n { letter: 'b', accidental: 'b', role: '5'},\r\n { letter: 'b', accidental: 'n', role: '7/6'},\r\n { letter: 'c', accidental: 'b', role: '6'},\r\n { letter: 'c', accidental: 'n', role: '6'},\r\n { letter: 'c', accidental: '#', role: '7/7'},\r\n { letter: 'd', accidental: 'b', role: 'b7'},\r\n { letter: 'd', accidental: 'n', role: '7'}\r\n ], 'e': [\r\n { letter: 'e', accidental: 'n', role: 'tonic' },\r\n { letter: 'e', accidental: '#', role: '7/2' },\r\n { letter: 'f', accidental: 'n', role: 'b9' },\r\n { letter: 'f', accidental: '#', role: '2' },\r\n { letter: 'f', accidental: '##', role: '7/3'},\r\n { letter: 'g', accidental: 'n', role: 'b3'},\r\n { letter: 'g', accidental: '#', role: '3'},\r\n { letter: 'a', accidental: 'n', role: '4'},\r\n { letter: 'a', accidental: '#', role: '#11'},\r\n { letter: 'b', accidental: 'b', role: 'b5'},\r\n { letter: 'b', accidental: 'n', role: '5'},\r\n { letter: 'b', accidental: '#', role: '7/6'},\r\n { letter: 'c', accidental: 'n', role: 'b6'},\r\n { letter: 'c', accidental: '#', role: '6'},\r\n { letter: 'c', accidental: '##', role: '7/7'},\r\n { letter: 'd', accidental: 'n', role: 'b7'},\r\n { letter: 'd', accidental: '#', role: '7'}\r\n ], 'f': [\r\n { letter: 'f', accidental: 'n', role: 'tonic' },\r\n { letter: 'f', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'g', accidental: 'n', role: '2' },\r\n { letter: 'g', accidental: '#', role: '7/3'},\r\n { letter: 'a', accidental: 'b', role: 'b3'},\r\n { letter: 'a', accidental: 'n', role: '3'},\r\n { letter: 'b', accidental: 'b', role: '4'},\r\n { letter: 'b', accidental: 'n', role: '#11'},\r\n { letter: 'c', accidental: 'b', role: 'b5'},\r\n { letter: 'c', accidental: 'n', role: '5'},\r\n { letter: 'c', accidental: '#', role: '7/6'},\r\n { letter: 'd', accidental: 'b', role: 'b6'},\r\n { letter: 'd', accidental: 'n', role: '6'},\r\n { letter: 'd', accidental: '#', role: '7/7'},\r\n { letter: 'e', accidental: 'b', role: 'b7'},\r\n { letter: 'e', accidental: 'n', role: '7'}\r\n ], 'f#': [\r\n { letter: 'f', accidental: '#', role: 'tonic' },\r\n { letter: 'f', accidental: '##', role: '7/2' },\r\n { letter: 'g', accidental: 'n', role: 'b9' },\r\n { letter: 'g', accidental: '#', role: '2' },\r\n { letter: 'g', accidental: '##', role: '#2'},\r\n { letter: 'a', accidental: 'n', role: 'b3'},\r\n { letter: 'a', accidental: '#', role: '3'},\r\n { letter: 'b', accidental: 'n', role: '4'},\r\n { letter: 'b', accidental: '#', role: '#11'},\r\n { letter: 'c', accidental: 'n', role: 'b5'},\r\n { letter: 'c', accidental: '#', role: '5'},\r\n { letter: 'c', accidental: '##', role: '7/6'},\r\n { letter: 'd', accidental: 'n', role: 'b6'},\r\n { letter: 'd', accidental: '#', role: '6'},\r\n { letter: 'd', accidental: '##', role: '7/7'},\r\n { letter: 'e', accidental: 'n', role: 'b7'},\r\n { letter: 'e', accidental: '#', role: '7'}\r\n ], 'gb': [\r\n { letter: 'g', accidental: 'b', role: 'tonic' },\r\n { letter: 'g', accidental: 'n', role: '7/2' },\r\n { letter: 'a', accidental: 'bb', role: 'b9' },\r\n { letter: 'a', accidental: 'b', role: '2' },\r\n { letter: 'a', accidental: 'n', role: '7/3'},\r\n { letter: 'a', accidental: 'bb', role: 'b3'},\r\n { letter: 'b', accidental: 'b', role: '3'},\r\n { letter: 'c', accidental: 'b', role: '4'},\r\n { letter: 'c', accidental: 'n', role: '#11'},\r\n { letter: 'd', accidental: 'bb', role: 'b5'},\r\n { letter: 'd', accidental: 'b', role: '5'},\r\n { letter: 'd', accidental: 'n', role: '7/6'},\r\n { letter: 'e', accidental: 'bb', role: 'b6'},\r\n { letter: 'e', accidental: 'b', role: '6'},\r\n { letter: 'e', accidental: 'n', role: '7/7'},\r\n { letter: 'f', accidental: 'b', role: 'b7'},\r\n { letter: 'f', accidental: 'n', role: '7'}\r\n ], 'g': [\r\n { letter: 'g', accidental: 'n', role: 'tonic' },\r\n { letter: 'g', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'a', accidental: 'n', role: '2' },\r\n { letter: 'a', accidental: '#', role: '7/3'},\r\n { letter: 'b', accidental: 'b', role: 'b3'},\r\n { letter: 'b', accidental: 'n', role: '3'},\r\n { letter: 'c', accidental: 'n', role: '4'},\r\n { letter: 'c', accidental: '#', role: '#11'},\r\n { letter: 'd', accidental: 'b', role: 'b5'},\r\n { letter: 'd', accidental: 'n', role: '5'},\r\n { letter: 'd', accidental: '#', role: '7/6'},\r\n { letter: 'e', accidental: 'b', role: 'b6'},\r\n { letter: 'e', accidental: 'n', role: '6'},\r\n { letter: 'e', accidental: '#', role: '7/7'},\r\n { letter: 'f', accidental: 'n', role: 'b7'},\r\n { letter: 'f', accidental: '#', role: '7'}\r\n ],'ab': [\r\n { letter: 'a', accidental: 'b', role: 'tonic' },\r\n { letter: 'a', accidental: 'n', role: '7/2' },\r\n { letter: 'b', accidental: 'bb', role: 'b9' },\r\n { letter: 'b', accidental: 'b', role: '2' },\r\n { letter: 'b', accidental: 'n', role: '7/3' },\r\n { letter: 'b', accidental: 'bb', role: 'b3' },\r\n { letter: 'c', accidental: 'n', role: '3' },\r\n { letter: 'd', accidental: 'b', role: '4' },\r\n { letter: 'd', accidental: 'n', role: '#11' },\r\n { letter: 'e', accidental: 'bb', role: 'b5' },\r\n { letter: 'e', accidental: 'b', role: '5' },\r\n { letter: 'e', accidental: 'n', role: '7/6' },\r\n { letter: 'f', accidental: 'b', role: 'b6' },\r\n { letter: 'f', accidental: 'n', role: '6' },\r\n { letter: 'f', accidental: '#', role: '7/7' },\r\n { letter: 'g', accidental: 'b', role: 'b7' },\r\n { letter: 'g', accidental: 'n', role: '7' }\r\n ], 'a': [\r\n { letter: 'a', accidental: 'n', role: 'tonic' },\r\n { letter: 'a', accidental: '#', role: '7/2' },\r\n { letter: 'b', accidental: 'b', role: 'b9' },\r\n { letter: 'b', accidental: 'n', role: '2' },\r\n { letter: 'b', accidental: '#', role: '7/3'},\r\n { letter: 'c', accidental: 'n', role: 'b3'},\r\n { letter: 'c', accidental: '#', role: '3'},\r\n { letter: 'd', accidental: 'n', role: '4'},\r\n { letter: 'd', accidental: '#', role: '#11'},\r\n { letter: 'e', accidental: 'b', role: 'b5'},\r\n { letter: 'e', accidental: 'n', role: '5'},\r\n { letter: 'e', accidental: '#', role: '7/6'},\r\n { letter: 'f', accidental: 'n', role: 'b6'},\r\n { letter: 'f', accidental: '#', role: '6'},\r\n { letter: 'f', accidental: '##', role: '7/7'},\r\n { letter: 'g', accidental: 'n', role: 'b7'},\r\n { letter: 'g', accidental: '#', role: '7'}\r\n ], 'bb': [\r\n { letter: 'b', accidental: 'b', role: 'tonic' },\r\n { letter: 'b', accidental: 'n', role: '7/2' },\r\n { letter: 'c', accidental: 'b', role: 'b9' },\r\n { letter: 'c', accidental: 'n', role: '2' },\r\n { letter: 'c', accidental: '#', role: '7/3'},\r\n { letter: 'd', accidental: 'b', role: 'b3'},\r\n { letter: 'd', accidental: 'n', role: '3'},\r\n { letter: 'e', accidental: 'b', role: '4'},\r\n { letter: 'e', accidental: 'n', role: '#11'},\r\n { letter: 'f', accidental: 'b', role: 'b5'},\r\n { letter: 'f', accidental: 'n', role: '5'},\r\n { letter: 'f', accidental: '#', role: '7/6'},\r\n { letter: 'g', accidental: 'b', role: 'b6'},\r\n { letter: 'g', accidental: 'n', role: '6'},\r\n { letter: 'g', accidental: '#', role: '7/7'},\r\n { letter: 'a', accidental: 'b', role: 'b7'},\r\n { letter: 'a', accidental: 'n', role: '7'}\r\n ], 'b': [\r\n { letter: 'b', accidental: 'n', role: 'tonic' },\r\n { letter: 'b', accidental: '#', role: '7/2' },\r\n { letter: 'c', accidental: 'n', role: 'b9' },\r\n { letter: 'c', accidental: '#', role: '2' },\r\n { letter: 'c', accidental: '##', role: '7/3'},\r\n { letter: 'd', accidental: 'n', role: 'b3'},\r\n { letter: 'd', accidental: '#', role: '3'},\r\n { letter: 'e', accidental: 'n', role: '4'},\r\n { letter: 'e', accidental: '#', role: '#11'},\r\n { letter: 'f', accidental: 'n', role: 'b5'},\r\n { letter: 'f', accidental: '#', role: '5'},\r\n { letter: 'f', accidental: '##', role: '7/6'},\r\n { letter: 'g', accidental: 'n', role: 'b6'},\r\n { letter: 'g', accidental: '#', role: '6'},\r\n { letter: 'g', accidental: '##', role: '7/7'},\r\n { letter: 'a', accidental: 'n', role: 'b7'},\r\n { letter: 'a', accidental: '#', role: '7'}\r\n ]};\r\n return tbl;\r\n }\r\n /**\r\n * Find the harmonic role for the given pitch\r\n * @param smoPitch \r\n * @param keySignature \r\n * @returns \r\n */\r\n static findRoleOfPitch(smoPitch: Pitch, keySignature: string) {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return '';\r\n }\r\n const keyRole = keyRoles.find((x) => x.letter === smoPitch.letter.toLocaleLowerCase() && x.accidental === smoPitch.accidental.toLowerCase());\r\n if (!keyRole) {\r\n return '';\r\n }\r\n return keyRole.role;\r\n }\r\n /**\r\n * Given a harmonic role, find the pitch that matches it. If there is no one, just\r\n * return the raw transposition\r\n * @param role \r\n * @param keySignature \r\n * @param transposedPitch \r\n * @returns \r\n */\r\n static findPitchForRole(role: string, keySignature: string, transposedPitch: Pitch): Pitch {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n const keyRole = keyRoles.find((x) => x.role === role);\r\n if (!keyRole) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n let octave = transposedPitch.octave;\r\n if ((transposedPitch.letter === 'a' || transposedPitch.letter === 'b') && keyRole.letter === 'c') {\r\n octave += 1;\r\n }\r\n return { letter: keyRole.letter, accidental: keyRole.accidental, octave };\r\n }\r\n static rawTranspose(pitch: Pitch, offset: number) {\r\n return SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset);\r\n }\r\n static transposePitchForKey(pitch: Pitch, originalKey: string, destinationKey: string, offset: number): Pitch {\r\n const transposedPitch = SmoMusic.getEnharmonicInKey(SmoMusic.rawTranspose(pitch, offset), destinationKey);\r\n const role = SmoMusic.findRoleOfPitch(pitch, originalKey);\r\n if (role.length) {\r\n return SmoMusic.findPitchForRole(role, destinationKey, transposedPitch);\r\n }\r\n return transposedPitch;\r\n }\r\n\r\n /**\r\n * convert from SMO to VEX format so we can use the VexFlow tables and methods\r\n * example:\r\n * `{letter,octave,accidental}` object to vexKey string `'f#'`\r\n * */\r\n static _pitchToVexKey(smoPitch: Pitch): string {\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n if (smoPitch.accidental.length === 0) {\r\n vexKey = vexKey + 'n';\r\n } else {\r\n vexKey = vexKey + smoPitch.accidental;\r\n }\r\n if (smoPitch.octave) {\r\n vexKey = vexKey + '/' + smoPitch.octave;\r\n }\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * convert smo pitch to easy score (vex) format. Mostly used\r\n * for debugging and generating Vex test cases\r\n * @param smoPitch\r\n * @returns - a string that can be converted to a VEX routine, with some difficulty\r\n */\r\n static pitchToEasyScore(smoPitch: Pitch): string {\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n vexKey = vexKey + smoPitch.accidental;\r\n return vexKey + smoPitch.octave;\r\n }\r\n /**\r\n * convert a pitch to a format expected by the MIDI writer\r\n * @param smoPitch pitch to convert\r\n * @returns pitch in MIDI string format.\r\n */\r\n static smoPitchToMidiString(smoPitch: Pitch): string {\r\n const midiPitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch));\r\n let rv = midiPitch.letter.toUpperCase();\r\n if (midiPitch.accidental !== 'n') {\r\n rv += midiPitch.accidental;\r\n }\r\n rv += midiPitch.octave;\r\n return rv;\r\n }\r\n static smoPitchesToMidiStrings(smoPitches: Pitch[]): string[] {\r\n const rv: string[] = [];\r\n smoPitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToMidiString(pitch));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * filled in from the midi routines borrowed from \r\n * // https://github.com/grimmdude/MidiWriterJS\r\n * @param midiPitch pitch from MIDIwrite\r\n * @returns SMO pitch\r\n */\r\n static midiPitchToSmoPitch(midiPitch: string): Pitch {\r\n const smoPitch: Pitch = {} as Pitch;\r\n smoPitch.letter = midiPitch[0].toLowerCase() as PitchLetter;\r\n if (isNaN(parseInt(midiPitch[1], 10))) {\r\n smoPitch.accidental = midiPitch[1];\r\n smoPitch.octave = parseInt(midiPitch[2], 10);\r\n } else {\r\n smoPitch.accidental = 'n';\r\n smoPitch.octave = parseInt(midiPitch[1], 10);\r\n }\r\n return smoPitch;\r\n }\r\n static midiPitchToMidiNumber(midiPitch: string): number {\r\n return SmoMusic.smoPitchToInt(SmoMusic.midiPitchToSmoPitch(midiPitch)) + 12;\r\n }\r\n\r\n static pitchToVexKey(smoPitch: Pitch, head: string | null = null): string {\r\n if (!head) {\r\n return SmoMusic._pitchToVexKey(smoPitch);\r\n }\r\n return SmoMusic._pitchToVexKey(smoPitch) + '/' + head;\r\n }\r\n\r\n /**\r\n * Turns vex pitch string into smo pitch, e.g.\r\n * `cn/4 => {'c','n',4}`\r\n * @param vexPitch\r\n * @returns SmoPitch\r\n * */\r\n static vexToSmoPitch(vexPitch: string): Pitch {\r\n let octave = 0;\r\n const po = vexPitch.split('/');\r\n const rv = SmoMusic.vexToSmoKey(po[0]);\r\n if (po.length > 1) {\r\n octave = parseInt(po[1], 10);\r\n octave = isNaN(octave) ? 4 : octave;\r\n } else {\r\n octave = 4;\r\n }\r\n (rv as Pitch).octave = octave;\r\n return rv as Pitch;\r\n }\r\n\r\n /**\r\n * Convert to smo pitch, without octave\r\n * ``['f#'] => [{letter:'f',accidental:'#'}]``\r\n * */\r\n static vexToSmoKey(vexPitch: string): PitchKey {\r\n const accidental = vexPitch.length < 2 ? 'n' : vexPitch.substring(1, vexPitch.length);\r\n const pp = vexPitch.split('/')[0];\r\n return {\r\n letter: pp[0].toLowerCase() as PitchLetter,\r\n accidental\r\n };\r\n }\r\n\r\n // {letter:'f',accidental:'#'} => [f#/\r\n static smoPitchesToVex(pitchAr: Pitch[]): string[] {\r\n var rv: string[] = [];\r\n pitchAr.forEach((p) => {\r\n rv.push(SmoMusic.pitchToVexKey(p));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param vexKey - pitch in vex format\r\n * @returns pitch in vex format, sans octave\r\n */\r\n static stripVexOctave(vexKey: string): string {\r\n if (vexKey.indexOf('/') > 0) {\r\n vexKey = vexKey.substring(0, vexKey.indexOf('/'));\r\n }\r\n return vexKey;\r\n }\r\n /**\r\n * compare pitches for frequency match\r\n */\r\n static pitchArraysMatch(ar1: Pitch[], ar2: Pitch[]): boolean {\r\n let matches = 0;\r\n const ir1 = SmoMusic.smoPitchesToIntArray(ar1);\r\n const ir2 = SmoMusic.smoPitchesToIntArray(ar2);\r\n if (ir1.length !== ir2.length) {\r\n return false;\r\n }\r\n ir1.forEach((num) => {\r\n if (ir2.indexOf(num) >= 0) {\r\n matches += 1;\r\n }\r\n });\r\n return matches === ir1.length;\r\n }\r\n /**\r\n * convert pitches to integer pitch representations\r\n * by calling smoPitchToInt\r\n * @param pitches Smo pitches\r\n * @returns \r\n */\r\n static smoPitchesToIntArray(pitches: Pitch[]): number[] {\r\n const rv: number[] = [];\r\n pitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToInt(pitch));\r\n });\r\n return rv.sort();\r\n }\r\n\r\n /**\r\n * convert a pitch to an integer value, used for transpositions, intervals, etc.\r\n * @param pitch \r\n * @returns \r\n */\r\n static smoPitchToInt(pitch: Pitch): number {\r\n if (typeof (pitch.octave) === 'undefined') {\r\n pitch.octave = 0;\r\n }\r\n const intVal = SmoMusic.noteValues[\r\n SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch))].int_val;\r\n const octave = (pitch.letter === 'c' && pitch.accidental === 'b' && pitch.octave > 0) ?\r\n pitch.octave - 1 : pitch.octave;\r\n return octave * 12 + intVal;\r\n }\r\n\r\n /**\r\n * Convert a number to a SMO pitch\r\n * @param intValue - number of 1/2 steps from `c0`\r\n * @returns \r\n */\r\n static smoIntToPitch(intValue: number): Pitch {\r\n let octave = 0;\r\n let accidental = '';\r\n let noteKey: PitchLetter | null = null;\r\n const letterInt = intValue >= 0 ? intValue % 12 :\r\n 12 - (Math.abs(intValue) % 12);\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 1\r\n )) as PitchLetter | null;\r\n if (!noteKey) {\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 2\r\n )) as PitchLetter;\r\n }\r\n octave = Math.floor(intValue / 12);\r\n octave = octave >= 0 ? octave : 0;\r\n accidental = noteKey.substring(1, noteKey.length);\r\n // eslint-disable-next-line\r\n accidental = accidental ? accidental : 'n';\r\n return {\r\n letter: noteKey[0] as PitchLetter,\r\n accidental,\r\n octave\r\n };\r\n }\r\n static pitchKeyToPitch(pk: PitchKey): Pitch {\r\n return { letter: pk.letter, accidental: pk.accidental, octave: 1 };\r\n }\r\n\r\n /**\r\n * Consider instrument transpose when setting key -\r\n * e.g. Eb for Bb instruments is F. Note: return value is not\r\n * a valid VEX key signature. Use vexKeySignatureTranspose for that.\r\n */\r\n static vexKeySigWithOffset(vexKey: string, offset: number): string {\r\n const pk: PitchKey = SmoMusic.vexToSmoKey(vexKey);\r\n const pi: number = SmoMusic.smoPitchToInt(SmoMusic.pitchKeyToPitch(pk)) + offset;\r\n let newKey: string = SmoMusic.toValidKeySignature(SmoMusic.pitchToVexKey(SmoMusic.smoIntToPitch(pi)));\r\n // handle equivalent ks\r\n if (newKey === 'c#' && vexKey.indexOf('b') >= 0) {\r\n newKey = 'db';\r\n }\r\n return newKey;\r\n }\r\n static _enharmonics: Record | null = null;\r\n /**\r\n * return a map of enharmonics for choosing or cycling. notes are in vexKey form.\r\n */\r\n static get enharmonics(): Record {\r\n let i = 0;\r\n if (SmoMusic._enharmonics !== null) {\r\n return SmoMusic._enharmonics;\r\n }\r\n const rv: Record = {};\r\n const keys = Object.keys(SmoMusic.noteValues);\r\n for (i = 0; i < keys.length; ++i) {\r\n const key = keys[i];\r\n const int_val: number = SmoMusic.noteValues[key].int_val;\r\n if (typeof (rv[int_val.toString()]) === 'undefined') {\r\n rv[int_val.toString()] = [];\r\n }\r\n // only consider natural note 1 time. It is in the list twice for some reason.\r\n if (key.indexOf('n') === -1) {\r\n rv[int_val.toString()].push(key);\r\n }\r\n }\r\n SmoMusic._enharmonics = rv;\r\n return rv;\r\n }\r\n /**\r\n * Get enharmonic equivalent of given notes for cycle/choose\r\n * @param vexKey\r\n * @returns\r\n */\r\n static getEnharmonics(vexKey: string): string[] {\r\n const proto = SmoMusic.stripVexOctave(vexKey);\r\n const rv: string[] = [];\r\n let ne = SmoMusic.getEnharmonic(vexKey);\r\n rv.push(proto);\r\n while (ne[0] !== proto[0]) {\r\n rv.push(ne);\r\n ne = SmoMusic.getEnharmonic(ne);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * return the next note from the cycle in `getEnharmonics`\r\n */\r\n static getEnharmonic(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n const intVal = SmoMusic.noteValues[vexKey.toLowerCase()].int_val;\r\n const ar = SmoMusic.enharmonics[intVal.toString()];\r\n const len = ar.length;\r\n // 'n' for natural in key but not in value\r\n vexKey = vexKey.length > 1 && vexKey[1] === 'n' ? vexKey[0] : vexKey;\r\n const ix = ar.indexOf(vexKey);\r\n vexKey = ar[(ix + 1) % len];\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * Return a pitch a diatonic step away from SmoPitch in vexKey\r\n * @param smoPitch\r\n * @param vexKey\r\n * @param direction\r\n * @returns\r\n */\r\n static closestTonic(smoPitch: Pitch, vexKey: string, direction: number): Pitch {\r\n direction = Math.sign(direction) < 0 ? -1 : 1;\r\n const tonic = SmoMusic.vexToSmoKey(vexKey);\r\n const rv = SmoMusic.pitchKeyToPitch(tonic);\r\n rv.octave = smoPitch.octave;\r\n const iix = SmoMusic.smoPitchToInt(smoPitch);\r\n const smint = SmoMusic.smoPitchToInt(rv);\r\n if (Math.sign(smint - iix) !== direction) {\r\n rv.octave += direction;\r\n }\r\n return rv;\r\n }\r\n\r\n // ### toValidKeySignature\r\n // When transposing, make sure key signature is valid, e.g. g# should be\r\n // Ab\r\n static toValidKeySignature(vexKey: string): string {\r\n let strlen = 0;\r\n const map: Record = { 'a#': 'bb', 'g#': 'ab', 'cb': 'b', 'd#': 'eb' };\r\n strlen = (vexKey.length > 2 ? 2 : vexKey.length);\r\n // Vex doesn't like 'n' in key signatures.\r\n if (strlen === 2 && vexKey[1].toLowerCase() === 'n') {\r\n strlen = 1;\r\n }\r\n const rv = vexKey.substr(0, strlen);\r\n if (map[rv.toLowerCase()]) {\r\n return map[rv.toLowerCase()];\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When transposing, get the enharmonic that most closely fits the key\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n * @param smoPitch\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getEnharmonicInKey(smoPitch: Pitch, keySignature: string): Pitch {\r\n let match = false;\r\n let rv = '';\r\n if (typeof (smoPitch.octave) === 'undefined') {\r\n smoPitch.octave = 1;\r\n }\r\n const sharpKey = keySignature.indexOf('#') >= 0;\r\n const flatKey = keySignature.indexOf('b') >= 0;\r\n const ar = SmoMusic.getEnharmonics(SmoMusic.pitchToVexKey(smoPitch));\r\n rv = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(smoPitch));\r\n const scaleMap: Record = SmoMusic.getScaleTonesForKey(keySignature);\r\n // new VF.Music().createScaleMap(keySignature);\r\n ar.forEach((vexKey) => {\r\n if (vexKey.length === 1) {\r\n vexKey += 'n';\r\n }\r\n if (vexKey === scaleMap[vexKey[0]]) {\r\n rv = vexKey;\r\n match = true;\r\n } else if (!match) {\r\n // In the absence of a match of a key tone, we bias towards more\r\n // 'common', like Bb is more common than A#, esp. as a chord. This maybe\r\n // just be my horn player bias towards flat keys\r\n if (vexKey === 'a#' && !sharpKey) {\r\n rv = 'bb';\r\n } else if (vexKey === 'g#' && !sharpKey) {\r\n rv = 'ab';\r\n } else if (vexKey === 'c#' && !sharpKey) {\r\n rv = 'db';\r\n } else if (vexKey === 'd#' && !sharpKey) {\r\n rv = 'eb';\r\n } else if (vexKey === 'f#' && flatKey) {\r\n rv = 'gb';\r\n }\r\n }\r\n });\r\n const smoRv: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(rv));\r\n smoRv.octave = smoPitch.octave;\r\n const rvi = SmoMusic.smoPitchToInt(smoRv);\r\n const ori = SmoMusic.smoPitchToInt(smoPitch);\r\n // handle the case of c0 < b0, pitch-wise\r\n smoRv.octave += Math.sign(ori - rvi);\r\n return smoRv;\r\n }\r\n /**\r\n * fix the enharmonic to match the key, if possible\r\n * @example\r\n * `getKeyFriendlyEnharmonic('b','eb'); => returns 'bb'\r\n * return vex string\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n */\r\n static getKeyFriendlyEnharmonic(letter: string, keySignature: string): string {\r\n let rv: string = letter;\r\n let i = 0;\r\n const scale: string[] = Object.values(SmoMusic.getScaleTonesForKey(keySignature));\r\n let prop: string = SmoMusic.getEnharmonic(letter.toLowerCase());\r\n while (prop.toLowerCase() !== letter.toLowerCase()) {\r\n for (i = 0; i < scale.length; ++i) {\r\n const skey: string = scale[i];\r\n if ((skey[0] === prop && skey[1] === 'n') ||\r\n (skey.toLowerCase() === prop.toLowerCase())) {\r\n rv = skey;\r\n break;\r\n }\r\n }\r\n prop = (prop[1] === 'n' ? prop[0] : prop);\r\n prop = SmoMusic.getEnharmonic(prop);\r\n }\r\n return rv;\r\n }\r\n /**\r\n // given a letter pitch (a,b,c etc.), and a key signature, return the actual note\r\n // that you get without accidentals\r\n // `SmoMusic.getKeySignatureKey('F','G'); // returns f#`\r\n * @param letter\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getKeySignatureKey(letter: PitchLetter, keySignature: string): string {\r\n const scaleMap = SmoMusic.getScaleTonesForKey(keySignature);\r\n return scaleMap[letter];\r\n }\r\n\r\n static getAccidentalForKeySignature(smoPitch: Pitch, keySignature: string): string {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return vexKey.length === 1 ? 'n' : vexKey.substr(1, vexKey.length - 1);\r\n }\r\n\r\n // ### isPitchInKeySignature\r\n // Return true if the pitch is not an accidental in the give key, e.g.\r\n // f# in 'g' or c in 'Bb'\r\n static isPitchInKeySignature(smoPitch: Pitch, keySignature: string): boolean {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return (vexKey.length === 1 && smoPitch.accidental === 'n' ||\r\n (vexKey[1] === smoPitch.accidental));\r\n }\r\n\r\n // ### getIntervalInKey\r\n // give a pitch and a key signature, return another pitch at the given\r\n // diatonic interval. Similar to getKeyOffset but diatonic.\r\n static getIntervalInKey(pitch: Pitch, keySignature: string, interval: number): Pitch {\r\n let scaleIx = 0;\r\n let diatonicIx = 0;\r\n if (interval === 0) {\r\n return JSON.parse(JSON.stringify(pitch));\r\n }\r\n\r\n const delta = interval > 0 ? 1 : -1;\r\n const inv = -1 * delta;\r\n const tonic = SmoMusic.closestTonic(pitch, keySignature, inv);\r\n const intervals = delta > 0 ? SmoMusic.scaleIntervals.up : SmoMusic.scaleIntervals.down;\r\n const pitchInt = SmoMusic.smoPitchToInt(pitch);\r\n let nkey = tonic;\r\n let nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n while (Math.sign(nkeyInt - pitchInt) !== delta && Math.sign(nkeyInt - pitchInt) !== 0) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n }\r\n while (diatonicIx !== interval) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n diatonicIx += delta;\r\n }\r\n return SmoMusic.getEnharmonicInKey(nkey, keySignature);\r\n }\r\n\r\n static getLetterNotePitch(prevPitch: Pitch, letter: PitchLetter, key: string): Pitch {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(prevPitch));\r\n pitch.letter = letter;\r\n\r\n // Make the key 'a' make 'Ab' in the key of Eb, for instance\r\n const vexKsKey = SmoMusic.getKeySignatureKey(letter, key);\r\n if (vexKsKey.length > 1) {\r\n pitch.accidental = vexKsKey[1];\r\n } else {\r\n pitch.accidental = 'n';\r\n }\r\n\r\n // make the octave of the new note as close to previous (or next) note as possible.\r\n const upv = ['bc', 'ac', 'bd', 'da', 'be', 'gc'];\r\n const downv = ['cb', 'ca', 'db', 'da', 'eb', 'cg'];\r\n const delta = prevPitch.letter + pitch.letter;\r\n if (upv.indexOf(delta) >= 0) {\r\n pitch.octave += 1;\r\n }\r\n if (downv.indexOf(delta) >= 0) {\r\n pitch.octave -= 1;\r\n }\r\n return pitch;\r\n }\r\n\r\n /**\r\n * return the key signature, transposed a number of 1/2 steps in Vex key format\r\n * @param key start key\r\n * @param transposeIndex number of 1/2 steps\r\n * @returns {string} - vex key\r\n */\r\n static vexKeySignatureTranspose(key: string, transposeIndex: number): string {\r\n let rv = key;\r\n if (key.length < 1) {\r\n return key;\r\n }\r\n rv = this.vexKeySigWithOffset(key, transposeIndex);\r\n if (rv.length === 1) {\r\n return rv[0].toUpperCase();\r\n }\r\n return rv[0].toUpperCase() + rv.substring(1);\r\n /* const pitch: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(key));\r\n key = SmoMusic.smoPitchesToVexKeys([pitch], transposeIndex, null)[0];\r\n key = SmoMusic.stripVexOctave(key);\r\n key = key[0].toUpperCase() + key.substring(1, key.length);\r\n if (key.length > 1 && key[1] === 'n') {\r\n key = key[0];\r\n }\r\n return key; */\r\n }\r\n static get frequencyMap() {\r\n return SmoAudioPitch.pitchFrequencyMap;\r\n }\r\n\r\n // ### get letterPitchIndex\r\n // Used to adjust octave when transposing.\r\n // Pitches are measured from c, so that b0 is higher than c0, c1 is 1 note higher etc.\r\n static get letterPitchIndex(): Record {\r\n return {\r\n 'c': 0,\r\n 'd': 1,\r\n 'e': 2,\r\n 'f': 3,\r\n 'g': 4,\r\n 'a': 5,\r\n 'b': 6\r\n };\r\n }\r\n\r\n /**\r\n * Indicate if a change from letter note 'one' to 'two' needs us to adjust the\r\n * octave due to the `SmoMusic.letterPitchIndex` (b0 is higher than c0)\r\n * */\r\n static letterChangedOctave(one: PitchLetter, two: PitchLetter): number {\r\n const p1 = SmoMusic.letterPitchIndex[one];\r\n const p2 = SmoMusic.letterPitchIndex[two];\r\n if (p1 < p2 && p2 - p1 > 2) {\r\n return -1;\r\n }\r\n if (p1 > p2 && p1 - p2 > 2) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Transpose a `Pitch` `offset` 1/2 steps\r\n * @param pitch\r\n * @param offset\r\n * @returns\r\n */\r\n static getKeyOffset(pitch: Pitch, offset: number): Pitch {\r\n const canon = vexCanonicalNotes();\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = SmoMusic.pitchToVexKey(pitch);\r\n vexKey = SmoMusic.vexToCannonical(vexKey);\r\n const rootIndex = canon.indexOf(vexKey);\r\n let octave = pitch.octave;\r\n if (Math.abs(offset) >= 12) {\r\n const octaveOffset = Math.sign(offset) * Math.floor(Math.abs(offset) / 12);\r\n octave += octaveOffset;\r\n offset = offset - (12 * octaveOffset);\r\n if (offset < 0) {\r\n offset = 12 + offset;\r\n }\r\n }\r\n if (rootIndex + offset >= canon.length) {\r\n octave += 1;\r\n }\r\n if (rootIndex + offset < 0) {\r\n octave -= 1;\r\n }\r\n const rv = JSON.parse(JSON.stringify(pitch));\r\n const index = (rootIndex + canon.length + offset) % canon.length;\r\n vexKey = canon[index];\r\n if (vexKey.length > 1) {\r\n rv.accidental = vexKey.substring(1);\r\n vexKey = vexKey[0];\r\n } else {\r\n rv.accidental = '';\r\n }\r\n rv.letter = vexKey;\r\n rv.octave = octave;\r\n return rv;\r\n }\r\n\r\n // ### keySignatureLength\r\n // return the number of sharp/flat in a key signature for sizing guess.\r\n static get keySignatureLength(): Record {\r\n return {\r\n 'C': 0,\r\n 'B': 5,\r\n 'A': 3,\r\n 'F#': 6,\r\n 'Bb': 2,\r\n 'Ab': 4,\r\n 'Gg': 6,\r\n 'G': 1,\r\n 'F': 1,\r\n 'Eb': 3,\r\n 'Db': 5,\r\n 'Cb': 7,\r\n 'C#': 7,\r\n 'E': 4,\r\n 'D': 2\r\n };\r\n }\r\n\r\n static getSharpsInKeySignature(key: string): number {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n if (sharpKeys.indexOf(key.toUpperCase()) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[key.toUpperCase()];\r\n }\r\n\r\n static getFlatsInKeySignature(key: string): number {\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n let caseKey = key[0].toUpperCase();\r\n if (key.length > 0) {\r\n caseKey += key.substr(1, key.length);\r\n }\r\n if (flatKeys.indexOf(caseKey) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[caseKey];\r\n }\r\n static midiKeyToVexKey(midiKey: number): string {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n if (midiKey === 0) {\r\n return 'C';\r\n }\r\n const flat = midiKey < 0;\r\n let ix = Math.abs(midiKey) - 1;\r\n if (ix > 6) {\r\n return 'C';\r\n }\r\n if (flat) {\r\n return flatKeys[ix];\r\n } else {\r\n return sharpKeys[ix];\r\n }\r\n }\r\n static highestDuration = 32768;\r\n static lowestDuration = 32768 / 256;\r\n static durationsDescending = [\r\n SmoMusic.highestDuration, // breve?\r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 4, // 1/2\r\n SmoMusic.highestDuration / 8, // 1/4 \r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 64, // 32nd\r\n SmoMusic.highestDuration / 128 // 64th \r\n ];\r\n static durationsAscending = [\r\n SmoMusic.highestDuration / 256, // 128th\r\n SmoMusic.highestDuration / 128, // 64th\r\n SmoMusic.highestDuration / 64, // 32nd \r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 8, // 1/4\r\n SmoMusic.highestDuration / 4, // 1/2 \r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 1 // breve\r\n ];\r\n static ticksFromSmoDuration(duration: SimpleDuration): number {\r\n let rv = duration.baseTicks;\r\n let dotValue = duration.baseTicks / 2;\r\n for (var i = 0; i < duration.dots && i < 4; ++i) {\r\n rv += dotValue;\r\n dotValue = dotValue / 2; \r\n }\r\n return rv;\r\n }\r\n static _validDurations: Record | null = null;\r\n static _validDurationKeys: number[] = [];\r\n static get validDurations():Record {\r\n const computeDots = (tt: number, dots: number) => {\r\n let dottedValue = tt;\r\n let dotValue = tt / 2;\r\n let minDot = 0;\r\n for (var xxx = 0; xxx < dots; ++xxx) {\r\n dottedValue += dotValue;\r\n minDot = dotValue;\r\n dotValue = dotValue / 2;\r\n }\r\n return { dottedValue, minDot };\r\n }\r\n if (SmoMusic._validDurations === null) {\r\n SmoMusic._validDurations = {};\r\n let index = 0;\r\n for (var i = 0; i < SmoMusic.durationsDescending.length; ++i) {\r\n const baseTicks = SmoMusic.durationsDescending[i];\r\n for (var j = 3; j >= 1; --j) {\r\n const { dottedValue, minDot } = computeDots(baseTicks, j);\r\n if (dottedValue < SmoMusic.highestDuration && minDot > SmoMusic.lowestDuration) {\r\n SmoMusic._validDurations[dottedValue] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: dottedValue,\r\n baseTicks,\r\n dots: j\r\n }\r\n SmoMusic._validDurationKeys.push(dottedValue);\r\n }\r\n }\r\n SmoMusic._validDurations[baseTicks] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: baseTicks,\r\n baseTicks,\r\n dots: 0\r\n };\r\n SmoMusic._validDurationKeys.push(baseTicks);\r\n }\r\n }\r\n return SmoMusic._validDurations;\r\n }\r\n /**\r\n * Get the closest duration from ticks\r\n * @param ticks \r\n * @returns \r\n */\r\n static closestSmoDurationFromTicks(ticks: number): SimpleDuration | null {\r\n if (SmoMusic.validDurations[ticks]) {\r\n return SmoMusic.validDurations[ticks];\r\n }\r\n for (var i = 0; i < SmoMusic._validDurationKeys.length; ++i) {\r\n if (SmoMusic._validDurationKeys[i] < ticks) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[i]];\r\n }\r\n }\r\n return null;\r\n }\r\n static _ticksToDuration: Record = {};\r\n\r\n // ### ticksToDuration\r\n // Frequently we double/halve a note duration, and we want to find the vex tick duration that goes with that.\r\n static get ticksToDuration(): Record {\r\n let i = 0;\r\n const durations = ['1/2', '1', '2', '4', '8', '16', '32', '64', '128', '256'];\r\n const _ticksToDurationsF = () => {\r\n for (i = 0; i < SmoMusic.durationsDescending.length - 1; ++i) {\r\n let j = 0;\r\n let dots = '';\r\n let ticks = 0;\r\n\r\n // We support up to 4 'dots'\r\n for (j = 0; j <= 4 && j + i < SmoMusic.durationsDescending.length; ++j) {\r\n ticks += SmoMusic.durationsDescending[i + j];\r\n SmoMusic._ticksToDuration[ticks.toString()] = durations[i] + dots;\r\n dots += 'd';\r\n }\r\n }\r\n };\r\n if (Object.keys(SmoMusic._ticksToDuration).length < 1) {\r\n _ticksToDurationsF();\r\n }\r\n return SmoMusic._ticksToDuration;\r\n } \r\n // static closestSmoDuration(ticks: number): SmoDuration {\r\n // if ()\r\n // }\r\n static timeSignatureToTicks(timeSignature: string): number {\r\n const nd = timeSignature.split('/');\r\n const num = parseInt(nd[0], 10);\r\n const den = parseInt(nd[1], 10);\r\n const base = 2048 * (8 / den);\r\n return base * num;\r\n }\r\n static smoTicksToVexDots(ticks: number) {\r\n const vd = SmoMusic.ticksToDuration[ticks];\r\n if (!vd) {\r\n return 0;\r\n }\r\n const dots = (vd.match(/d/g) || []).length;\r\n return dots;\r\n }\r\n static midiTicksForQuantizeTo(ticks: number) {\r\n const oneDot = ticks * 2;\r\n const twoDots = ticks * 4;\r\n const threeDots = ticks * 8;\r\n const dCount = (str: string) => {\r\n const re = /d/g\r\n return ((str || '').match(re) || []).length\r\n }\r\n return Object.keys(SmoMusic.ticksToDuration).filter((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt < ticks) {\r\n return false;\r\n }\r\n const dots = dCount(SmoMusic.ticksToDuration[key]);\r\n if (dots > 0 && keyInt < oneDot) {\r\n return false;\r\n }\r\n if (dots > 1 && keyInt < twoDots) {\r\n return false;\r\n }\r\n if (dots > 2 && keyInt < threeDots) {\r\n return false;\r\n }\r\n if (dots > 3) {\r\n return false;\r\n }\r\n return true;\r\n })\r\n .map((key) => parseInt(key, 10));\r\n // return Object.keys(SmoMusic.ticksToDuration).map((key) => parseInt(key, 10)); \r\n }\r\n static get midiTicksForQuantizeMap(): Record {\r\n return {\r\n 512: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 1024: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 2048: SmoMusic.midiTicksForQuantizeTo(2048)\r\n };\r\n }\r\n static midiTicksForQuantize(ticks: number) {\r\n return SmoMusic.midiTicksForQuantizeMap[ticks];\r\n }\r\n static binarySearch(target: number, ix: number, partition: number, input: number[]) {\r\n const test = input[ix];\r\n const cost = Math.abs(target - test);\r\n if (cost < 1) {\r\n return ({ cost, result: test, newIx: ix, oldIx: ix, partition: 0, input })\r\n }\r\n partition = Math.round(partition / 2) + 1;\r\n const step = Math.round(partition / 2);\r\n if (input[ix] > target) {\r\n return ({ cost, result: input[ix], newIx: ix - step, partition, input });\r\n } else {\r\n return ({ cost, result: input[ix], newIx: ix + step, partition, input });\r\n }\r\n }\r\n static midiTickSearch(target: number, quantize: number) {\r\n const tickSet = SmoMusic.midiTicksForQuantize(quantize);\r\n let partition = Math.round(tickSet.length / 2);\r\n let ix = partition;\r\n let best = { cost: Math.abs(tickSet[ix] - target), result: tickSet[ix], ix };\r\n let result = SmoMusic.binarySearch(target, ix, partition, tickSet);\r\n while (best.cost > 1) {\r\n if (best.cost > result.cost) {\r\n best.cost = result.cost;\r\n best.result = result.result;\r\n best.ix = ix;\r\n }\r\n ix = result.newIx;\r\n if (result.partition <= 3) {\r\n break;\r\n }\r\n result = SmoMusic.binarySearch(target, result.newIx, result.partition, tickSet);\r\n }\r\n if (result.cost > 1 && result.partition > 0) {\r\n let i = 0;\r\n const ix = best.ix;\r\n const step = best.result > target ? -1 : 1;\r\n for (i = 0; i < (result.partition + 2) && (i * step) + ix < tickSet.length && (i * step) + ix >= 0; ++i) {\r\n const newIx = (i * step) + ix;\r\n const cost = Math.abs(target - tickSet[newIx]);\r\n if (best.cost > cost) {\r\n best.cost = cost;\r\n best.ix = (i * step) + ix;\r\n best.result = tickSet[(i * step) + ix];\r\n }\r\n }\r\n }\r\n return { cost: best.cost, result: best.result };\r\n }\r\n // ## closestVexDuration\r\n // ## Description:\r\n // return the closest vex duration >= to the actual number of ticks. Used in beaming\r\n // triplets which have fewer ticks then their stem would normally indicate.\r\n static closestVexDuration(ticks: number): string {\r\n let stemTicks = SmoMusic.highestDuration;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (ticks <= stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n stemTicks = stemTicks * 2;\r\n return SmoMusic.ticksToDuration[stemTicks];\r\n }\r\n\r\n // ### closestDurationTickLtEq\r\n // Price is right style, closest tick value without going over. Used to pad\r\n // rests when reading musicXML.\r\n static closestDurationTickLtEq(ticks: number): number {\r\n const sorted = Object.keys(SmoMusic.ticksToDuration)\r\n .map((key) => parseInt(key, 10))\r\n .filter((key) => key <= ticks);\r\n return sorted[sorted.length - 1];\r\n }\r\n /**\r\n * Return array of valid note-lengths from an odd number of ticks,\r\n * so we can come as close as possible to representing the ticks with notes\r\n * @param ticks\r\n * @returns\r\n */\r\n static splitIntoValidDurations(ticks: number): number[] {\r\n const rv = [];\r\n let closest = 0;\r\n while (ticks > 128) {\r\n closest = SmoMusic.closestDurationTickLtEq(ticks);\r\n ticks -= closest;\r\n rv.push(closest);\r\n }\r\n return rv;\r\n }\r\n // ### vexStemType\r\n // return the vex stem type (no dots)\r\n static vexStemType(ticks: number): string {\r\n const str = SmoMusic.ticksToDuration[SmoMusic.splitIntoValidDurations(ticks)[0]];\r\n if (str.indexOf('d') >= 0) {\r\n return str.substr(0, str.indexOf('d'));\r\n }\r\n return str;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with an added dot. Return\r\n // identity if that is not a supported value.\r\n static getNextDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index > 0) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index - 1]].ticks;\r\n }\r\n return ticks;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with one fewer dot. Return\r\n // identity if that is not a supported value.\r\n static getPreviousDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index < SmoMusic._validDurationKeys.length + 1) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index + 1]].ticks;\r\n }\r\n return ticks;\r\n }\r\n\r\n /**\r\n * break the duration up into an array of durations, to split a long\r\n * note up between bars when pasting.\r\n * @param duration\r\n * @returns\r\n */\r\n static gcdMap(duration: number): number[] {\r\n let k = 0;\r\n const keys = Object.keys(SmoMusic.ticksToDuration).map((x) => parseInt(x, 10));\r\n const dar = [];\r\n const gcd = (td: number) => {\r\n let rv = keys[0];\r\n for (k = 1; k < keys.length; ++k) {\r\n if (td % keys[k] === 0) {\r\n rv = keys[k];\r\n }\r\n }\r\n return rv;\r\n };\r\n while (duration > 0 && !SmoMusic.ticksToDuration[duration]) {\r\n const div = gcd(duration);\r\n duration = duration - div;\r\n dar.push(div);\r\n }\r\n if (duration > 0) {\r\n dar.push(duration);\r\n }\r\n return dar.sort((a, b) => a > b ? -1 : 1);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoNote}. Notes have pitches and a duration, and other\r\n * modifiers that can affect display or playback.\r\n * @module /smo/data/note\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNoteModifierBase, SmoArticulation, SmoLyric, SmoGraceNote, SmoMicrotone, SmoOrnament, SmoDynamicText, SmoArpeggio, SmoArticulationParametersSer, GraceNoteParamsSer, SmoOrnamentParamsSer, SmoMicrotoneParamsSer } from './noteModifiers';\r\nimport { SmoMusic } from './music';\r\nimport { Ticks, Pitch, SmoAttrs, Transposable, PitchLetter, SvgBox, getId } from './common';\r\nimport { FontInfo, vexCanonicalNotes } from '../../common/vex';\r\nimport { SmoTupletParamsSer } from './tuplet';\r\n\r\nexport interface TupletInfo {\r\n id: string;\r\n}\r\n// @internal\r\nexport type NoteType = 'n' | 'r' | '/';\r\n// @internal\r\nexport type NoteStringParam = 'noteHead' | 'clef';\r\n// @internal\r\nexport const NoteStringParams: NoteStringParam[] = ['noteHead', 'clef'];\r\n// @internal\r\nexport type NoteNumberParam = 'beamBeats' | 'flagState';\r\n// @internal\r\nexport const NoteNumberParams: NoteNumberParam[] = ['beamBeats', 'flagState'];\r\n// @internal\r\nexport type NoteBooleanParam = 'hidden' | 'endBeam' | 'isCue';\r\n// @internal\r\nexport const NoteBooleanParams: NoteBooleanParam[] = ['hidden', 'endBeam', 'isCue'];\r\n/**\r\n * Constructor parameters for a note. Usually you will call\r\n * {@link SmoNote.defaults}, and modify the parameters you need to change.\r\n * @param noteType\r\n * @param noteHead is non-empty, a Vex notehead code TODO make a record<>\r\n * @param clef determines how the pitch is placed on the staff\r\n * @param textModifiers are lyrics, chords, dynamics\r\n * @param articulations\r\n * @param graceNotes\r\n * @param ornaments\r\n * @param tones\r\n * @param tuplet tuplet info, if the note is part of a tuplet\r\n * @param endBeam true if this is the last note in a beam\r\n * @param fillStyle for special effects, for instance to highlight active voice\r\n * @param hidden indicates the note (usually a rest) is invisible (transparent)\r\n * @param beamBeats how many ticks to use before beaming a group\r\n * @param flagState up down auto\r\n * @param ticks duration\r\n * @param pitches SmoPitch array\r\n * @param isCue tiny notes\r\n * @category SmoParameters\r\n */\r\nexport interface SmoNoteParams {\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteModifierBase[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulation[],\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: SmoGraceNote[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnament[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotone[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArpeggio,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tuplet: TupletInfo | undefined,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote: string | null\r\n}\r\n\r\n/**\r\n * The serializable bits of a Note. Notes will always \r\n * have a type, and if a sounded note, can contain pitches. It will always\r\n * contains ticks.\r\n * @category serialization\r\n */\r\nexport interface SmoNoteParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /** attributes for identity */\r\n attrs: SmoAttrs;\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteModifierBase[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulationParametersSer,\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: GraceNoteParamsSer[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnamentParamsSer[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotoneParamsSer[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArticulationParametersSer,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tuplet: SmoTupletParamsSer | undefined,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote: string | null \r\n}\r\nfunction isSmoNoteParamsSer(params: Partial): params is SmoNoteParamsSer {\r\n if (params.ctor && params.ctor === 'SmoNote') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * SmoNote contains the pitch and duration of a note or chord.\r\n * It can also contain arrays of modifiers like lyrics, articulations etc.\r\n * Also information about the beaming, flag etc.\r\n * @category SmoObject\r\n * */\r\nexport class SmoNote implements Transposable {\r\n constructor(params: SmoNoteParams) {\r\n const defs = SmoNote.defaults;\r\n NoteStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n this.noteType = params.noteType ? params.noteType : defs.noteType;\r\n NoteNumberParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n NoteBooleanParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n this.clefNote = params.clefNote;\r\n const ticks = params.ticks ? params.ticks : defs.ticks;\r\n const pitches = params.pitches ? params.pitches : defs.pitches;\r\n this.ticks = JSON.parse(JSON.stringify(ticks));\r\n this.pitches = JSON.parse(JSON.stringify(pitches));\r\n this.clef = params.clef ? params.clef : defs.clef;\r\n this.fillStyle = params.fillStyle ? params.fillStyle : '';\r\n if (params.tuplet) {\r\n this.tuplet = params.tuplet;\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n }; // else inherit\r\n }\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n // Note type and ID\r\n attrs: SmoAttrs;\r\n flagState: number = SmoNote.flagStates.auto;\r\n textModifiers: SmoNoteModifierBase[] = [];\r\n articulations: SmoArticulation[] = [];\r\n ornaments: SmoOrnament[] = [];\r\n pitches: Pitch[] = [];\r\n noteHead: string = '';\r\n arpeggio?: SmoArpeggio;\r\n clef: string = 'treble';\r\n clefNote: string | null = null;\r\n graceNotes: SmoGraceNote[] = [];\r\n noteType: NoteType = 'n';\r\n fillStyle: string = '';\r\n hidden: boolean = false;\r\n tuplet: TupletInfo | null = null;\r\n tones: SmoMicrotone[] = [];\r\n endBeam: boolean = false;\r\n ticks: Ticks = { numerator: 4096, denominator: 1, remainder: 0 };\r\n beamBeats: number = 4096;\r\n beam_group: SmoAttrs | null = null;\r\n renderId: string | null = null;\r\n keySignature: string = 'c';\r\n logicalBox: SvgBox | null = null;\r\n isCue: boolean = false;\r\n accidentalsRendered: string[] = [];// set by renderer if accidental is to display\r\n /**\r\n * used in serialization\r\n * @internal\r\n */\r\n static get parameterArray() {\r\n return ['ticks', 'pitches', 'noteType', 'tuplet', 'clef', 'isCue',\r\n 'endBeam', 'beamBeats', 'flagState', 'noteHead', 'fillStyle', 'hidden', 'arpeggio', 'clefNote'];\r\n }\r\n /**\r\n * Default constructor parameters. We always return a copy so the caller can modify it\r\n */\r\n static get defaults(): SmoNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n noteType: 'n',\r\n noteHead: 'n',\r\n clef: 'treble',\r\n textModifiers: [],\r\n articulations: [],\r\n graceNotes: [],\r\n ornaments: [],\r\n tones: [],\r\n endBeam: false,\r\n fillStyle: '',\r\n hidden: false,\r\n beamBeats: 4096,\r\n isCue: false,\r\n flagState: SmoNote.flagStates.auto,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: 'n'\r\n }],\r\n }));\r\n }\r\n /**\r\n * Up, down auto (tri-state)\r\n */\r\n toggleFlagState() {\r\n this.flagState = (this.flagState + 1) % 3;\r\n }\r\n\r\n get dots() {\r\n if (this.isTuplet) {\r\n return 0;\r\n }\r\n const vexDuration = SmoMusic.closestSmoDurationFromTicks(this.tickCount);\r\n if (!vexDuration) {\r\n return 0;\r\n }\r\n return vexDuration.dots;\r\n }\r\n\r\n private _addModifier(dynamic: SmoDynamicText, toAdd: boolean) {\r\n var tms = [];\r\n this.textModifiers.forEach((tm) => {\r\n if (tm.attrs.type !== dynamic.attrs.type) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(dynamic);\r\n }\r\n this.textModifiers = tms;\r\n }\r\n\r\n private _addArticulation(articulation: SmoArticulation, toAdd: boolean) {\r\n var tms = [];\r\n this.articulations.forEach((tm) => {\r\n if (tm.articulation !== articulation.articulation) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(articulation);\r\n }\r\n this.articulations = tms;\r\n }\r\n\r\n /**\r\n * Add a new dynamic to thisnote\r\n * @param dynamic\r\n */\r\n addDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, true);\r\n }\r\n /**\r\n * Remove the dynamic from this note.\r\n * @param dynamic \r\n */\r\n removeDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, false);\r\n }\r\n /**\r\n * Get all note modifiers of a type, either a lyric or a dynamic\r\n * @param type ctor\r\n * @returns \r\n */\r\n getModifiers(type: string) {\r\n var ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === type\r\n );\r\n return ms;\r\n }\r\n setArpeggio(arp: SmoArpeggio) {\r\n this.arpeggio = arp;\r\n }\r\n /**\r\n * \r\n * @returns the longest lyric, used for formatting\r\n */\r\n longestLyric(): SmoLyric | null {\r\n const tms: SmoNoteModifierBase[] = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric\r\n );\r\n if (!tms.length) {\r\n return null;\r\n }\r\n return tms.reduce((m1, m2) =>\r\n (m1 as SmoLyric).getText().length > (m2 as SmoLyric).getText().length ? m1 : m2\r\n ) as SmoLyric;\r\n }\r\n /** Add a lyric to this note, replacing another in the same verse */\r\n addLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).parser !== lyric.parser ||\r\n (mod as SmoLyric).verse !== lyric.verse\r\n );\r\n tms.push(lyric);\r\n this.textModifiers = tms;\r\n }\r\n\r\n /**\r\n * @returns array of lyrics that are lyrics\r\n */\r\n getTrueLyrics(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric);\r\n ms.sort((a, b) => (a as SmoLyric).verse - (b as SmoLyric).verse);\r\n return (ms as SmoLyric[]);\r\n }\r\n /**\r\n * \r\n * @returns array of SmoLyric whose parsers are chord\r\n */\r\n getChords(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.chord\r\n );\r\n return ms as SmoLyric[];\r\n }\r\n /**\r\n * \r\n * @param lyric lyric to remove, find the best match if there are multiples\r\n */\r\n removeLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).verse !== lyric.verse || (mod as SmoLyric).parser !== lyric.parser\r\n );\r\n this.textModifiers = tms;\r\n }\r\n /**\r\n * \r\n * @param verse \r\n * @param parser \r\n * @returns \r\n */\r\n getLyricForVerse(verse: number, parser: number) {\r\n return this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === parser && (mod as SmoLyric).verse === verse\r\n );\r\n }\r\n\r\n /**\r\n * \r\n * @param fontInfo\r\n */\r\n setLyricFont(fontInfo: FontInfo) {\r\n const lyrics = this.getTrueLyrics();\r\n\r\n lyrics.forEach((lyric) => {\r\n lyric.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n /**\r\n * @param adjustNoteWidth if true, vex will consider the lyric width when formatting the measure\r\n */\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n const lyrics = this.getTrueLyrics();\r\n lyrics.forEach((lyric) => {\r\n lyric.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n getOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz() === false);\r\n }\r\n\r\n getJazzOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz());\r\n }\r\n\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param ornament\r\n */\r\n toggleOrnament(ornament: SmoOrnament) {\r\n const aix = this.ornaments.filter((a) =>\r\n a.attrs.type === 'SmoOrnament' && a.ornament === ornament.ornament\r\n );\r\n if (!aix.length) {\r\n this.ornaments.push(ornament);\r\n } else {\r\n this.ornaments = [];\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param articulation\r\n */\r\n toggleArticulation(articulation: SmoArticulation) {\r\n var aix = this.articulations.findIndex((a) =>\r\n a.articulation === articulation.articulation\r\n );\r\n if (aix >= 0) {\r\n const cur = this.articulations[aix];\r\n if (cur.position === SmoArticulation.positions.above) {\r\n cur.position = SmoArticulation.positions.below;\r\n return;\r\n } else {\r\n this._addArticulation(articulation, false);\r\n return;\r\n }\r\n }\r\n this._addArticulation(articulation, true);\r\n }\r\n\r\n /**\r\n * Sort pitches in pitch order, Vex likes to receive pitches in order\r\n * @param note \r\n */\r\n static sortPitches(note: Transposable) {\r\n const canon = vexCanonicalNotes();\r\n const keyIndex = ((pitch: Pitch) =>\r\n canon.indexOf(pitch.letter) + pitch.octave * 12\r\n );\r\n note.pitches.sort((a, b) => keyIndex(a) - keyIndex(b));\r\n }\r\n setNoteHead(noteHead: string) {\r\n if (this.noteHead === noteHead) {\r\n this.noteHead = '';\r\n } else {\r\n this.noteHead = noteHead;\r\n }\r\n }\r\n /**\r\n * \r\n * @param graceNote\r\n * @param offset the index from the first grace note\r\n */\r\n addGraceNote(graceNote: SmoGraceNote, offset: number) {\r\n if (typeof(offset) === 'undefined') {\r\n offset = 0;\r\n }\r\n graceNote.clef = this.clef;\r\n this.graceNotes.push(graceNote);\r\n }\r\n removeGraceNote(offset: number) {\r\n if (offset >= this.graceNotes.length) {\r\n return;\r\n }\r\n this.graceNotes.splice(offset, 1);\r\n }\r\n getGraceNotes() {\r\n return this.graceNotes;\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param note\r\n * @param offset\r\n */\r\n static addPitchOffset(note: Transposable, offset: number): void {\r\n if (note.pitches.length === 0) {\r\n return;\r\n }\r\n note.noteType = 'n';\r\n const pitch = note.pitches[0];\r\n note.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(note);\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param offset\r\n * @returns \r\n */\r\n addPitchOffset(offset: number) {\r\n if (this.pitches.length === 0) {\r\n return;\r\n }\r\n this.noteType = 'n';\r\n const pitch = this.pitches[0];\r\n this.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(this);\r\n }\r\n toggleRest() {\r\n this.noteType = (this.noteType === 'r' ? 'n' : 'r');\r\n }\r\n toggleSlash() {\r\n this.noteType = (this.noteType === '/' ? 'n' : '/');\r\n }\r\n makeSlash() {\r\n this.noteType = '/';\r\n }\r\n makeRest() {\r\n this.noteType = 'r';\r\n }\r\n isRest() {\r\n return this.noteType === 'r';\r\n }\r\n isSlash() {\r\n return this.noteType === '/';\r\n }\r\n isHidden() {\r\n return this.hidden;\r\n }\r\n\r\n makeNote() {\r\n this.noteType = 'n';\r\n // clear fill style if we were hiding rests\r\n this.fillStyle = '';\r\n this.hidden = false;\r\n }\r\n /**\r\n * set note opacity on/off\r\n * @param val\r\n */\r\n makeHidden(val: boolean) {\r\n this.hidden = val;\r\n this.fillStyle = val ? '#aaaaaa7f' : '';\r\n }\r\n\r\n /**\r\n * Return true if this note is part of a tuplet\r\n */\r\n get isTuplet(): boolean {\r\n return this.tuplet !== null && typeof(this.tuplet.id) !== 'undefined';\r\n }\r\n\r\n addMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn: SmoMicrotone) => tn.pitchIndex !== tone.pitchIndex);\r\n ar.push(tone);\r\n this.tones = ar;\r\n }\r\n removeMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn) => tn.pitchIndex !== tone.pitchIndex\r\n && tn.pitchIndex <= this.pitches.length // also remove tones for removed pitches\r\n && tone.tone !== tn.tone);\r\n this.tones = ar;\r\n }\r\n getMicrotone(toneIndex: number) {\r\n return this.tones.find((tn) => tn.pitchIndex === toneIndex);\r\n }\r\n\r\n getMicrotones() {\r\n return this.tones;\r\n }\r\n /**\r\n * cycle through the list of enharmonics for this note.\r\n * @param pitch\r\n * @returns \r\n */\r\n static toggleEnharmonic(pitch: Pitch) {\r\n const lastLetter = pitch.letter;\r\n let vexPitch = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch));\r\n vexPitch = SmoMusic.getEnharmonic(vexPitch);\r\n\r\n pitch.letter = vexPitch[0] as PitchLetter;\r\n pitch.accidental = vexPitch.length > 1 ?\r\n vexPitch.substring(1, vexPitch.length) : 'n';\r\n pitch.octave += SmoMusic.letterChangedOctave(lastLetter, pitch.letter);\r\n return pitch;\r\n }\r\n /**\r\n * transpose a note or grace note to a key-friendly enharmonic\r\n * @param pitchArray\r\n * @param offset\r\n * @param originalKey - keySignature from original note\r\n * @param destinationKey - keySignature we are transposing into\r\n * @returns \r\n */\r\n transpose(pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n return SmoNote.transpose(this, pitchArray, offset, originalKey, destinationKey);\r\n }\r\n /**\r\n * used to add chord and pitch by piano widget\r\n * @param pitch\r\n */\r\n toggleAddPitch(pitch: Pitch) {\r\n const pitches: Pitch[] = [];\r\n let exists = false;\r\n this.pitches.forEach((o) => {\r\n if (o.letter !== pitch.letter ||\r\n o.octave !== pitch.octave ||\r\n o.accidental !== pitch.accidental) {\r\n pitches.push(o);\r\n } else {\r\n exists = true;\r\n }\r\n });\r\n this.pitches = pitches;\r\n if (!exists) {\r\n this.pitches.push(JSON.parse(JSON.stringify(pitch)));\r\n this.noteType = 'n';\r\n }\r\n SmoNote.sortPitches(this);\r\n }\r\n /**\r\n * @param note note to transpose\r\n * @param pitchArray an array of indices (not pitches) that indicate which pitches get altered if a chord\r\n * @param offset in 1/2 step\r\n * @param originalKey original key for enharmonic-friendly key\r\n * @param destinationKey destination key signature\r\n * @returns \r\n */\r\n static transpose(note: Transposable, pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n let index: number = 0;\r\n let j: number = 0;\r\n if (offset === 0 && originalKey === destinationKey) {\r\n return note;\r\n }\r\n // If no specific pitch, use all the pitches\r\n if (pitchArray.length === 0) {\r\n pitchArray = Array.from(note.pitches.keys());\r\n }\r\n for (j = 0; j < pitchArray.length; ++j) {\r\n index = pitchArray[j];\r\n if (index + 1 > note.pitches.length) {\r\n SmoNote.addPitchOffset(note, offset);\r\n } else {\r\n const original = JSON.parse(JSON.stringify(note.pitches[index]));\r\n const pitch = SmoMusic.transposePitchForKey(original, originalKey, destinationKey, offset);\r\n note.pitches[index] = pitch;\r\n }\r\n }\r\n SmoNote.sortPitches(note);\r\n return note;\r\n }\r\n get tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n /**\r\n * Copy the note, give it unique id\r\n * @param note\r\n * @returns \r\n */\r\n static clone(note: SmoNote) {\r\n var rv = SmoNote.deserialize(note.serialize());\r\n\r\n // make sure id is unique\r\n rv.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n };\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param note\r\n * @param ticks\r\n * @returns A note identical to `note` but with different duration\r\n */\r\n static cloneWithDuration(note: SmoNote, ticks: Ticks | number) {\r\n if (typeof(ticks) === 'number') {\r\n ticks = { numerator: ticks, denominator: 1, remainder: 0 };\r\n }\r\n const rv = SmoNote.clone(note);\r\n rv.ticks = ticks;\r\n return rv;\r\n }\r\n static serializeModifier(modifiers: SmoNoteModifierBase[]) : object[] {\r\n const rv: object[] = [];\r\n modifiers.forEach((modifier: SmoNoteModifierBase) => {\r\n rv.push(modifier.serialize());\r\n });\r\n return rv;\r\n }\r\n\r\n private _serializeModifiers(params: any) {\r\n params.textModifiers = SmoNote.serializeModifier(this.textModifiers);\r\n params.graceNotes = SmoNote.serializeModifier(this.graceNotes);\r\n params.articulations = SmoNote.serializeModifier(this.articulations);\r\n params.ornaments = SmoNote.serializeModifier(this.ornaments);\r\n params.tones = SmoNote.serializeModifier(this.tones);\r\n if (this.arpeggio) {\r\n params.arpeggio = this.arpeggio.serialize();\r\n }\r\n }\r\n /**\r\n * @returns a JSON object that can be used to create this note\r\n */\r\n serialize(): SmoNoteParamsSer {\r\n var params: Partial = { ctor: 'SmoNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoNote.defaults, SmoNote.parameterArray, this, params);\r\n if (params.ticks) {\r\n params.ticks = JSON.parse(JSON.stringify(params.ticks));\r\n }\r\n this._serializeModifiers(params);\r\n if (!isSmoNoteParamsSer(params)) {\r\n throw 'bad note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n /**\r\n * restore note modifiers and create a SmoNote object\r\n * @param jsonObj\r\n * @returns \r\n */\r\n static deserialize(jsonObj: any) {\r\n var note = new SmoNote(jsonObj);\r\n if (jsonObj.textModifiers) {\r\n jsonObj.textModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.graceNotes) {\r\n jsonObj.graceNotes.forEach((mod: any) => {\r\n note.graceNotes.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.ornaments) {\r\n jsonObj.ornaments.forEach((mod: any) => {\r\n note.ornaments.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.articulations) {\r\n jsonObj.articulations.forEach((mod: any) => {\r\n note.articulations.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.tones) {\r\n jsonObj.tones.forEach((mod: any) => {\r\n note.tones.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n // Due to a bug, text modifiers were serialized into noteModifiers array\r\n if (jsonObj.noteModifiers) {\r\n jsonObj.noteModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.arpeggio) {\r\n note.arpeggio = SmoNoteModifierBase.deserialize(jsonObj.arpeggio);\r\n }\r\n return note;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * @module /smo/data/noteModifiers\r\n */\r\nimport { SmoAttrs, Ticks, Pitch, getId, SmoObjectParams, Transposable, SvgBox, SmoModifierBase } from './common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoMusic } from './music';\r\nimport { defaultNoteScale, FontInfo, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n// const Smo = eval('globalThis.Smo');\r\n\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * All note modifiers have a serialize method and a 'ctor' parameter or deserialization\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoNoteModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n this.ctor = ctor;\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n // Handle backwards-compatibility thing\r\n if (jsonObj.ctor === 'SmoMicrotone' && typeof ((jsonObj as any).pitch) === 'number') {\r\n (jsonObj as any).pitchIndex = (jsonObj as any).pitch;\r\n }\r\n if (jsonObj.ctor === 'SmoLyric') {\r\n if (typeof((jsonObj as any)._text) === 'string') {\r\n (jsonObj as any).text = (jsonObj as any)._text;\r\n }\r\n }\r\n if (typeof (ctor) === 'undefined') {\r\n console.log('ouch bad ctor for ' + jsonObj.ctor);\r\n }\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\n/**\r\n * used to construct {@link SmoGraceNote}\r\n * beam group.\r\n * @category SmoParameters\r\n */\r\nexport interface GraceNoteParams extends SmoModifierBase {\r\n /**\r\n * up, down, or auto\r\n */\r\n flagState: number,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n noteType: string,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n beamBeats: number,\r\n /**\r\n * same as for {@link SmoNote}. Indicates break in beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * should be same as note?\r\n */\r\n clef: string,\r\n /**\r\n * there's probably a name for this...\r\n */\r\n slash: boolean,\r\n /**\r\n * only used for beaming\r\n */\r\n ticks: Ticks,\r\n /**\r\n * Pitch, same as for {@link SmoNote}\r\n */\r\n pitches: Pitch[],\r\n}\r\n\r\n/**\r\n * serialized grace note\r\n * @category serialization\r\n */\r\nexport interface GraceNoteParamsSer extends GraceNoteParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs;\r\n}\r\n\r\nfunction isGraceNoteParamsSer(params: Partial): params is GraceNoteParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoGraceNote') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A grace notes has many of the things an 'actual' note can have, but it doesn't take up\r\n * time against the time signature\r\n * @category SmoModifier\r\n */\r\nexport class SmoGraceNote extends SmoNoteModifierBase implements Transposable {\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n static get defaults(): GraceNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n flagState: SmoGraceNote.flagStates.auto,\r\n noteType: 'n',\r\n beamBeats: 4096,\r\n endBeam: false,\r\n clef: 'treble',\r\n slash: false,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: ''\r\n }]\r\n }));\r\n }\r\n // TODO: Matches SmoNote - move to SmoMusic?\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoGraceNote.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n ticks: Ticks = SmoGraceNote.defaults.ticks;\r\n pitches: Pitch[] = [];\r\n slash: boolean = false;\r\n clef: string = 'treble';\r\n noteType: string = 'n';\r\n renderId: string | null = null;\r\n\r\n tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n toVexGraceNote() {\r\n const p = SmoMusic.smoPitchesToVex(this.pitches);\r\n const rv = { duration: SmoMusic.closestVexDuration(this.tickCount()), keys: p, slash: this.slash };\r\n return rv;\r\n }\r\n\r\n serialize(): GraceNoteParamsSer {\r\n const params: Partial = { ctor: 'SmoGraceNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoGraceNote.defaults,\r\n SmoGraceNote.parameterArray, this, params);\r\n if (!isGraceNoteParamsSer(params)) {\r\n throw 'bad grace note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n\r\n constructor(parameters: Partial) {\r\n super('SmoGraceNote');\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, SmoGraceNote.defaults, this);\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, parameters, this);\r\n }\r\n}\r\nexport type SmoArpeggioType = 'directionless' | 'rasquedo_up' | 'rasquedo_down' \r\n | 'roll_up' | 'roll_down' | 'brush_up' | 'brush_down' | 'none';\r\nexport const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n\r\n /**\r\n * @category SmoParameters\r\n */\r\nexport interface SmoArpeggioParams {\r\n type: SmoArpeggioType\r\n}\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoArpeggioParamsSer {\r\n ctor: string;\r\n /**\r\n * stringified arpeggion enumeration\r\n */\r\n type: string;\r\n}\r\nfunction isSmoArpeggionParamsSer(params: Partial): params is SmoArpeggioParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArpeggio') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport function isArpeggioType(tp: SmoArpeggioType | string): tp is SmoArpeggioType {\r\n return SmoArpeggioTypes.indexOf(tp) >= 0;\r\n}\r\n/**\r\n * A 'splatter' symbol next to a chord.\r\n */\r\nexport class SmoArpeggio extends SmoNoteModifierBase {\r\n static _types: Record = {};\r\n static get types() {\r\n if (typeof(SmoArpeggio._types['directionless']) === 'undefined') {\r\n SmoArpeggio._types['directionless'] = 7;\r\n SmoArpeggio._types['rasquedo_up'] = 6;\r\n SmoArpeggio._types['rasquedo_down'] = 5;\r\n SmoArpeggio._types['roll_up'] = 4;\r\n SmoArpeggio._types['roll_down'] = 3;\r\n SmoArpeggio._types['brush_up'] = 2;\r\n SmoArpeggio._types['brush_down'] = 1;\r\n SmoArpeggio._types['none'] = 0;\r\n }\r\n return SmoArpeggio._types;\r\n } \r\n typeCode: number;\r\n constructor(params: SmoArpeggioParams) {\r\n super('SmoArpeggio');\r\n this.typeCode = SmoArpeggio.types[params.type];\r\n }\r\n get typeString(): SmoArpeggioType {\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n const type = str ? str : 'none';\r\n return type as SmoArpeggioType;\r\n }\r\n serialize(): SmoArpeggioParamsSer {\r\n const rv: Partial = { ctor: 'SmoArpeggio' }\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n rv.type = str ? str : 'none';\r\n if (!isSmoArpeggionParamsSer(rv)) {\r\n throw 'bad arpeggio ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMicrotone}\r\n * @category SmoParams\r\n */\r\nexport interface SmoMicrotoneParams extends SmoObjectParams {\r\n /**\r\n * indicates which modifier to alter the tone (e.g. 1/4 sharp)\r\n */\r\n tone: string,\r\n /**\r\n * the index of the pitch to alter\r\n */\r\n pitch: number\r\n}\r\n/**\r\n * serialized microtones.\r\n * @category serialization\r\n */\r\nexport interface SmoMicrotoneParamsSer extends SmoMicrotoneParams {\r\n ctor: string,\r\n attrs: SmoAttrs\r\n}\r\nfunction isSmoMicrotoneParamsSer(params: Partial): params is SmoMicrotoneParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoMicrotone') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Microtones are treated similarly to ornaments. There are not\r\n * rules for persisting throughout a measure, cancel etc.\r\n * @category SmoModifier\r\n*/\r\nexport class SmoMicrotone extends SmoNoteModifierBase {\r\n tone: string;\r\n pitchIndex: number = 0;\r\n\r\n // This is how VexFlow notates them\r\n static readonly smoToVex: Record = {\r\n flat75sz: 'db',\r\n flat25sz: 'd',\r\n flat25ar: 'bs',\r\n flat125ar: 'afhf',\r\n sharp75: '++',\r\n sharp125: 'ashs',\r\n sharp25: '+',\r\n sori: 'o',\r\n koron: 'k'\r\n }\r\n\r\n // The audio frequency offsets\r\n static readonly pitchCoeff: Record = {\r\n flat75sz: -1.5,\r\n flat25sz: -0.5,\r\n flat25ar: -0.5,\r\n flat125ar: -2.5,\r\n sharp75: 1.5,\r\n sharp125: 2.5,\r\n sharp25: 0.5,\r\n sori: 0.5,\r\n koron: -0.5\r\n }\r\n\r\n get toPitchCoeff(): number {\r\n return SmoMicrotone.pitchCoeff[this.tone];\r\n }\r\n\r\n get toVex(): string {\r\n return SmoMicrotone.smoToVex[this.tone];\r\n }\r\n static readonly defaults: SmoMicrotoneParams = {\r\n ctor: 'SmoMicrotone',\r\n tone: 'flat25sz',\r\n pitch: 0\r\n }\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoMicrotone.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoMicrotoneParamsSer {\r\n const params: Partial = { ctor: 'SmoMicrotone' };\r\n smoSerialize.serializedMergeNonDefault(SmoMicrotone.defaults,\r\n SmoMicrotone.parameterArray, this, params);\r\n if (!isSmoMicrotoneParamsSer(params)) {\r\n throw 'bad microtone ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoMicrotoneParams) {\r\n super(parameters.ctor);\r\n this.pitchIndex = parameters.pitch;\r\n this.tone = parameters.tone;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor for {@link SmoOrnament}\r\n * @category SmoParams\r\n */\r\nexport interface SmoOrnamentParams {\r\n /**\r\n * postition, above or below\r\n */\r\n position?: string,\r\n /**\r\n * horizontal offset from note head\r\n */ \r\n offset?: string,\r\n /**\r\n * code for the ornament\r\n */\r\n ornament: string,\r\n}\r\n/**\r\n * serializable ornament\r\n * @category serialization\r\n */\r\nexport interface SmoOrnamentParamsSer extends SmoOrnamentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoOrnamentParamsSer(params: Partial): params is SmoOrnamentParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoOrnament') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Ornaments map to vex ornaments. articulations vs. ornaments\r\n * is kind of arbitrary\r\n * @category SmoModifier\r\n */\r\nexport class SmoOrnament extends SmoNoteModifierBase {\r\n static readonly ornaments: Record = {\r\n mordent: 'mordent',\r\n mordentInverted: 'mordent_inverted',\r\n turn: 'turn',\r\n turnInverted: 'turn_inverted',\r\n trill: 'tr',\r\n upprall: 'upprall',\r\n prallup: 'prallup',\r\n pralldown: 'pralldown',\r\n upmordent: 'upmordent',\r\n downmordent: 'downmordent',\r\n lineprall: 'lineprall',\r\n prallprall: 'prallprall',\r\n scoop: 'scoop',\r\n fall_short: 'fall',\r\n dropLong: 'fallLong',\r\n doit: 'doit',\r\n doitLong: 'doitLong',\r\n flip: 'flip',\r\n smear: 'smear'\r\n }\r\n\r\n static readonly xmlOrnaments: Record = {\r\n mordent: 'mordent',\r\n mordent_inverted: 'inverted-mordent',\r\n turn: 'turn',\r\n turn_inverted: 'inverted-turn',\r\n upmordent: 'mordent',\r\n downmordent: 'mordent',\r\n lineprall: 'schleifer',\r\n prallprall: 'schleifer',\r\n prallup: 'schleifer',\r\n tr: 'trill-mark'\r\n }\r\n // jazz ornaments in vex are articulations in music xml\r\n static readonly xmlJazz: Record = {\r\n doit: 'doit',\r\n scoop: 'scoop',\r\n dropLong: 'falloff',\r\n drop: 'plop'\r\n }\r\n static get jazzOrnaments(): string[] {\r\n return ['SCOOP', 'FALL_SHORT', 'FALL_LONG', 'DOIT', 'LIFT', 'FLIP', 'SMEAR'];\r\n }\r\n toVex() {\r\n return SmoOrnament.ornaments[this.ornament.toLowerCase()];\r\n }\r\n\r\n isJazz() {\r\n return SmoOrnament.jazzOrnaments.indexOf(this.ornament) >= 0;\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: string = 'on';\r\n ornament: string = SmoOrnament.ornaments.mordent;\r\n\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoOrnament.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below'\r\n };\r\n }\r\n static get offsets() {\r\n return {\r\n on: 'on',\r\n after: 'after'\r\n };\r\n }\r\n static get defaults(): SmoOrnamentParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoOrnament',\r\n ornament: SmoOrnament.ornaments.mordent,\r\n position: SmoOrnament.positions.above,\r\n offset: SmoOrnament.offsets.on\r\n }));\r\n }\r\n serialize(): SmoOrnamentParamsSer {\r\n var params: Partial = { ctor: 'SmoOrnament' };\r\n smoSerialize.serializedMergeNonDefault(SmoOrnament.defaults,\r\n SmoOrnament.parameterArray, this, params);\r\n if (!isSmoOrnamentParamsSer(params)) {\r\n throw 'bad ornament ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoOrnamentParams) {\r\n super('SmoOrnament');\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, SmoOrnament.defaults, this);\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoArticulation}\r\n * @category SmoParams\r\n */\r\nexport interface SmoArticulationParameters {\r\n /**\r\n * position, above or below\r\n */\r\n position?: string,\r\n /**\r\n * x offset\r\n */\r\n offset?: number,\r\n /**\r\n * articulation code\r\n */\r\n articulation: string\r\n}\r\n/**\r\n * \r\n */\r\nexport interface SmoArticulationParametersSer extends SmoArticulationParameters {\r\n ctor: string;\r\n}\r\nfunction isSmoArticulationParametersSer(params: Partial): params is SmoArticulationParametersSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArticulation') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Articulations map to notes, can be placed above/below\r\n * @category SmoModifier\r\n */\r\nexport class SmoArticulation extends SmoNoteModifierBase {\r\n static get articulations() {\r\n return {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n marcato: 'marcato',\r\n tenuto: 'tenuto',\r\n upStroke: 'upStroke',\r\n downStroke: 'downStroke',\r\n pizzicato: 'pizzicato',\r\n fermata: 'fermata'\r\n };\r\n }\r\n static readonly xmlArticulations: Record = {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n tenuto: 'tenuto',\r\n marcato: 'strong-accent'\r\n }\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below'\r\n };\r\n }\r\n static get articulationToVex(): Record {\r\n return {\r\n accent: 'a>',\r\n staccato: 'a.',\r\n marcato: 'a^',\r\n tenuto: 'a-',\r\n upStroke: 'a|',\r\n downStroke: 'am',\r\n pizzicato: 'ao',\r\n fermata: 'a@a'\r\n };\r\n }\r\n\r\n static get vexToArticulation(): Record {\r\n return {\r\n 'a>': 'accent',\r\n 'a.': 'staccato',\r\n 'a^': 'marcato',\r\n 'a-': 'tenuto',\r\n 'a|': 'upStroke',\r\n 'am': 'downStroke',\r\n 'ao': 'pizzicato',\r\n 'a@a': 'fermata'\r\n };\r\n }\r\n static get parameterArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoArticulation.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positionToVex(): Record {\r\n return {\r\n 'above': 3,\r\n 'below': 4\r\n };\r\n }\r\n static get defaults(): SmoArticulationParameters {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoArticulation',\r\n position: SmoArticulation.positions.above,\r\n articulation: SmoArticulation.articulations.accent\r\n }));\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: number = 0;\r\n articulation: string = SmoArticulation.articulations.accent;\r\n adjX: number = 0;\r\n\r\n serialize(): SmoArticulationParametersSer {\r\n var params: Partial = { ctor: 'SmoArticulation'};\r\n smoSerialize.serializedMergeNonDefault(SmoArticulation.defaults,\r\n SmoArticulation.parameterArray, this, params);\r\n if (!isSmoArticulationParametersSer(params)) {\r\n throw 'bad articulation ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoArticulationParameters) {\r\n super('SmoArticulation');\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, SmoArticulation.defaults, this);\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\nexport interface VexAnnotationParams {\r\n glyph?: string,\r\n symbolModifier?: number,\r\n text?: string\r\n}\r\n\r\n/**\r\n * The persist-y parts of {@link SmoLyricParams}. We don't persist the selector\r\n * since that can change based on the position of the parent note\r\n * @category serialization\r\n */\r\nexport interface SmoLyricPersist extends SmoObjectParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\nfunction isSmoLyricPersist(params: Partial): params is SmoLyricPersist {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoLyric') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Used to construct a {@link SmoLyric} for both chords and lyrics\r\n * @category SmoParameters\r\n */\r\nexport interface SmoLyricParams {\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\n/**\r\n * SmoLyric covers both chords and lyrics. The parser tells you which\r\n * one you get.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLyric extends SmoNoteModifierBase {\r\n static readonly parsers: Record = {\r\n lyric: 0, anaylysis: 1, chord: 2\r\n }\r\n static get defaults(): SmoLyricParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoLyric',\r\n text: '\\xa0',\r\n endChar: '',\r\n verse: 0,\r\n fontInfo: {\r\n size: 12,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n translateX: 0,\r\n translateY: 0,\r\n adjustNoteWidthLyric: true,\r\n adjustNoteWidthChord: false,\r\n parser: SmoLyric.parsers.lyric\r\n }));\r\n }\r\n static get symbolPosition() {\r\n return {\r\n SUPERSCRIPT: 1,\r\n SUBSCRIPT: 2,\r\n NORMAL: 3\r\n };\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoLyric.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoLyric.persistArray;\r\n rv.push('selector', 'text');\r\n return rv;\r\n }\r\n\r\n ctor: string = 'SmoLyric';\r\n text: string = '';\r\n fontInfo: FontInfo = {\r\n size: 12,\r\n family: 'Merriweather',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n parser: number = SmoLyric.parsers.lyric;\r\n selector: string | null = null; // used by UI\r\n adjustNoteWidthLyric: boolean = true;\r\n adjustNoteWidthChord: boolean = false;\r\n verse: number = 0;\r\n skipRender: boolean = false;\r\n fill: string = '';\r\n translateX: number = 0;\r\n translateY: number = 0;\r\n classes: string = '';\r\n // used by the renderer to calculate offsets for aligning lyrics\r\n adjX: number = 0;\r\n adjY: number = 0;\r\n // used by the renderer to calculate the y offset for music that goes below the staff\r\n musicYOffset: number = 0;\r\n hyphenX: number = 0;\r\n deleted: boolean = false;\r\n\r\n serialize(): SmoLyricPersist {\r\n var params: Partial = { ctor: 'SmoLyric' };\r\n smoSerialize.serializedMergeNonDefault(SmoLyric.defaults,\r\n SmoLyric.persistArray, this, params);\r\n if (!isSmoLyricPersist(params)) {\r\n throw 'bad lyric ' + JSON.stringify('params');\r\n }\r\n return params;\r\n }\r\n\r\n // For lyrics, we default to adjust note width on lyric size. For chords, this is almost never what\r\n // you want, so it is off by default.\r\n get adjustNoteWidth() {\r\n return (this.parser === SmoLyric.parsers.lyric) ? this.adjustNoteWidthLyric : this.adjustNoteWidthChord;\r\n }\r\n set adjustNoteWidth(val) {\r\n if (this.parser === SmoLyric.parsers.lyric) {\r\n this.adjustNoteWidthLyric = val;\r\n } else {\r\n this.adjustNoteWidthChord = val;\r\n }\r\n }\r\n\r\n // ### getClassSelector\r\n // returns a selector used to find this text block within a note.\r\n getClassSelector(): string {\r\n var parser = (this.parser === SmoLyric.parsers.lyric ? 'lyric' : 'chord');\r\n return 'g.' + parser + '-' + this.verse;\r\n }\r\n\r\n setText(text: string) {\r\n // For chords, trim all whitespace\r\n if (this.parser !== SmoLyric.parsers.lyric) {\r\n if (text.trim().length) {\r\n text.replace(/\\s/g, '');\r\n }\r\n }\r\n this.text = text;\r\n }\r\n\r\n isHyphenated() {\r\n const text = this.text.trim();\r\n return this.parser === SmoLyric.parsers.lyric &&\r\n text.length &&\r\n text[text.length - 1] === '-';\r\n }\r\n\r\n getText() {\r\n const text = this.text.trim();\r\n if (this.isHyphenated()) {\r\n return smoSerialize.tryParseUnicode(text.substr(0, text.length - 1)).trim();\r\n }\r\n return smoSerialize.tryParseUnicode(text);\r\n }\r\n\r\n isDash() {\r\n return this.getText().length === 0 && this.isHyphenated();\r\n }\r\n\r\n static _chordGlyphFromCode(code: string) {\r\n return getChordSymbolGlyphFromCode(code);\r\n }\r\n static _tokenizeChordString(str: string) {\r\n // var str = this._text;\r\n const reg = /^([A-Z|a-z|0-9|]+)/g;\r\n let mmm = str.match(reg);\r\n let tokeType = '';\r\n let toke = '';\r\n const tokens = [];\r\n while (str.length) {\r\n if (!mmm) {\r\n tokeType = str[0];\r\n tokens.push(tokeType);\r\n str = str.slice(1, str.length);\r\n } else {\r\n toke = mmm[0].substr(0, mmm[0].length);\r\n str = str.slice(toke.length, str.length);\r\n tokens.push(toke);\r\n tokeType = '';\r\n toke = '';\r\n }\r\n mmm = str.match(reg);\r\n }\r\n return tokens;\r\n }\r\n\r\n\r\n\r\n constructor(parameters: SmoLyricParams) {\r\n super('SmoLyric');\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, SmoLyric.defaults, this);\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, parameters, this);\r\n // backwards-compatibility for lyric text\r\n if (parameters.text) {\r\n this.text = parameters.text;\r\n }\r\n\r\n // calculated adjustments for alignment purposes\r\n this.adjY = 0;\r\n this.adjX = 0;\r\n // this.verse = parseInt(this.verse, 10);\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoLyric'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The persisted bits of {@link SmoDynamicTextParams}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextPersist extends SmoObjectParams {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoDynamicText}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextParams extends SmoDynamicTextPersist {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string,\r\n selector: SmoSelector\r\n}\r\n\r\n/**\r\n * Dynamic text tells you how loud not to play.\r\n * @category SmoModifier\r\n */\r\nexport class SmoDynamicText extends SmoNoteModifierBase {\r\n static get dynamics(): Record {\r\n // matches VF.modifier\r\n return {\r\n PP: 'pp',\r\n P: 'p',\r\n MP: 'mp',\r\n MF: 'mf',\r\n F: 'f',\r\n FF: 'ff',\r\n SFZ: 'sfz'\r\n };\r\n }\r\n static get defaults(): SmoDynamicTextParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoDynamicText',\r\n xOffset: 0,\r\n fontSize: defaultNoteScale,\r\n yOffsetLine: 11,\r\n yOffsetPixels: 0,\r\n text: SmoDynamicText.dynamics.MP,\r\n }));\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoDynamicText.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoDynamicText.persistArray;\r\n rv.push('selector');\r\n return rv;\r\n }\r\n selector: SmoSelector;\r\n text: string = '';\r\n yOffsetLine: number = 11;\r\n yOffsetPixels: number = 0;\r\n xOffset: number = 0;\r\n fontSize: number = defaultNoteScale;\r\n serialize(): object {\r\n var params = {};\r\n smoSerialize.serializedMergeNonDefault(SmoDynamicText.defaults,\r\n SmoDynamicText.persistArray, this, params);\r\n return params;\r\n }\r\n constructor(parameters: SmoDynamicTextParams) {\r\n super('SmoDynamicText');\r\n smoSerialize.vexMerge(this, SmoDynamicText.defaults);\r\n smoSerialize.filteredMerge(SmoDynamicText.parameterArray, parameters, this);\r\n this.selector = parameters.selector;\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoDynamicText'\r\n };\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support partsInfo class, for part extraction. \r\n * Parts is parts.\r\n * @module /smo/data/partInfo\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoObjectParams } from './common';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer, SmoMeasureModifierBase } from './measureModifiers';\r\nimport { SmoLayoutManager, SmoLayoutManagerParamsSer, SmoLayoutManagerParams, SmoPageLayout } from './scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParamsSer } from './scoreText';\r\nimport { StaffModifierBase } from './staffModifiers';\r\n\r\nexport type SmoPartInfoStringType = 'partName' | 'partAbbreviation';\r\nexport const SmoPartInfoStringTypes: SmoPartInfoStringType[] = ['partName', 'partAbbreviation'];\r\nexport type SmoPartInfoNumType = 'stavesAfter' | 'stavesBefore';\r\nexport const SmoPartInfoNumTypes: SmoPartInfoNumType[] = ['stavesAfter', 'stavesBefore'];\r\nexport type SmoPartInfoBooleanType = 'preserveTextGroups' | 'cueInScore' | 'expandMultimeasureRests';\r\nexport const SmoPartInfoBooleanTypes: SmoPartInfoBooleanType[] = ['preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\n\r\nexport const SmoPartAttributesBasic = ['partName', 'partAbbreviation', 'stavesAfter', 'stavesBefore', 'preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\nexport interface SmoMidiInstrument {\r\n channel: number,\r\n program: number,\r\n volume: number,\r\n pan: number\r\n}\r\n/**\r\n * Data contained in a part. A part has its own text, measure formatting and page layouts,\r\n * and contains the notes from the score. It can be comprised of 1 or 2 adjacent staves.\r\n * Usually you will call\r\n * {@link SmoPartInfo.defaults}, and modify the parameters you need to change.\r\n * @param partName \r\n * @param partAbbreviation\r\n * @param stavesAfter for multi-stave parts (e.g. piano), indicates the relative position in the full score.\r\n * @param stavesBefore\r\n * @param layoutManager page/layout settings for the part\r\n * @param measureFormatting a map of measure format to measures for the part\r\n * @param textGroups if preserveTextGroups is true, the part has its own text.\r\n * @param preseverTextGroups if false, we use the full score text\r\n * @param cueInScore indicates tiny notes, like for piano accompaniment\r\n * @category SmoParameters\r\n */\r\nexport interface SmoPartInfoParams {\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\n\r\n/**\r\n * Serialized part information\r\n * @category serialization\r\n */\r\nexport interface SmoPartInfoParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\nfunction isSmoPartInfoParamsSer(params: Partial): params is SmoPartInfoParamsSer {\r\n if (params.ctor && params.ctor === 'SmoPartInfo') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Part info contains information that group 1 or 2 adjacent staves.\r\n * Parts can have formatting that is indepenedent of the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoPartInfo extends StaffModifierBase {\r\n partName: string = '';\r\n partAbbreviation: string = '';\r\n layoutManager: SmoLayoutManager;\r\n measureFormatting: Record = {};\r\n textGroups: SmoTextGroup[] = [];\r\n stavesAfter: number = 0;\r\n stavesBefore: number = 0;\r\n preserveTextGroups: boolean = false;\r\n cueInScore: boolean = false;\r\n displayCues: boolean = false;\r\n expandMultimeasureRests: boolean = false;\r\n midiInstrument: SmoMidiInstrument| null;\r\n midiDevice: string | null;\r\n static get defaults(): SmoPartInfoParams {\r\n return JSON.parse(JSON.stringify({\r\n partName: 'Staff ',\r\n partAbbreviation: '',\r\n globalLayout: SmoLayoutManager.defaultLayout,\r\n textGroups: [],\r\n preserveTextGroups: false,\r\n pageLayoutMap: {},\r\n stavesAfter: 0,\r\n stavesBefore: 0,\r\n cueInScore: false,\r\n midiDevice: null,\r\n midiInstrument: null,\r\n expandMultimeasureRests: false\r\n }));\r\n }\r\n constructor(params: SmoPartInfoParams) {\r\n super('SmoPartInfo');\r\n if (!params.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n } else {\r\n this.layoutManager = new SmoLayoutManager(params.layoutManager);\r\n }\r\n if (typeof(params.measureFormatting) !== 'undefined') {\r\n const formatKeys = Object.keys(params.measureFormatting);\r\n formatKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n this.measureFormatting[numKey] = new SmoMeasureFormat(params.measureFormatting![numKey]);\r\n });\r\n }\r\n if (params.textGroups) {\r\n this.textGroups = params.textGroups;\r\n }\r\n SmoPartInfoStringTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoNumTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoBooleanTypes.forEach((st) => {\r\n this[st] = params[st] ?? false;\r\n });\r\n this.midiDevice = params.midiDevice;\r\n if (params.midiInstrument) {\r\n this.midiInstrument = JSON.parse(JSON.stringify(params.midiInstrument));\r\n } else {\r\n this.midiInstrument = null;\r\n }\r\n }\r\n static deserialize(jsonObj: SmoPartInfoParamsSer): SmoPartInfo {\r\n const params = SmoPartInfo.defaults;\r\n smoSerialize.serializedMerge(SmoPartAttributesBasic, jsonObj, params);\r\n params.midiInstrument = jsonObj.midiInstrument;\r\n params.midiDevice = jsonObj.midiDevice;\r\n params.measureFormatting = {};\r\n if (jsonObj.layoutManager) {\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n params.layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n }\r\n if (jsonObj.measureFormatting) {\r\n const mfkeys = Object.keys(jsonObj.measureFormatting);\r\n mfkeys.forEach((mfkey) => {\r\n const mfnum = parseInt(mfkey, 10);\r\n params.measureFormatting![mfnum] = SmoMeasureModifierBase.deserialize(jsonObj.measureFormatting![mfnum]);\r\n });\r\n }\r\n return new SmoPartInfo(params);\r\n \r\n }\r\n serialize(): SmoPartInfoParamsSer {\r\n const rv: Partial = { ctor: 'SmoPartInfo' };\r\n smoSerialize.serializedMergeNonDefault(SmoPartInfo.defaults, SmoPartAttributesBasic, this, rv);\r\n rv.layoutManager = this.layoutManager.serialize();\r\n rv.textGroups = [];\r\n this.textGroups.forEach((tg) => {\r\n rv.textGroups!.push(tg.serialize());\r\n });\r\n rv.measureFormatting = {};\r\n if (this.midiInstrument) {\r\n rv.midiInstrument = JSON.parse(JSON.stringify(this.midiInstrument));\r\n }\r\n if (this.midiDevice) {\r\n rv.midiDevice = this.midiDevice;\r\n }\r\n Object.keys(this.measureFormatting).forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n rv.measureFormatting![numKey] = this.measureFormatting[numKey];\r\n });\r\n if (!isSmoPartInfoParamsSer(rv)) {\r\n throw 'bad part info ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoScore}\r\n * @module /smo/data/score\r\n */\r\nimport { SmoMusic } from './music';\r\nimport { Clef, SvgDimensions } from './common';\r\nimport { SmoMeasure, SmoMeasureParams, ColumnMappedParams, SmoMeasureParamsSer } from './measure';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport { SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, TimeSignature, TimeSignatureParameters,\r\n SmoMeasureFormatParamsSer } from './measureModifiers';\r\nimport { StaffModifierBase, SmoInstrument } from './staffModifiers';\r\nimport { SmoSystemGroup, SmoSystemGroupParamsSer, SmoScoreModifierBase, SmoPageLayout, \r\n SmoFormattingManager, SmoAudioPlayerSettings, SmoAudioPlayerParameters, SmoLayoutManagerParamsSer,\r\n SmoLayoutManager, FontPurpose,\r\n SmoScoreInfo, SmoScoreInfoKeys, ScoreMetadataSer, SmoScorePreferences, SmoPageLayoutParams, \r\n SmoLayoutManagerParams, SmoFormattingManagerParams } from './scoreModifiers';\r\nimport { SmoTextGroup, SmoScoreText, SmoTextGroupParamsSer } from './scoreText';\r\nimport { SmoSystemStaff, SmoSystemStaffParams, SmoSystemStaffParamsSer } from './systemStaff';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * List of engraving fonts available in Smoosic\r\n */\r\nexport type engravingFontType = 'Bravura' | 'Gonville' | 'Petaluma' | 'Leland';\r\n/**\r\n * Arrary of engraving fonts available in Smoosic\r\n */\r\nexport const engravingFontTypes: engravingFontType[] = ['Bravura', 'Gonville', 'Petaluma', 'Leland'];\r\n\r\nexport function isEngravingFont(et: engravingFontType | string): et is engravingFontType {\r\n return (engravingFontTypes as any[]).indexOf(et) >= 0;\r\n}\r\n\r\n/**\r\n * Constructor parameters. Usually you will call\r\n * {@link SmoScore.defaults}, and modify the parameters you need to change.\r\n * A new score with the defaults will create a single, empty measure.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoScoreParams {\r\n /**\r\n * global font defaults for this score\r\n */\r\n fonts: FontPurpose[],\r\n /**\r\n * identifying information about the score\r\n */\r\n scoreInfo: SmoScoreInfo,\r\n /**\r\n * customized editor behavior\r\n */\r\n preferences: SmoScorePreferences,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */ \r\n staves: SmoSystemStaffParams[],\r\n activeStaff?: number,\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroup[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManager,\r\n /**\r\n * measure-specific formatting\r\n */\r\n formattingManager?: SmoFormattingManager\r\n}\r\n\r\nfunction isSmoScoreParams(params: Partial): params is SmoScoreParams {\r\n if (params.fonts && params.fonts.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Serialization structure for the entire score. Score is deserialized from this\r\n * @category serialization\r\n */\r\nexport interface SmoScoreParamsSer {\r\n /**\r\n * some information about the score, mostly non-musical\r\n */\r\n score: ScoreMetadataSer,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */ \r\n staves: SmoSystemStaffParamsSer[],\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroupParamsSer[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer,\r\n /**\r\n * map of measure formats to measure\r\n */\r\n measureFormats: SmoMeasureFormatParamsSer[],\r\n /**\r\n * tempo, key and other column-mapped parameters\r\n */\r\n columnAttributeMap: ColumnParamsMapType,\r\n /**\r\n * dictionary compression for serialization\r\n */\r\n dictionary: Record\r\n}\r\n\r\n// dont' deserialize trivial text blocks saved by mistake\r\nexport function isEmptyTextBlock(params: Partial): params is SmoTextGroupParamsSer {\r\n if (Array.isArray(params?.textBlocks) || Array.isArray((params as any)?.blocks)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport interface ColumnParamsMapType {\r\n keySignature: Record,\r\n tempo: Record,\r\n timeSignature: Record,\r\n renumberingMap: Record\r\n}\r\n// SmoScoreParemsSer\r\nexport function isSmoScoreParemsSer(params: Partial): params is SmoScoreParamsSer {\r\n if (Array.isArray(params.staves)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Union of modifier types Smo modifier types\r\n */\r\nexport type SmoModifier = SmoNoteModifierBase | SmoMeasureModifierBase | StaffModifierBase | SmoScoreModifierBase;\r\n\r\n/**\r\n * Score is a container of staves, and metadata about the score. Serializing the score serializes the \r\n * child object. It is the highest-level object in Smoosic.\r\n */\r\nexport class SmoScore {\r\n /**\r\n * Map of instruments to staves, used in serialization.\r\n *\r\n * @type {any[]}\r\n * @memberof SmoScore\r\n */\r\n instrumentMap: any[] = [];\r\n /**\r\n * Default fonts in this score, for each type of text (lyrics, etc)\r\n *\r\n * @type {FontPurpose[]}\r\n * @memberof SmoScore\r\n */\r\n fonts: FontPurpose[] = [];\r\n /**\r\n * General info about the score, used for export and library\r\n *\r\n * @type {SmoScoreInfo}\r\n * @memberof SmoScore\r\n */\r\n scoreInfo: SmoScoreInfo = SmoScore.scoreInfoDefaults;\r\n /**\r\n * Default behavior for this score. Indicates some global behavior like whether to advance the cursor.\r\n *\r\n * @type {SmoScorePreferences}\r\n * @memberof SmoScore\r\n */\r\n preferences: SmoScorePreferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n /**\r\n * The staves that make up the music of the score\r\n *\r\n * @type {SmoSystemStaff[]}\r\n * @memberof SmoScore\r\n */\r\n staves: SmoSystemStaff[] = [];\r\n /**\r\n * The active staff, used for some types of selections. Not serialized.\r\n *\r\n * @type {number}\r\n * @memberof SmoScore\r\n */\r\n activeStaff: number = 0;\r\n /**\r\n * Text associated with the score, but not a specific musical element (e.g. lyrics are contains by notes)\r\n *\r\n * @type {SmoTextGroup[]}\r\n * @memberof SmoScore\r\n */\r\n textGroups: SmoTextGroup[] = [];\r\n /**\r\n * A logical grouping of staves for justification\r\n *\r\n * @type {SmoSystemGroup[]}\r\n * @memberof SmoScore\r\n */\r\n systemGroups: SmoSystemGroup[] = [];\r\n /**\r\n * some audio player defaults\r\n *\r\n * @type {SmoAudioPlayerSettings}\r\n * @memberof SmoScore\r\n */\r\n audioSettings: SmoAudioPlayerSettings;\r\n /**\r\n * Preserve a map of measures to their actual measure numbers\r\n *\r\n * @type {Record}\r\n * @memberof SmoScore\r\n */\r\n renumberingMap: Record = {};\r\n /**\r\n * page and rendering layout of the score, including the ppi and scaling of the pages.\r\n *\r\n * @type {SmoLayoutManager}\r\n * @memberof SmoScore\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * per-measure formatting customizations.\r\n *\r\n * @type {SmoFormattingManager}\r\n * @memberof SmoScore\r\n */\r\n formattingManager?: SmoFormattingManager\r\n constructor(params: SmoScoreParams) {\r\n smoSerialize.vexMerge(this, SmoScore.defaults);\r\n smoSerialize.vexMerge(this, params);\r\n if (!this.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n }\r\n if (!this.formattingManager) {\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n if (this.staves.length) {\r\n this.numberStaves();\r\n }\r\n if (typeof (this.preferences.showPiano) === 'undefined') {\r\n this.preferences.showPiano = true;\r\n }\r\n this.audioSettings = new SmoAudioPlayerSettings(params.audioSettings);\r\n this.updateMeasureFormats();\r\n }\r\n static get engravingFonts(): Record {\r\n return { Bravura: 'Bravura', Gonville: 'Gonville', Petaluma: 'Petaluma' };\r\n }\r\n static get fontPurposes(): Record {\r\n return { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 };\r\n }\r\n static get scoreInfoDefaults(): SmoScoreInfo {\r\n return JSON.parse(JSON.stringify({\r\n name: 'Smoosical',\r\n title: 'Smoosical',\r\n subTitle: '(Op. 1)',\r\n composer: 'Me',\r\n copyright: '',\r\n version: 1\r\n }));\r\n }\r\n static get scoreMetadataDefaults(): ScoreMetadataSer {\r\n return JSON.parse(JSON.stringify({\r\n fonts: [],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n renumberingMap: {},\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults)\r\n }));\r\n }\r\n static get defaults(): SmoScoreParams {\r\n return {\r\n // legacy layout structure. Now we use pages.\r\n fonts: [\r\n { name: 'engraving', purpose: SmoScore.fontPurposes.ENGRAVING, family: 'Bravura', size: 1, custom: false },\r\n { name: 'score', purpose: SmoScore.fontPurposes.SCORE, family: 'Merriweather', size: 14, custom: false },\r\n { name: 'chords', purpose: SmoScore.fontPurposes.CHORDS, family: 'Roboto Slab', size: 14, custom: false },\r\n { name: 'lyrics', purpose: SmoScore.fontPurposes.LYRICS, family: 'Merriweather', size: 12, custom: false }\r\n ],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n audioSettings: new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults),\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults),\r\n staves: [],\r\n activeStaff: 0,\r\n textGroups: [],\r\n systemGroups: []\r\n };\r\n }\r\n static get pageSizes(): string[] {\r\n return ['letter', 'tabloid', 'A4', 'A4Landscape', 'custom'];\r\n }\r\n static get pageDimensions(): Record {\r\n return {\r\n 'letter': { width: 8 * 96 + 48, height: 11 * 96 },\r\n 'letterLandscape': { width: 11 * 96, height: 8 * 96 + 48 },\r\n 'tabloid': { width: 1632, height: 1056 },\r\n 'A4': { width: 794, height: 1122 },\r\n 'A4Landscape': { width: 1122, height: 794 },\r\n 'custom': { width: 1, height: 1 }\r\n };\r\n }\r\n static pageSizeFromDimensions(width: number, height: number): string | null {\r\n const rv =\r\n SmoScore.pageSizes.find((sz) => SmoScore.pageDimensions[sz].width === width && SmoScore.pageDimensions[sz].height === height)\r\n ?? null;\r\n return rv;\r\n }\r\n\r\n static get preferences() {\r\n return ['preferences', 'fonts', 'scoreInfo', 'audioSettings'];\r\n }\r\n /**\r\n * serialize the keySignature, tempo and time signature, which are mapped\r\n * to a column at a measure index\r\n * @returns \r\n */\r\n serializeColumnMapped() {\r\n const keySignature: Record = {};\r\n const tempo: Record = {};\r\n const timeSignature: Record = {};\r\n const renumberingMap: Record = {};\r\n let previous: ColumnMappedParams | null = null;\r\n this.staves[0].measures.forEach((measure) => {\r\n const current = measure.serializeColumnMapped();\r\n const ix = measure.measureNumber.measureIndex;\r\n const currentInstrument = this.staves[0].getStaffInstrument(ix);\r\n current.keySignature = SmoMusic.vexKeySigWithOffset(current.keySignature, -1 * currentInstrument.keyOffset);\r\n if (ix === 0) {\r\n keySignature[0] = current.keySignature;\r\n tempo[0] = current.tempo;\r\n timeSignature[0] = current.timeSignature;\r\n renumberingMap[0] = 0;\r\n previous = current;\r\n } else {\r\n if (typeof(this.renumberingMap[measure.measureNumber.measureIndex]) === 'number') {\r\n renumberingMap[measure.measureNumber.measureIndex] = this.renumberingMap[measure.measureNumber.measureIndex];\r\n }\r\n if (current.keySignature !== previous!.keySignature) {\r\n previous!.keySignature = current.keySignature;\r\n keySignature[ix] = current.keySignature;\r\n }\r\n if (!(TimeSignature.equal(current.timeSignature, previous!.timeSignature))) {\r\n previous!.timeSignature = current.timeSignature;\r\n timeSignature[ix] = current.timeSignature;\r\n }\r\n if (!(SmoTempoText.eq(current.tempo, previous!.tempo))) {\r\n previous!.tempo = current.tempo;\r\n tempo[ix] = current.tempo;\r\n }\r\n }\r\n });\r\n return { keySignature, tempo, timeSignature, renumberingMap };\r\n }\r\n\r\n /**\r\n * Column-mapped attributes stay the same in each measure until\r\n * changed, like key-signatures. We don't store each measure value to\r\n * make the files smaller\r\n * @param scoreObj - the json blob that contains the score data\r\n * @returns \r\n */\r\n static deserializeColumnMapped(scoreObj: any) {\r\n let curValue: any;\r\n let mapIx: number = 0;\r\n if (!scoreObj.columnAttributeMap) {\r\n return;\r\n }\r\n const attrs = Object.keys(scoreObj.columnAttributeMap);\r\n scoreObj.staves.forEach((staff: any) => {\r\n const attrIxMap: any = {};\r\n attrs.forEach((attr) => {\r\n attrIxMap[attr] = 0;\r\n });\r\n\r\n staff.measures.forEach((measure: any) => {\r\n attrs.forEach((attr) => {\r\n mapIx = attrIxMap[attr];\r\n const curHash = scoreObj.columnAttributeMap[attr];\r\n const attrKeys: any = Object.keys(curHash);\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n attrKeys.sort((a: string, b: string) => parseInt(a, 10) > parseInt(b, 10) ? 1 : -1);\r\n if (attrKeys.length > mapIx + 1) {\r\n if (measure.measureNumber.measureIndex >= attrKeys[mapIx + 1]) {\r\n mapIx += 1;\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n }\r\n }\r\n // legacy timeSignature format was just a string 2/4, 3/8 etc.\r\n if (attr === 'timeSignature') {\r\n const ts = new TimeSignature(TimeSignature.defaults);\r\n if (typeof (curValue) === 'string') {\r\n ts.timeSignature = curValue;\r\n measure[attr] = ts;\r\n } else {\r\n measure[attr] = TimeSignature.createFromPartial(curValue);\r\n }\r\n } else {\r\n measure[attr] = curValue;\r\n }\r\n attrIxMap[attr] = mapIx;\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Serialize the entire score.\r\n * @returns JSON object\r\n */\r\n serialize(skipStaves?: boolean): SmoScoreParamsSer {\r\n const params: Partial = {};\r\n let obj: Partial = {\r\n layoutManager: { ctor: 'SmoLayoutManager', ...SmoLayoutManager.defaults },\r\n audioSettings: {},\r\n measureFormats: [],\r\n staves: [],\r\n textGroups: [],\r\n systemGroups: [],\r\n score: SmoScore.scoreMetadataDefaults\r\n };\r\n if (this.layoutManager) {\r\n obj.layoutManager = this.layoutManager.serialize();\r\n }\r\n obj.score!.fonts = JSON.parse(JSON.stringify(this.fonts));\r\n obj.score!.renumberingMap = JSON.parse(JSON.stringify(this.renumberingMap));\r\n obj.score!.preferences = this.preferences.serialize();\r\n obj.score!.scoreInfo = JSON.parse(JSON.stringify(this.scoreInfo));\r\n if (this.formattingManager) {\r\n obj.measureFormats = this.formattingManager.serialize();\r\n }\r\n\r\n obj.audioSettings = this.audioSettings.serialize();\r\n if (!skipStaves) {\r\n this.staves.forEach((staff: SmoSystemStaff) => {\r\n obj.staves!.push(staff.serialize());\r\n });\r\n } else {\r\n obj.staves = [];\r\n }\r\n // Score text is not part of text group, so don't save separately.\r\n this.textGroups.forEach((tg) => {\r\n if (tg.isTextVisible()) {\r\n obj.textGroups!.push(tg.serialize());\r\n }\r\n });\r\n this.systemGroups.forEach((gg) => {\r\n obj.systemGroups!.push(gg.serialize());\r\n });\r\n obj.columnAttributeMap = this.serializeColumnMapped();\r\n smoSerialize.jsonTokens(obj);\r\n obj = smoSerialize.detokenize(obj, smoSerialize.tokenValues);\r\n obj.dictionary = smoSerialize.tokenMap;\r\n return obj as SmoScoreParamsSer;\r\n }\r\n updateScorePreferences(pref: SmoScorePreferences) {\r\n this.preferences = pref;\r\n SmoMeasure.defaultDupleDuration = pref.defaultDupleDuration;\r\n SmoMeasure.defaultTripleDuration = pref.defaultTripleDuration;\r\n }\r\n get engravingFont(): engravingFontType {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont) {\r\n const val: engravingFontType | undefined = engravingFontTypes.find((x) => x === efont.family);\r\n if (val) {\r\n return val;\r\n }\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: engravingFontType) {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont && isEngravingFont(value)) {\r\n efont.family = value;\r\n }\r\n }\r\n static upConvertGlobalLayout(jsonObj: any) {\r\n // upconvert global layout, which used to be directly on layoutManager\r\n if (typeof (jsonObj.layoutManager.globalLayout) === 'undefined') {\r\n jsonObj.layoutManager.globalLayout = {\r\n svgScale: jsonObj.layoutManager.svgScale,\r\n zoomScale: jsonObj.layoutManager.zoomScale,\r\n pageWidth: jsonObj.layoutManager.pageWidth,\r\n pageHeight: jsonObj.layoutManager.pageHeight,\r\n noteSpacing: jsonObj.layoutManager.noteSpacing\r\n };\r\n if (!jsonObj.layoutManager.globalLayout.noteSpacing) {\r\n jsonObj.layoutManager.globalLayout.noteSpacing = 1.0;\r\n }\r\n }\r\n }\r\n /**\r\n * Convert legacy score layout to layoutManager object parameters\r\n * @param jsonObj \r\n */\r\n static upConvertLayout(jsonObj: any) {\r\n let i = 0;\r\n jsonObj.layoutManager = {};\r\n SmoLayoutManager.attributes.forEach((attr) => {\r\n jsonObj.layoutManager[attr] = jsonObj.score.layout[attr];\r\n });\r\n jsonObj.layoutManager.pageLayouts = [];\r\n for (i = 0; i < jsonObj.score.layout.pages; ++i) {\r\n const pageSetting = JSON.parse(JSON.stringify(SmoPageLayout.defaults));\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (jsonObj.score.layout[attr]) !== 'undefined') {\r\n pageSetting[attr] = jsonObj.score.layout[attr];\r\n }\r\n });\r\n jsonObj.layoutManager.pageLayouts.push(pageSetting);\r\n }\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n\r\n /**\r\n * Hack: for the case of a score containing only a single part, use the text from the \r\n * part.\r\n * @param jsonObj \r\n * @returns \r\n */\r\n static fixTextGroupSinglePart(jsonObj: any) {\r\n if (jsonObj.staves.length !== 1) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo.textGroups || jsonObj.staves[0].partInfo.textGroups.length < 1) {\r\n return;\r\n }\r\n jsonObj.textGroups = JSON.parse(JSON.stringify(jsonObj.staves[0].partInfo.textGroups));\r\n }\r\n /**\r\n * Deserialize an entire score\r\n * @param jsonString \r\n * @returns SmoScore\r\n */\r\n static deserialize(jsonString: string): SmoScore {\r\n let jsonObj: Partial = JSON.parse(jsonString);\r\n let upconvertFormat = false;\r\n let formattingManager = null;\r\n if (jsonObj.dictionary) {\r\n jsonObj = smoSerialize.detokenize(jsonObj, jsonObj.dictionary);\r\n }\r\n SmoScore.fixTextGroupSinglePart(jsonObj);\r\n upconvertFormat = typeof (jsonObj.measureFormats) === 'undefined';\r\n const params: Partial = {};\r\n const staves: SmoSystemStaff[] = [];\r\n jsonObj.textGroups = jsonObj.textGroups ? jsonObj.textGroups : [];\r\n\r\n // Explode the sparse arrays of attributes into the measures\r\n SmoScore.deserializeColumnMapped(jsonObj);\r\n // meaning of customProportion has changed, backwards-compatiblity\r\n if (typeof(jsonObj.score) === 'undefined') {\r\n throw 'bad score ' + JSON.stringify(jsonObj);\r\n }\r\n // upconvert old proportion operator\r\n const jsonPropUp = jsonObj.score.preferences as any;\r\n if (typeof (jsonPropUp) !== 'undefined' && typeof (jsonPropUp.customProportion) === 'number') {\r\n SmoMeasureFormat.defaults.proportionality = jsonPropUp.customProportion;\r\n if (SmoMeasureFormat.defaults.proportionality === SmoMeasureFormat.legacyProportionality) {\r\n SmoMeasureFormat.defaults.proportionality = SmoMeasureFormat.defaultProportionality;\r\n }\r\n }\r\n // up-convert legacy layout data\r\n if ((jsonObj.score as any).layout) {\r\n SmoScore.upConvertLayout(jsonObj);\r\n }\r\n if (jsonObj.layoutManager && !jsonObj.layoutManager.globalLayout) {\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n if (!jsonObj.layoutManager) {\r\n throw 'bad score, layout mgr ' + JSON.stringify(jsonObj);\r\n }\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n const layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n\r\n\r\n // params.layout = JSON.parse(JSON.stringify(SmoScore.defaults.layout));\r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n SmoScore.scoreMetadataDefaults, params); \r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n jsonObj.score, params);\r\n if (jsonObj.score.preferences) {\r\n params.preferences = new SmoScorePreferences(jsonObj.score.preferences);\r\n } else {\r\n params.preferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n }\r\n if (jsonObj.score.scoreInfo) {\r\n const scoreInfo: Partial = {};\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, SmoScore.scoreInfoDefaults, scoreInfo);\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, jsonObj.score.scoreInfo, scoreInfo);\r\n params.scoreInfo = (scoreInfo as SmoScoreInfo);\r\n } else {\r\n params.scoreInfo = SmoScore.scoreInfoDefaults;\r\n }\r\n if (!jsonObj.audioSettings) {\r\n params.audioSettings = new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults);\r\n } else {\r\n params.audioSettings = SmoScoreModifierBase.deserialize(jsonObj.audioSettings);\r\n }\r\n params.preferences.transposingScore = params.preferences.transposingScore ?? false;\r\n params.preferences.hideEmptyLines = params.preferences.hideEmptyLines ?? false;\r\n let renumberingMap: Record = { 0: 0 };\r\n if (jsonObj.columnAttributeMap && jsonObj.columnAttributeMap.renumberingMap) {\r\n renumberingMap = jsonObj.columnAttributeMap.renumberingMap;\r\n }\r\n if (!jsonObj.staves) {\r\n throw 'bad score, no staves: ' + JSON.stringify(jsonObj);\r\n }\r\n jsonObj.staves.forEach((staffObj: any, staffIx: number) => {\r\n staffObj.staffId = staffIx;\r\n staffObj.renumberingMap = renumberingMap;\r\n const staff = SmoSystemStaff.deserialize(staffObj);\r\n staves.push(staff);\r\n });\r\n\r\n const textGroups: SmoTextGroup[] = [];\r\n jsonObj.textGroups.forEach((tg: any) => {\r\n if (!isEmptyTextBlock(tg)) {\r\n textGroups.push(SmoTextGroup.deserializePreserveId(tg));\r\n }\r\n });\r\n\r\n const systemGroups: SmoSystemGroup[] = [];\r\n if (jsonObj.systemGroups) {\r\n jsonObj.systemGroups.forEach((tt: any) => {\r\n var st = SmoScoreModifierBase.deserialize(tt);\r\n st.autoLayout = false; // since this has been layed out, presumably, before save\r\n systemGroups.push(st);\r\n });\r\n }\r\n params.staves = staves;\r\n if (upconvertFormat) {\r\n formattingManager = SmoScore.measureFormatFromLegacyScore(params as any, jsonObj);\r\n } else {\r\n const measureParams: SmoFormattingManagerParams = {\r\n measureFormats: [],\r\n partIndex: -1\r\n }\r\n if (jsonObj.measureFormats) {\r\n jsonObj.measureFormats.forEach((mf: SmoMeasureFormatParamsSer) => {\r\n const mfObj = new SmoMeasureFormat(mf);\r\n measureParams.measureFormats?.push(mfObj);\r\n });\r\n }\r\n params.formattingManager = new SmoFormattingManager(measureParams);\r\n }\r\n params.layoutManager = layoutManager;\r\n if (!isSmoScoreParams(params)) {\r\n throw 'Bad score, missing params: ' + JSON.stringify(params, null, ' ');\r\n }\r\n const score = new SmoScore(params);\r\n score.textGroups = textGroups;\r\n score.systemGroups = systemGroups;\r\n score.scoreInfo.version += 1;\r\n return score;\r\n }\r\n /**\r\n * Convert measure formatting from legacy scores, that had the formatting\r\n * per measure, to the new way that has a separate formatting object.\r\n * **/\r\n static measureFormatFromLegacyScore(score: SmoScore, jsonObj: any): SmoFormattingManager | null {\r\n let current: SmoMeasureFormat | null = null;\r\n let previous: SmoMeasureFormat | null = null;\r\n const measureFormats: SmoMeasureFormat[] = [];\r\n score.staves[0].measures.forEach((measure: SmoMeasure) => {\r\n if (current === null) {\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n } else {\r\n previous = current;\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n if (!current.eq(previous)) {\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n }\r\n }\r\n });\r\n return new SmoFormattingManager({ measureFormats });\r\n }\r\n\r\n /**\r\n * Return a default score with no notes or staves\r\n * @param scoreDefaults \r\n * @param measureDefaults \r\n * @returns \r\n */\r\n static getDefaultScore(scoreDefaults: SmoScoreParams, measureDefaults: SmoMeasureParams | null) {\r\n measureDefaults = measureDefaults !== null ? measureDefaults : SmoMeasure.defaults;\r\n const score = new SmoScore(scoreDefaults);\r\n score.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n const measure: SmoMeasure = SmoMeasure.getDefaultMeasure(measureDefaults as SmoMeasureParams);\r\n score.addMeasure(0);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(measureDefaults as SmoMeasureParams)\r\n });\r\n return score;\r\n }\r\n\r\n /**\r\n * Return an 'empty' score, with one measure of rests\r\n * @param scoreDefaults \r\n * @returns \r\n */\r\n static getEmptyScore(scoreDefaults: SmoScoreParams) {\r\n const score = new SmoScore(scoreDefaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n return score;\r\n }\r\n /**\r\n * We have deleted a measure, update the renumber index to\r\n * shuffle back.\r\n * @param indexToDelete \r\n */\r\n updateRenumberForAddDelete(indexToDelete: number, toAdd: boolean) {\r\n if (!toAdd && indexToDelete === 0) {\r\n return;\r\n }\r\n const maxIndex = this.staves[0].measures.length - 1;\r\n const increment = toAdd ? 1 : -1;\r\n for (var i = indexToDelete; i < maxIndex; ++i) {\r\n if (typeof(this.renumberingMap[i]) === 'number') {\r\n this.renumberingMap[i] = this.renumberingMap[i] + increment;\r\n }\r\n }\r\n if (typeof(this.renumberingMap[maxIndex]) === 'number' && !toAdd) {\r\n delete this.renumberingMap[maxIndex];\r\n }\r\n }\r\n\r\n updateRenumberingMap(measureIndex: number, localIndex: number) {\r\n if (measureIndex === 0) {\r\n this.renumberingMap[0] = localIndex;\r\n } else if (typeof(this.renumberingMap[measureIndex]) === 'number') {\r\n if (measureIndex === localIndex) {\r\n delete this.renumberingMap[measureIndex];\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n this.staves.forEach((staff) => {\r\n staff.renumberingMap = this.renumberingMap;\r\n });\r\n this.numberStaves();\r\n }\r\n /**\r\n * Iteratively number the staves, like when adding a measure\r\n */\r\n numberStaves() {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const stave = this.staves[i];\r\n stave.staffId = i;\r\n stave.numberMeasures();\r\n }\r\n }\r\n\r\n /**\r\n * determine if the measure at this index could be a multi-measure rest\r\n * @param measureIndex - the measure index we are considering to add\r\n * @param start - the measure index would be the start of the rest \r\n * @returns \r\n */\r\n isMultimeasureRest(measureIndex: number, start: boolean, forceRest: boolean) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (!forceRest && !this.staves[i].isRest(measureIndex)) {\r\n return false;\r\n }\r\n if (this.staves[i].getVoltasForMeasure(measureIndex).length > 0) {\r\n return false;\r\n }\r\n if (this.staves[i].isRepeatSymbol(measureIndex)) {\r\n return false;\r\n }\r\n if (!start && measureIndex > 0 && this.staves[i].isRepeat(measureIndex - 1)) {\r\n return false;\r\n }\r\n if (this.staves[i].isRehearsal(measureIndex)) {\r\n return false;\r\n }\r\n // instrument change other than the initial measure\r\n if (this.staves[i].measureInstrumentMap[measureIndex] && i > 0) {\r\n return false;\r\n }\r\n }\r\n if (measureIndex > 0) {\r\n const measure = this.staves[0].measures[measureIndex];\r\n const prev = this.staves[0].measures[measureIndex - 1];\r\n if (!start && !TimeSignature.equal(measure.timeSignature, prev.timeSignature)) {\r\n return false;\r\n }\r\n if (!start && measure.keySignature !== prev.keySignature) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Restore measure formats stored when a score is serialized\r\n */\r\n updateMeasureFormats() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n (this.formattingManager as SmoFormattingManager).updateFormat(measure);\r\n });\r\n });\r\n }\r\n /**\r\n * Add a measure to the score with the supplied parameters at the supplied index.\r\n * The defaults per staff may be different depending on the clef, key of the staff.\r\n */\r\n addDefaultMeasureWithNotes(measureIndex: number, parameters: SmoMeasureParams) {\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.staves.forEach((staff) => {\r\n const defaultMeasure =\r\n SmoMeasure.getDefaultMeasureWithNotes(parameters);\r\n staff.addMeasure(measureIndex, defaultMeasure);\r\n });\r\n }\r\n getLocalMeasureIndex(measureIndex: number) {\r\n let maxKey = -1;\r\n const keys = Object.keys(this.updateRenumberForAddDelete);\r\n keys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n if (numKey <= measureIndex && numKey > maxKey) {\r\n maxKey = numKey;\r\n }\r\n });\r\n if (maxKey < 0) {\r\n return measureIndex;\r\n }\r\n return this.renumberingMap[maxKey] + (measureIndex - maxKey);\r\n }\r\n\r\n /**\r\n * delete the measure at the supplied index in all the staves\r\n */\r\n deleteMeasure(measureIndex: number) {\r\n this.staves.forEach((staff) => {\r\n staff.deleteMeasure(measureIndex);\r\n });\r\n // adjust offset if text was attached to any missing measures after the deleted one.\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (tg.attachToSelector && (tg.selector as SmoSelector).measure >= measureIndex && (tg.selector as SmoSelector).measure > 0) {\r\n (tg.selector as SmoSelector).measure -= 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, false);\r\n }\r\n /**\r\n * get a measure 'compatible' with the measure at the given index, in terms\r\n * of key, time signature etc.\r\n * @param measureIndex \r\n * @param staffIndex \r\n * @returns \r\n */\r\n getPrototypeMeasure(measureIndex: number, staffIndex: number) {\r\n const staff = this.staves[staffIndex];\r\n let protomeasure: SmoMeasureParams = {} as SmoMeasureParams;\r\n\r\n // Since this staff may already have instrument settings, use the\r\n // immediately preceeding or post-ceding measure if it exists.\r\n if (measureIndex < staff.measures.length) {\r\n protomeasure = staff.measures[measureIndex];\r\n } else if (staff.measures.length) {\r\n protomeasure = staff.measures[staff.measures.length - 1];\r\n } else {\r\n protomeasure = SmoMeasure.defaults;\r\n }\r\n return SmoMeasure.getDefaultMeasureWithNotes(protomeasure);\r\n }\r\n\r\n /**\r\n * Give a measure prototype, create a new measure and add it to each staff, with the\r\n * correct settings for current time signature/clef.\r\n * @param measureIndex \r\n */\r\n addMeasure(measureIndex: number) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const staff = this.staves[i];\r\n const nmeasure = this.getPrototypeMeasure(measureIndex, i);\r\n if (nmeasure.voices.length <= nmeasure.getActiveVoice()) {\r\n nmeasure.setActiveVoice(0);\r\n }\r\n staff.addMeasure(measureIndex, nmeasure);\r\n }\r\n // Update offsets for score modifiers that have a selector\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (typeof (tg.selector) === 'undefined') {\r\n return;\r\n }\r\n if (tg.attachToSelector && tg.selector.measure >= measureIndex && tg.selector.measure < this.staves[0].measures.length) {\r\n tg.selector.measure += 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.numberStaves();\r\n }\r\n\r\n /**\r\n * Replace the measure at the given location. Probably due to an undo operation or paste.\r\n * @param selector \r\n * @param measure \r\n */\r\n replaceMeasure(selector: SmoSelector, measure: SmoMeasure) {\r\n var staff = this.staves[selector.staff];\r\n staff.measures[selector.measure] = measure;\r\n }\r\n\r\n getSystemGroupForStaff(selection: SmoSelection) {\r\n const staffId: number = selection.staff.staffId;\r\n const measureIndex: number = selection.measure.measureNumber.measureIndex;\r\n const exist = this.systemGroups.find((sg: SmoSystemGroup) =>\r\n sg.startSelector.staff <= staffId &&\r\n sg.endSelector.staff >= staffId &&\r\n (sg.mapType === SmoSystemGroup.mapTypes.allMeasures ||\r\n (sg.startSelector.measure <= measureIndex &&\r\n sg.endSelector.measure >= measureIndex))\r\n );\r\n return exist;\r\n }\r\n\r\n getStavesForGroup(group: SmoSystemGroup) {\r\n return this.staves.filter((staff) => staff.staffId >= group.startSelector.staff &&\r\n staff.staffId <= group.endSelector.staff);\r\n }\r\n\r\n // ### addOrReplaceSystemGroup\r\n // Add a new staff grouping, or replace it if it overlaps and is different, or\r\n // remove it if it is identical (toggle)\r\n addOrReplaceSystemGroup(newGroup: SmoSystemGroup) {\r\n // Replace this group for any groups that overlap it.\r\n this.systemGroups = this.systemGroups.filter((sg) => !sg.overlaps(newGroup));\r\n this.systemGroups.push(newGroup);\r\n }\r\n\r\n isPartExposed(): boolean {\r\n if (this.staves.length > 2) {\r\n return false;\r\n }\r\n const staff = this.staves[0];\r\n const staveCount = staff.partInfo.stavesAfter + staff.partInfo.stavesBefore + 1;\r\n return staveCount === this.staves.length\r\n && staff.partInfo.stavesBefore === 0;\r\n }\r\n\r\n /**\r\n * Probably due to an undo operation, replace the staff at the given index.\r\n * @param index \r\n * @param staff \r\n */\r\n replaceStaff(index: number, staff: SmoSystemStaff) {\r\n const staves = [];\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (i !== index) {\r\n staves.push(this.staves[i]);\r\n } else {\r\n staves.push(staff);\r\n }\r\n }\r\n this.staves = staves;\r\n }\r\n /**\r\n * \r\n * @param measureIndex \r\n * @param key \r\n */\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.staves.forEach((staff) => {\r\n // Consider transpose for key of instrument\r\n const netOffset = staff.measures[measureIndex].transposeIndex;\r\n const newKey = SmoMusic.vexKeySigWithOffset(key, netOffset);\r\n staff.addKeySignature(measureIndex, newKey);\r\n });\r\n }\r\n\r\n /**\r\n * If the part is a transposing part, remove the transposition from the notes/staff. This logic\r\n * assumes the measures previously had transposeIndex set up by the instrument map.\r\n */\r\n setTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n if (mm.transposeIndex !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, -1 * mm.transposeIndex);\r\n mm.transposeToOffset(0, concert);\r\n mm.transposeIndex = 0;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * If the score is switching from transposing to non-transposing, update the index\r\n * and pitches. This logic assumes we are changing from transposing to non-transposing.\r\n */\r\n setNonTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n const inst = staff.getStaffInstrument(mm.measureNumber.measureIndex);\r\n if (inst.keyOffset !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, inst.keyOffset);\r\n mm.transposeToOffset(inst.keyOffset, concert);\r\n mm.transposeIndex = inst.keyOffset;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ### addInstrument\r\n // add a new staff (instrument) to the score\r\n addStaff(parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n let i = 0;\r\n if (this.staves.length === 0) {\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = 0;\r\n // For part views, we renumber the staves even if there is only one staff.\r\n if (staff.measures.length) {\r\n this.numberStaves();\r\n }\r\n return staff;\r\n }\r\n if (!parameters) {\r\n parameters = SmoSystemStaff.defaults;\r\n }\r\n const proto = this.staves[0];\r\n const measures = [];\r\n for (i = 0; i < proto.measures.length; ++i) {\r\n const measure: SmoMeasure = proto.measures[i];\r\n const jsonObj: SmoMeasureParamsSer = measure.serialize();\r\n // Need to do this since score serialization doesn't include TS in each measure\r\n jsonObj.timeSignature = measure.timeSignature.serialize();\r\n jsonObj.tempo = measure.tempo.serialize();\r\n let newMeasure = SmoMeasure.deserialize(jsonObj);\r\n newMeasure.measureNumber = measure.measureNumber;\r\n newMeasure.clef = parameters.measureInstrumentMap[0].clef as Clef;\r\n newMeasure.modifiers = [];\r\n newMeasure.transposeIndex = 0;\r\n // Consider key change if the proto measure is non-concert pitch\r\n newMeasure.keySignature =\r\n SmoMusic.vexKeySigWithOffset(newMeasure.keySignature,\r\n newMeasure.transposeIndex - measure.transposeIndex);\r\n newMeasure.voices = [{ notes: SmoMeasure.getDefaultNotes(newMeasure) }];\r\n measure.modifiers.forEach((modifier) => {\r\n const nmod: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modifier);\r\n newMeasure.modifiers.push(nmod);\r\n });\r\n measures.push(newMeasure);\r\n }\r\n parameters.measures = measures;\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = this.staves.length - 1;\r\n this.numberStaves();\r\n return staff;\r\n }\r\n\r\n // ### removeStaff\r\n // Remove stave at the given index\r\n removeStaff(index: number) {\r\n const staves: SmoSystemStaff[] = [];\r\n let ix = 0;\r\n this.staves.forEach((staff) => {\r\n if (ix !== index) {\r\n staves.push(staff);\r\n }\r\n ix += 1;\r\n });\r\n this.staves = staves;\r\n this.numberStaves();\r\n }\r\n getStaffInstrument(selector: SmoSelector): SmoInstrument {\r\n const staff: SmoSystemStaff = this.staves[selector.staff];\r\n return staff.getStaffInstrument(selector.measure);\r\n }\r\n\r\n swapStaves(index1: number, index2: number): void {\r\n if (this.staves.length < index1 || this.staves.length < index2) {\r\n return;\r\n }\r\n const tmpStaff = this.staves[index1];\r\n this.staves[index1] = this.staves[index2];\r\n this.staves[index2] = tmpStaff;\r\n this.staves.forEach((staff) => {\r\n staff.mapStaffFromTo(index1, index2);\r\n staff.mapStaffFromTo(index2, index1);\r\n });\r\n this.numberStaves();\r\n }\r\n\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n addTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, true);\r\n }\r\n getTextGroups() {\r\n return this.textGroups;\r\n }\r\n scaleTextGroups(scale: number) {\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n tg.scaleText(scale);\r\n });\r\n }\r\n\r\n removeTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, false);\r\n }\r\n\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n // ### setLyricFont\r\n // set the font for lyrics, which are the same for all lyrics in the score\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricFont(fontInfo);\r\n });\r\n const fontInst: FontPurpose | undefined = this.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.LYRICS);\r\n if (typeof (fontInst) === 'undefined') {\r\n return;\r\n }\r\n fontInst.family = fontInfo.family ?? '';\r\n fontInst.size = parseInt(SmoScoreText.fontPointSize(fontInfo.size).toString());\r\n fontInst.custom = true;\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordFont(fontInfo);\r\n });\r\n }\r\n\r\n get measures() {\r\n if (this.staves.length === 0) {\r\n return [];\r\n }\r\n return this.staves[this.activeStaff].measures;\r\n }\r\n incrementActiveStaff(offset: number) {\r\n if (offset < 0) {\r\n offset = offset + this.staves.length;\r\n }\r\n const nextStaff = (this.activeStaff + offset) % this.staves.length;\r\n if (nextStaff >= 0 && nextStaff < this.staves.length) {\r\n this.activeStaff = nextStaff;\r\n }\r\n return this.activeStaff;\r\n }\r\n\r\n setActiveStaff(index: number) {\r\n this.activeStaff = index <= this.staves.length ? index : this.activeStaff;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A score modifier is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, layout information\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer } from './measureModifiers';\r\nimport { SmoAttrs, getId, SmoModifierBase, SvgBox } from './common';\r\nimport { SmoMeasure } from './measure';\r\nimport { SmoSelector } from '../xform/selections';\r\n\r\n/**\r\n * Base class for all {@link SmoScore} modifiers. \r\n * It is used to de/serialize the objects.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoScoreModifierBase implements SmoModifierBase {\r\n /**\r\n * constructor\r\n *\r\n * @type {string}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n ctor: string;\r\n /**\r\n * When rendered, keep track of the box\r\n *\r\n * @type {(SvgBox | null)}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n logicalBox: SvgBox | null = null;\r\n /**\r\n * attributes for identification\r\n *\r\n * @type {SmoAttrs}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n attrs: SmoAttrs;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n abstract serialize(): any;\r\n static deserialize(jsonObj: any) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * For global/default font settings.\r\n * @param name to distinguish: chord, lyric etc.\r\n * @param family font family\r\n * @param size in points\r\n * @param custom used to distinguish a specific text is not the default\r\n */\r\nexport interface FontPurpose {\r\n /**\r\n * name of the purpose\r\n * { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 }\r\n */\r\n name: string,\r\n /**\r\n * purpose enumeration\r\n */\r\n purpose: number,\r\n /**\r\n * font family\r\n */\r\n family: string,\r\n /**\r\n * default font size\r\n */\r\n size: number,\r\n /**\r\n * a flag that can be used to indicate if this is the global default, or a customization.\r\n * For lyrics for instance, most lyrics would use the custom font, this would be true if\r\n * it was overridden\r\n */\r\n custom: boolean\r\n}\r\n\r\n\r\n// @internal\r\nexport type SmoScoreInfoKey = 'name' | 'title' | 'subTitle' | 'composer' | 'copyright';\r\nexport const SmoScoreInfoKeys = ['name', 'title', 'subTitle', 'composer', 'copyright'];\r\n/**\r\n * Information about the score itself, like composer etc.\r\n * @category SmoModifier\r\n */\r\nexport interface SmoScoreInfo {\r\n /**\r\n * deprecated, now defaults to title\r\n */\r\n name: string,\r\n /**\r\n * name of score\r\n */\r\n title: string,\r\n /**\r\n * subtitle/opus\r\n */\r\n subTitle: string,\r\n /**\r\n * who wrote it\r\n */\r\n composer: string,\r\n /**\r\n * copyright information\r\n */\r\n copyright: string,\r\n /**\r\n * for version tracking\r\n */\r\n version: number\r\n}\r\n\r\n\r\nexport type SmoScorePreferenceBool = 'autoPlay' | 'autoAdvance' | 'showPiano' | 'hideEmptyLines' | 'transposingScore';\r\nexport type SmoScorePreferenceNumber = 'defaultDupleDuration' | 'defaultTripleDuration';\r\nexport const SmoScorePreferenceBools: SmoScorePreferenceBool[] = ['autoPlay', 'autoAdvance', 'showPiano', 'hideEmptyLines', 'transposingScore'];\r\nexport const SmoScorePreferenceNumbers: SmoScorePreferenceNumber[] = ['defaultDupleDuration', 'defaultTripleDuration'];\r\n/**\r\n * Global score/program behavior preferences, see below for parameters\r\n */\r\nexport interface SmoScorePreferencesParams {\r\n autoPlay: boolean;\r\n autoAdvance: boolean;\r\n defaultDupleDuration: number;\r\n defaultTripleDuration: number;\r\n showPiano: boolean;\r\n hideEmptyLines: boolean;\r\n transposingScore: boolean;\r\n}\r\n/**\r\n * Some default SMO behavior\r\n * @param autoPlay play a new note or chord\r\n * @param autoAdvance Sibelius-like behavior of advancing cursor when a letter note is placed\r\n * @param defaultDupleDuration in ticks, even metered measures\r\n * @param defaultTripleDuration in ticks, 6/8 etc.\r\n * @param showPiano show the piano widget in the score\r\n * @param hideEmptyLines Hide empty lines in full score\r\n * @param transposingScore Whether to show the score parts in concert key\r\n * @category SmoModifier\r\n */\r\nexport class SmoScorePreferences {\r\n autoPlay: boolean = true;\r\n autoAdvance: boolean = true;\r\n defaultDupleDuration: number = 4096;\r\n defaultTripleDuration: number = 6144;\r\n showPiano: boolean = true;\r\n hideEmptyLines: boolean = false;\r\n transposingScore: boolean = false;\r\n static get defaults(): SmoScorePreferencesParams {\r\n return {\r\n autoPlay: true,\r\n autoAdvance: true,\r\n defaultDupleDuration: 4096,\r\n defaultTripleDuration: 6144,\r\n showPiano: true,\r\n hideEmptyLines: false,\r\n transposingScore: false\r\n };\r\n }\r\n constructor(params: SmoScorePreferencesParams) {\r\n if (params) {\r\n SmoScorePreferenceBools.forEach((bb) => {\r\n this[bb] = params[bb];\r\n });\r\n SmoScorePreferenceNumbers.forEach((nn) => {\r\n this[nn] = params[nn];\r\n });\r\n }\r\n }\r\n serialize(): SmoScorePreferencesParams {\r\n return {\r\n ...this\r\n }\r\n }\r\n}\r\n/**\r\n * non-musical information about the score\r\n */\r\nexport interface ScoreMetadataSer {\r\n fonts: FontPurpose[],\r\n preferences: SmoScorePreferencesParams,\r\n renumberingMap: Record,\r\n scoreInfo: SmoScoreInfo\r\n}\r\n\r\n/**\r\n * Map of measure formatting to measure IDs. We only save non-default formats\r\n * @param measureFormats \r\n * @param partIndex \r\n */\r\nexport interface SmoFormattingManagerParams {\r\n /**\r\n * map of index to {@link SmoMeasureFormat} objects\r\n */\r\n measureFormats?: SmoMeasureFormat[],\r\n /**\r\n * the associated part, or -1 for the score\r\n */\r\n partIndex?: number\r\n}\r\n/**\r\n * A score can have different views - one for the score itself and one for each\r\n * part, and each part can have its own formatting and text.\r\n * *Note*: I may move this to part info module.\r\n * @param measureFormats map of index to {@link SmoMeasureFormat} objects\r\n * @param partIndex the associated part, or -1 for the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoFormattingManager extends SmoScoreModifierBase {\r\n measureFormats: Record;\r\n partIndex: number = -1;\r\n static get forScore() {\r\n return -1;\r\n }\r\n static get defaults(): SmoFormattingManagerParams {\r\n return {\r\n measureFormats: [new SmoMeasureFormat(SmoMeasureFormat.defaults)],\r\n partIndex: -1\r\n };\r\n }\r\n\r\n constructor(params: SmoFormattingManagerParams) {\r\n super('SmoFormattingManager');\r\n if (typeof (params) === 'undefined') {\r\n params = {};\r\n }\r\n this.measureFormats = {};\r\n this.partIndex = SmoFormattingManager.forScore;\r\n if (typeof (params.partIndex) !== 'undefined') {\r\n this.partIndex = params.partIndex;\r\n }\r\n if (typeof (params.measureFormats) !== 'undefined' && params.measureFormats.length) {\r\n params.measureFormats.forEach((format) => {\r\n // 0 is default value, so fix case of first measure\r\n if (typeof(format.measureIndex) !== 'number') {\r\n format.measureIndex = 0;\r\n }\r\n this.measureFormats[format.measureIndex] = new SmoMeasureFormat(format);\r\n });\r\n }\r\n }\r\n /**\r\n * Update the measure format for the measure at the given index\r\n * @param format \r\n */\r\n updateMeasureFormat(format: SmoMeasureFormat) {\r\n this.measureFormats[format.measureIndex] = format;\r\n }\r\n /**\r\n * Update the measure format based on the format of a given measure\r\n * @param measure \r\n */\r\n updateFormat(measure: SmoMeasure) {\r\n if (this.measureFormats[measure.measureNumber.measureIndex]) {\r\n measure.format = this.measureFormats[measure.measureNumber.measureIndex];\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n }\r\n serialize(): SmoMeasureFormatParamsSer[] {\r\n const rv: SmoMeasureFormatParamsSer[] = [];\r\n const keys = Object.keys(this.measureFormats);\r\n keys.forEach((key: any) => {\r\n if (!this.measureFormats[key].isDefault) {\r\n rv.push(this.measureFormats[key].serialize());\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport type SmoAudioPlayerType = 'sampler' | 'synthesizer';\r\n/**\r\n * Constructor parameters for audio player\r\n */\r\nexport interface SmoAudioPlayerParameters {\r\n playerType?: SmoAudioPlayerType,\r\n waveform?: OscillatorType,\r\n reverbEnable?: boolean,\r\n reverbDelay?: number,\r\n reverbDecay?: number\r\n}\r\n\r\n/**\r\n * web audio API defines this\r\n * @param otype \r\n * @returns \r\n */\r\nexport function IsOscillatorType(otype: OscillatorType | string): otype is OscillatorType {\r\n return ['sine', 'square', 'sawtooth', 'triangle', 'custom'].findIndex((x) => x === otype) >= 0;\r\n}\r\n/**\r\n * Audio playback parameters. Just fun stuff.\r\n * @category SmoModifier\r\n */\r\nexport class SmoAudioPlayerSettings extends SmoScoreModifierBase {\r\n static get defaults(): SmoAudioPlayerParameters {\r\n return ({\r\n playerType: 'sampler',\r\n waveform: 'sine',\r\n reverbEnable: true,\r\n reverbDelay: 0.5,\r\n reverbDecay: 2\r\n });\r\n }\r\n static get attributes() {\r\n return ['playerType', 'waveform', 'reverbEnable', 'reverbDelay', 'reverbDecay'];\r\n }\r\n\r\n playerType: SmoAudioPlayerType = 'sampler';\r\n waveform: OscillatorType = 'sine';\r\n reverbEnable: boolean = true;\r\n reverbDelay: number = 0.2;\r\n reverbDecay: number = 0.5;\r\n constructor(params: SmoAudioPlayerParameters) {\r\n super('SmoAudioPlayerSettings');\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, SmoAudioPlayerSettings.defaults, this);\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, params, this);\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoAudioPlayerSettings.defaults, SmoAudioPlayerSettings.attributes, this, params);\r\n params.ctor = 'SmoAudioPlayerSettings';\r\n return params;\r\n }\r\n}\r\nexport type ScaledPageAttributes = 'leftMargin' | 'rightMargin' | 'topMargin' | 'bottomMargin' | 'interGap' | 'intraGap';\r\n/**\r\n * Constructor parameters for {@link SmoPageLayout}, part of {@link SmoLayoutManager}\r\n * @category SmoParameters, serialization\r\n */\r\nexport interface SmoPageLayoutParams {\r\n leftMargin: number,\r\n rightMargin: number,\r\n topMargin: number,\r\n bottomMargin: number,\r\n interGap: number,\r\n intraGap: number\r\n}\r\nexport interface SmoPageLayoutParamsSer {\r\n\r\n}\r\n/**\r\n * Define margins and other layout information associated with a specific page, and may\r\n * be different on different pages.\r\n * @category SmoModifier\r\n */\r\nexport class SmoPageLayout extends SmoScoreModifierBase {\r\n static get defaults(): SmoPageLayoutParams {\r\n return JSON.parse(JSON.stringify({\r\n leftMargin: 30,\r\n rightMargin: 30,\r\n topMargin: 144,\r\n bottomMargin: 72,\r\n interGap: 30,\r\n intraGap: 10\r\n }));\r\n }\r\n static get attributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n leftMargin: number = 30;\r\n rightMargin: number = 30;\r\n topMargin: number = 40;\r\n bottomMargin: number = 40;\r\n interGap: number = 30;\r\n intraGap: number = 10;\r\n constructor(params: SmoPageLayoutParams) {\r\n super('SmoPageLayout');\r\n this.leftMargin = params.leftMargin;\r\n this.rightMargin = params.rightMargin;\r\n this.topMargin = params.topMargin;\r\n this.bottomMargin = params.bottomMargin;\r\n this.interGap = params.interGap;\r\n this.intraGap = params.intraGap;\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoPageLayout.defaults, SmoPageLayout.attributes, this, params);\r\n params.ctor = 'SmoPageLayout';\r\n return params;\r\n }\r\n}\r\nexport type ScaledGlobalAttributes = 'pageWidth' | 'pageHeight';\r\nexport type GlobalLayoutAttributes = 'pageWidth' | 'pageHeight' | 'noteSpacing' | 'svgScale' | 'zoomScale' | 'proportionality' | 'maxMeasureSystem';\r\nexport const GlobalLayoutAttributesArray: GlobalLayoutAttributes[] = ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'proportionality', 'maxMeasureSystem'];\r\n/**\r\n * Global layout are parameters that determine the layout of the whole score, because they affect the containing svg element\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoGlobalLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n proportionality: number,\r\n maxMeasureSystem: number\r\n}\r\n\r\n/**\r\n * Used to create {@link SmoLayoutManagerParams}\r\n * @category {SmoParams}\r\n */\r\nexport interface ScaledPageLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n interGap: number;\r\n intraGap: number;\r\n pages: number;\r\n maxMeasureSystem: number;\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoLayoutManager}\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoLayoutManagerParams {\r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayout[]\r\n}\r\nexport interface SmoLayoutManagerParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string; \r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayoutParams[]\r\n}\r\nfunction isSmoLayoutManagerParamsSer(params: Partial): params is SmoLayoutManagerParamsSer {\r\n if (!params.ctor || params.ctor !== 'SmoLayoutManager') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Storage and utilities for layout information in the score. Each\r\n * manager has one set of page height/width, since svg element\r\n * must have single length/width and viewbox.\r\n * Each page can have different margins.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLayoutManager extends SmoScoreModifierBase {\r\n static get defaultLayout(): SmoGlobalLayout {\r\n return {\r\n svgScale: 0.55,\r\n zoomScale: 2.0,\r\n noteSpacing: 1.0,\r\n pageWidth: 8 * 96 + 48,\r\n pageHeight: 11 * 96,\r\n proportionality: 5,\r\n maxMeasureSystem: 0\r\n };\r\n }\r\n static get defaults(): SmoLayoutManagerParams {\r\n return {\r\n globalLayout: JSON.parse(JSON.stringify(SmoLayoutManager.defaultLayout)),\r\n pageLayouts: []\r\n };\r\n }\r\n static get attributes(): GlobalLayoutAttributes[] {\r\n return ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'maxMeasureSystem'];\r\n }\r\n // Attributes that are scaled by svgScale\r\n /* static get scalableAttributes(): Global {\r\n return ['pageWidth', 'pageHeight'];\r\n }*/\r\n static get scaledPageAttributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n static get scaledGlobalAttributes(): ScaledGlobalAttributes[] {\r\n return ['pageWidth', 'pageHeight'];\r\n }\r\n static areLayoutsEqual(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n static isZoomChange(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr] && attr !== 'zoomScale') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Adjust zoom width so the score takes up the whole score area\r\n */\r\n zoomToWidth(screenWidth: number) {\r\n const curWidth = this.globalLayout.pageWidth * this.globalLayout.svgScale;\r\n this.globalLayout.zoomScale = ((screenWidth - 350) / curWidth) * this.globalLayout.svgScale; // magic 350 for left controls....TODO standardize this\r\n }\r\n static getScaledPageLayout(globalLayout: SmoGlobalLayout, pageLayout: SmoPageLayout, pages: number): ScaledPageLayout {\r\n const rv: Partial = {};\r\n SmoLayoutManager.scaledPageAttributes.forEach((attr: ScaledPageAttributes) => {\r\n rv[attr] = pageLayout[attr] / globalLayout.svgScale;\r\n });\r\n SmoLayoutManager.scaledGlobalAttributes.forEach((attr: ScaledGlobalAttributes) => {\r\n rv[attr] = globalLayout[attr] / globalLayout.svgScale;\r\n });\r\n // Note spacing is relative, so * it and not divide\r\n rv.noteSpacing = globalLayout.noteSpacing * globalLayout.svgScale;\r\n rv.svgScale = globalLayout.svgScale;\r\n rv.zoomScale = globalLayout.zoomScale;\r\n rv.maxMeasureSystem = globalLayout.maxMeasureSystem;\r\n \r\n return rv as ScaledPageLayout;\r\n }\r\n globalLayout: SmoGlobalLayout;\r\n pageLayouts: SmoPageLayout[] = [];\r\n constructor(params: SmoLayoutManagerParams) {\r\n super('SmoLayoutManager');\r\n if (typeof(params.globalLayout.maxMeasureSystem) === 'undefined') {\r\n params.globalLayout.maxMeasureSystem = SmoLayoutManager.defaultLayout.maxMeasureSystem;\r\n }\r\n this.globalLayout = JSON.parse(JSON.stringify(params.globalLayout));\r\n if (params.pageLayouts.length) {\r\n params.pageLayouts.forEach((plp) => {\r\n const pageParams: SmoPageLayoutParams = SmoPageLayout.defaults;\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (plp[attr]) !== 'undefined') {\r\n pageParams[attr] = plp[attr];\r\n }\r\n });\r\n this.pageLayouts.push(new SmoPageLayout(pageParams));\r\n });\r\n } else {\r\n this.pageLayouts.push(new SmoPageLayout(SmoPageLayout.defaults));\r\n }\r\n }\r\n trimPages(pageCount: number) {\r\n if (pageCount < this.pageLayouts.length - 1) {\r\n this.pageLayouts = this.pageLayouts.slice(0, pageCount + 1);\r\n }\r\n }\r\n getZoomScale() {\r\n return this.globalLayout.zoomScale;\r\n }\r\n serialize(): SmoLayoutManagerParamsSer {\r\n const rv: Partial = { ctor: 'SmoLayoutManager' };\r\n rv.pageLayouts = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.pageLayouts!.push(pl.serialize());\r\n });\r\n rv.globalLayout = JSON.parse(JSON.stringify(this.globalLayout));\r\n if (!isSmoLayoutManagerParamsSer(rv)) {\r\n throw 'bad layout manager ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateGlobalLayout(params: SmoGlobalLayout) {\r\n SmoLayoutManager.attributes.forEach((attr: string) => {\r\n if (typeof ((params as any)[attr]) !== 'undefined') {\r\n (this.globalLayout as any)[attr] = (params as any)[attr];\r\n }\r\n });\r\n }\r\n // ### addToPageLayouts\r\n // Make sure the next page has a layout. If not, copy settings from\r\n // previous page.\r\n addToPageLayouts(pageNum: number) {\r\n const lastLayout = this.pageLayouts[this.pageLayouts.length - 1];\r\n if (this.pageLayouts.length <= pageNum) {\r\n this.pageLayouts.push(new SmoPageLayout(lastLayout));\r\n }\r\n }\r\n getGlobalLayout(): SmoGlobalLayout {\r\n return JSON.parse(JSON.stringify(this.globalLayout));\r\n }\r\n // Return a deep copy of the page parameters, adjusted for the global scale.\r\n getScaledPageLayout(pageIndex: number): ScaledPageLayout {\r\n return SmoLayoutManager.getScaledPageLayout(this.globalLayout, this.pageLayouts[pageIndex], this.pageLayouts.length);\r\n }\r\n getPageLayout(pageIndex: number): SmoPageLayout {\r\n return new SmoPageLayout(this.pageLayouts[pageIndex]);\r\n }\r\n getPageLayouts(): SmoPageLayout[] {\r\n const rv: SmoPageLayout[] = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.push(new SmoPageLayout(pl));\r\n });\r\n return rv;\r\n }\r\n updatePage(pageLayout: SmoPageLayout, pageIndex: number) {\r\n if (this.pageLayouts.length > pageIndex) {\r\n this.pageLayouts[pageIndex] = new SmoPageLayout(pageLayout);\r\n }\r\n }\r\n}\r\n/**\r\n * constructor parameters for system groups (groupings of staves in the score)\r\n * @param leftConnector\r\n * @param rightConnector\r\n * @param mapType\r\n * @param text\r\n * @param shortText\r\n * @param justify\r\n * @param startSelector not used\r\n * @param endSelector not used\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemGroupParams {\r\n /**\r\n * bracket etc.\r\n */\r\n leftConnector: number,\r\n /**\r\n * bracket etc.\r\n */\r\n rightConnector: number,\r\n /**\r\n * future, score groups can be different for different parts of the score\r\n */\r\n mapType: number,\r\n /**\r\n * whether to justify the notes in the group\r\n */\r\n justify: boolean,\r\n /**\r\n * if mapped to a range, start\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * if mapped to a range, end\r\n */\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoSystemGroupParamsSer extends SmoSystemGroupParams{\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoSystemGroupParamsSer(params: Partial): params is SmoSystemGroupParamsSer {\r\n if (params.ctor === 'SmoSystemGroup') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * System group is the grouping of staves into a system.\r\n * @category SmoModifier\r\n * */\r\nexport class SmoSystemGroup extends SmoScoreModifierBase {\r\n static get connectorTypes(): Record {\r\n return { brace: 0, bracket: 1, single: 2, double: 3 };\r\n }\r\n static get mapTypes(): Record {\r\n return { allMeasures: 0, range: 1 };\r\n }\r\n static get attributes(): string[] {\r\n return ['leftConnector', 'rightConnector', 'text', 'shortText', 'justify',\r\n 'startSelector', 'endSelector', 'mapType'];\r\n }\r\n static get defaults(): SmoSystemGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n leftConnector: SmoSystemGroup.connectorTypes.single,\r\n rightConnector: SmoSystemGroup.connectorTypes.single,\r\n mapType: SmoSystemGroup.mapTypes.allMeasures,\r\n justify: true,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static isSystemGroup(modifier: SmoSystemGroup | SmoModifierBase): modifier is SmoSystemGroup {\r\n return modifier.ctor === 'SmoSystemGroup';\r\n }\r\n leftConnector: number = SmoSystemGroup.connectorTypes.single;\r\n rightConnector: number = SmoSystemGroup.connectorTypes.single;\r\n mapType: number = SmoSystemGroup.mapTypes.allMeasures;\r\n text: string = '';\r\n shortText: string = '';\r\n justify: boolean = true;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n attrs: SmoAttrs;\r\n constructor(params: SmoSystemGroupParams) {\r\n super('SmoSystemGroup');\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, SmoSystemGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, params, this);\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemGroup'\r\n };\r\n }\r\n stavesOverlap(group: SmoSystemGroup) {\r\n return (this.startSelector.staff >= group.startSelector.staff && this.startSelector.staff <= group.endSelector.staff) ||\r\n (this.endSelector.staff >= group.startSelector.staff && this.endSelector.staff <= group.endSelector.staff);\r\n }\r\n measuresOverlap(group: SmoSystemGroup) {\r\n return this.stavesOverlap(group) &&\r\n ((this.startSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.startSelector.measure) ||\r\n (this.endSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.endSelector.measure));\r\n }\r\n overlaps(group: SmoSystemGroup) {\r\n return (this.stavesOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.allMeasures) ||\r\n (this.measuresOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.range);\r\n }\r\n serialize(): SmoSystemGroupParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSystemGroup.defaults, SmoSystemGroup.attributes, this, params);\r\n params.ctor = 'SmoSystemGroup';\r\n if (!isSmoSystemGroupParamsSer(params)) {\r\n throw 'bad system group ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Score Text is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, headers, footers. Score text is a single block of text.\r\n * TextGroup is 1 or more ScoreText blocks arranged in some way.\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoScoreModifierBase, ScaledPageLayout } from './scoreModifiers';\r\nimport { SmoAttrs, SmoModifierBase } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\n\r\n/**\r\n * Parameters for a single text block. Text blocks make up a text group.\r\n * @category SmoParams\r\n */\r\nexport interface SmoScoreTextParams {\r\n /**\r\n * x location of font\r\n */\r\n x: number,\r\n /**\r\n * location of font\r\n */\r\n y: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n width: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n height: number,\r\n /**\r\n * The text content\r\n */\r\n text: string,\r\n /**\r\n * Font of the text\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * defaults to black\r\n */\r\n fill?: string,\r\n classes?: string,\r\n}\r\n/**\r\n * serialization\r\n */\r\nexport interface SmoScoreTextSer extends SmoScoreTextParams {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoScoreTextSer(params: Partial): params is SmoScoreTextSer {\r\n if (!(params?.ctor === 'SmoScoreText')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Identify some text in the score, not associated with any musical element, like page\r\n * decorations, titles etc.\r\n * Note: score text is always contained in a text group. So this isn't directly accessed\r\n * by score, but we keep the collection in score for backwards-compatibility\r\n * @category SmoModifier\r\n * @internal\r\n */\r\nexport class SmoScoreText extends SmoScoreModifierBase {\r\n // convert EM to a number, or leave as a number etc.\r\n static fontPointSize(size: string | number | undefined) {\r\n let rv = 12;\r\n const szz: string | number = size ?? 14;\r\n if (typeof (szz) === 'number') {\r\n return szz;\r\n }\r\n const ptString = szz.substring(0, szz.length - 2);\r\n rv = parseFloat(ptString);\r\n if (szz.indexOf('em') > 0) {\r\n rv *= 14;\r\n } else if (szz.indexOf('px') > 0) {\r\n rv *= (96.0 / 72.0);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert a numeric or string weight into either 'bold' or 'normal'\r\n * @param fontWeight \r\n * @returns \r\n */\r\n static weightString(fontWeight: string | number | undefined): string { \r\n let rv: string = 'normal';\r\n if (fontWeight) {\r\n const numForm = parseInt(fontWeight.toString(), 10);\r\n if (isNaN(numForm)) {\r\n rv = fontWeight.toString();\r\n } else if (numForm > 500) {\r\n rv = 'bold';\r\n }\r\n }\r\n return rv;\r\n }\r\n static familyString(fam: string | undefined): string {\r\n if (!fam) {\r\n return SmoScoreText.fontFamilies.sansSerif;\r\n }\r\n return fam;\r\n }\r\n static get fontFamilies(): Record {\r\n return {\r\n serif: 'Merriweather', sansSerif: 'Roboto,sans-serif', monospace: 'monospace', cursive: 'cursive',\r\n times: 'Merriweather', arial: 'Arial'\r\n };\r\n }\r\n static get parameters() {\r\n return ['x', 'y', 'width', 'height', 'text', 'fontInfo', 'fill', 'classes']\r\n }\r\n static get defaults(): SmoScoreTextParams {\r\n return JSON.parse(JSON.stringify({\r\n x: 15,\r\n y: 15,\r\n width: 0,\r\n height: 0,\r\n text: 'Smoosic',\r\n fontInfo: {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n }));\r\n }\r\n static deserialize(jsonObj: SmoScoreTextSer) {\r\n const params = SmoScoreText.defaults;\r\n smoSerialize.serializedMerge(SmoScoreText.parameters, jsonObj, params);\r\n if (typeof (params.fontInfo.size === 'string')) {\r\n params.fontInfo.size = SmoScoreText.fontPointSize(params.fontInfo.size);\r\n }\r\n return new SmoScoreText(params);\r\n }\r\n x: number = 15;\r\n y: number = 15;\r\n width: number = 0;\r\n height: number = 0;\r\n text: string = 'Smoosic';\r\n fontInfo: FontInfo = {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n fill: string = 'black';\r\n rotate: number = 0;\r\n classes: string = 'score-text';\r\n boxModel: string = 'none';\r\n scaleX: number = 1.0;\r\n scaleY: number = 1.0;\r\n translateX: number = 0;\r\n translateY: number = 0;\r\n pagination: string = 'once';\r\n position: string = 'custom';\r\n autoLayout: boolean = false; // set to true if one of the pre-canned positions are used.\r\n\r\n getText() {\r\n return this.text;\r\n }\r\n estimateWidth(): number {\r\n let i = 0;\r\n let rv = 0;\r\n const textFont = TextFormatter.create({\r\n family: this.fontInfo.family,\r\n size: this.fontInfo.size,\r\n weight: this.fontInfo.weight,\r\n style: this.fontInfo.style\r\n });\r\n textFont.setFontSize(SmoScoreText.fontPointSize(this.fontInfo.size));\r\n for (i = 0; i < this.text.length; ++i) {\r\n rv += textFont.getWidthForTextInPx(this.text[i]);\r\n }\r\n return rv;\r\n }\r\n tryParseUnicode() {\r\n this.text = smoSerialize.tryParseUnicode(this.text);\r\n }\r\n\r\n offsetX(offset: number) {\r\n this.x += offset;\r\n }\r\n offsetY(offset: number) {\r\n this.y += offset;\r\n }\r\n\r\n serialize(): SmoScoreTextSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoScoreText.defaults, SmoScoreText.attributes, this, params);\r\n params.ctor = 'SmoScoreText';\r\n if (!isSmoScoreTextSer(params)) {\r\n throw ('bad score text ')\r\n }\r\n return params;\r\n }\r\n static get attributes(): string[] {\r\n return ['x', 'y', 'text', 'pagination', 'position', 'fontInfo', 'classes',\r\n 'boxModel', 'justification', 'fill', 'width', 'height', 'scaleX', 'scaleY',\r\n 'translateX', 'translateY', 'autoLayout'];\r\n }\r\n constructor(parameters: SmoScoreTextParams) {\r\n super('SmoScoreText');\r\n let rx = '';\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, SmoScoreText.defaults, this);\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, parameters, this);\r\n\r\n if (!this.classes) {\r\n this.classes = '';\r\n }\r\n if (this.classes.indexOf(this.attrs.id) < 0) {\r\n this.classes += ' ' + this.attrs.id;\r\n }\r\n const weight = parameters.fontInfo ? parameters.fontInfo.weight : 'normal';\r\n this.fontInfo.weight = SmoScoreText.weightString(weight ?? 'normal');\r\n if (this.text) {\r\n rx = smoSerialize.tryParseUnicode(this.text);\r\n this.text = rx;\r\n }\r\n }\r\n}\r\n/**\r\n * Each text block has the text data itself and some data about how it's placed\r\n */\r\nexport interface SmoTextBlock {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreText,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number,\r\n /**\r\n * run-time flag\r\n */\r\n activeText: boolean\r\n}\r\nexport interface SmoTextBlockSer {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreTextSer,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number\r\n}\r\n/**\r\n * Used to place text imported from other formats, e.g. music xml\r\n */\r\nexport interface SmoTextPlacement {\r\n fontFamily: string,\r\n fontSize: number,\r\n xPlacement: number,\r\n yOffset: number,\r\n}\r\n/**\r\n * Constructor parameters for a text group, a block of text in Smoosic\r\n * @param justification one of {@link SmoScoreText.justifications}\r\n * @param relativePosition relative position to other text groups\r\n * @param pagination indicates if this text is paginated (goes on each page)\r\n * @param spacing distance between blocks\r\n * @param attachToSelector acts like 'note text' if attached to a note, otherwise\r\n * the position is based on score position, or page position if paginated\r\n * @param selector if attached, the selector in question\r\n * @param textBlocks the actual textBlocks of text - a score text along with a placement parameter\r\n * @category SmoParams\r\n */\r\nexport interface SmoTextGroupParams {\r\n justification: number,\r\n relativePosition: number,\r\n pagination: number,\r\n purpose: number,\r\n spacing: number,\r\n musicXOffset: number,\r\n musicYOffset: number,\r\n attachToSelector: boolean,\r\n selector: SmoSelector,\r\n textBlocks: SmoTextBlock[]\r\n}\r\n\r\n/**\r\n * The serializable parts of a text group.\r\n * @category serialization\r\n */\r\nexport interface SmoTextGroupParamsSer {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n /**\r\n * ID so we can identify which text this is in dialogs, UI\r\n */\r\n attrs: SmoAttrs;\r\n /**\r\n * justification within the block\r\n */\r\n justification?: number,\r\n /**\r\n * position (above, left, right etc)\r\n */\r\n relativePosition?: number,\r\n /**\r\n * pagination for headers, footers\r\n */\r\n pagination?: number,\r\n /**\r\n * spacing between blocks, future\r\n */\r\n spacing?: number,\r\n /**\r\n * true if the text is attached to a note.\r\n */\r\n attachToSelector?: boolean,\r\n /**\r\n * defined if the selector is attached to a note\r\n */\r\n selector?: SmoSelector,\r\n /**\r\n * the individual text blocks\r\n */\r\n textBlocks: SmoTextBlockSer[];\r\n}\r\nfunction isSmoTextGroupParamsSer(params: Partial): params is SmoTextGroupParamsSer {\r\n if (!(params?.ctor === 'SmoTextGroup')) {\r\n return false;\r\n }\r\n if (!(typeof(params.attrs?.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isTextBlockSer(params: Partial): params is SmoTextBlockSer {\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!(typeof(params.position) === 'number')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Suggestion for text purpose, maybe used to find a match..maybe not used at all\r\n */\r\nexport type SmoTextGroupPurpose = 'NONE' |'TITLE' | 'SUBTITLE' | 'COMPOSER' | 'COPYRIGHT';\r\n\r\n/**\r\n * A grouping of text that can be used as a block for\r\n * justification, alignment etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTextGroup extends SmoScoreModifierBase {\r\n static get justifications() {\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n CENTER: 3\r\n };\r\n }\r\n static get paginations() {\r\n return { EVERY: 1, EVENT: 2, ODD: 3, ONCE: 4, SUBSEQUENT: 5 };\r\n }\r\n\r\n // The position of block n relative to block n-1. Each block\r\n // has it's own position. Justification is inter-block.\r\n static get relativePositions() {\r\n return { ABOVE: 1, BELOW: 2, LEFT: 3, RIGHT: 4 };\r\n }\r\n\r\n static get purposes(): Record {\r\n return {\r\n NONE: 1, TITLE: 2, SUBTITLE: 3, COMPOSER: 4, COPYRIGHT: 5\r\n };\r\n }\r\n static get attributes() {\r\n return ['textBlocks', 'justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n }\r\n static get nonTextAttributes() {\r\n return ['justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n\r\n }\r\n static isTextGroup(modifier: SmoTextGroup | SmoModifierBase): modifier is SmoTextGroup {\r\n return modifier.ctor === 'SmoTextGroup';\r\n }\r\n static get purposeToFont(): Record {\r\n const rv: Record = {};\r\n rv[SmoTextGroup.purposes.TITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 18,\r\n xPlacement: 0.5,\r\n yOffset: 4\r\n };\r\n rv[SmoTextGroup.purposes.SUBTITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 16,\r\n xPlacement: 0.5,\r\n yOffset: 20,\r\n };\r\n rv[SmoTextGroup.purposes.COMPOSER] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.8,\r\n yOffset: 10\r\n };\r\n rv[SmoTextGroup.purposes.COPYRIGHT] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.5,\r\n yOffset: -12\r\n };\r\n return rv;\r\n }\r\n // ### createTextForLayout\r\n // Create a specific score text type (title etc.) based on the supplied\r\n // score layout\r\n static createTextForLayout(purpose: number, text: string, layout: ScaledPageLayout) {\r\n let x = 0;\r\n const textAttr = SmoTextGroup.purposeToFont[purpose];\r\n const pageWidth = layout.pageWidth;\r\n const pageHeight = layout.pageHeight;\r\n const bottomMargin = layout.bottomMargin;\r\n const topMargin = layout.topMargin;\r\n x = textAttr.xPlacement > 0 ? pageWidth * textAttr.xPlacement\r\n : pageWidth - (pageWidth * textAttr.xPlacement);\r\n const y = textAttr.yOffset > 0 ?\r\n topMargin + textAttr.yOffset :\r\n pageHeight + textAttr.yOffset - bottomMargin;\r\n const defaults: SmoScoreTextParams = SmoScoreText.defaults;\r\n const st = new SmoScoreText({\r\n text, x, y, width: defaults.width, height: defaults.height,\r\n fontInfo: { family: textAttr.fontFamily, size: textAttr.fontSize, weight: 'normal' }\r\n });\r\n const width = st.estimateWidth();\r\n x -= width / 2;\r\n const params = SmoTextGroup.defaults;\r\n params.textBlocks = [{ text: st, position: SmoTextGroup.relativePositions.RIGHT, activeText: false }];\r\n params.purpose = purpose;\r\n const tg = new SmoTextGroup(params);\r\n return tg;\r\n }\r\n\r\n static get defaults(): SmoTextGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n textBlocks: [],\r\n justification: SmoTextGroup.justifications.LEFT,\r\n relativePosition: SmoTextGroup.relativePositions.RIGHT,\r\n pagination: SmoTextGroup.paginations.ONCE,\r\n purpose: SmoTextGroup.purposes.NONE,\r\n spacing: 0,\r\n attachToSelector: false,\r\n selector: null,\r\n musicXOffset: 0,\r\n musicYOffset: 0\r\n }));\r\n }\r\n justification: number = SmoTextGroup.justifications.LEFT;\r\n relativePosition: number = SmoTextGroup.relativePositions.RIGHT;\r\n pagination: number = SmoTextGroup.paginations.ONCE;\r\n purpose: number = SmoTextGroup.purposes.NONE;\r\n spacing: number = 0;\r\n attachToSelector: boolean = false;\r\n selector?: SmoSelector;\r\n musicXOffset: number = 0;\r\n musicYOffset: number = 0;\r\n elements: SVGSVGElement[] = [];\r\n textBlocks: SmoTextBlock[] = [];\r\n edited: boolean = false; // indicates not edited this session\r\n skipRender: boolean = false; // don't render if it is being edited \r\n static deserialize(jObj: SmoTextGroupParamsSer) {\r\n const textBlocks: SmoTextBlock[] = [];\r\n const params: any = {};\r\n const jObjLegacy: any = jObj;\r\n // handle parameter name change\r\n if (jObjLegacy.blocks) {\r\n jObj.textBlocks = jObjLegacy.blocks;\r\n }\r\n\r\n // Create new scoreText object for the text blocks\r\n jObj.textBlocks.forEach((st: any) => {\r\n const tx = SmoScoreText.deserialize(st.text);\r\n textBlocks.push({ text: tx, position: st.position, activeText: false });\r\n });\r\n // fill in the textBlock configuration\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, jObj, params);\r\n params.textBlocks = textBlocks;\r\n return new SmoTextGroup(params);\r\n }\r\n static deserializePreserveId(jObj: any) {\r\n const rv = SmoTextGroup.deserialize(jObj);\r\n if (jObj.attrs.id) {\r\n rv.attrs.id = jObj.attrs.id;\r\n }\r\n return rv;\r\n }\r\n // ### getPagedTextGroups\r\n // If this text is repeated on page, create duplicates for each page, and\r\n // resolve page numbers;\r\n static getPagedTextGroups(tg: SmoTextGroup, pages: number, pageHeight: number): SmoTextGroup[] {\r\n const rv: SmoTextGroup[] = [];\r\n let i: number = 0;\r\n if (tg.pagination === SmoTextGroup.paginations.ONCE) {\r\n rv.push(tg);\r\n return rv;\r\n }\r\n for (i = 0; i < pages; ++i) {\r\n const ix: number = i;\r\n const nblocks: any = [];\r\n // deep copy the blocks so the page offsets don't bleed into\r\n // original.\r\n tg.textBlocks.forEach((block) => {\r\n const nscoreText = new SmoScoreText(block.text);\r\n nblocks.push({\r\n text: nscoreText, position: block.position\r\n });\r\n });\r\n const params: SmoTextGroupParams = {} as SmoTextGroupParams;\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, tg, params);\r\n params.textBlocks = nblocks;\r\n const ngroup: SmoTextGroup = new SmoTextGroup(params);\r\n ngroup.textBlocks.forEach((block) => {\r\n const xx = block.text;\r\n xx.classes = 'score-text ' + xx.attrs.id;\r\n xx.text = xx.text.replace('###', (ix + 1).toString()); /// page number\r\n xx.text = xx.text.replace('@@@', pages.toString()); /// page number\r\n xx.y += pageHeight * ix;\r\n });\r\n if (tg.logicalBox) {\r\n ngroup.logicalBox = JSON.parse(JSON.stringify(tg.logicalBox));\r\n ngroup.logicalBox!.y += pageHeight * i;\r\n }\r\n rv.push(ngroup);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoTextGroupParamsSer {\r\n const params: Partial = {\r\n textBlocks: []\r\n };\r\n smoSerialize.serializedMergeNonDefault(SmoTextGroup.defaults, SmoTextGroup.nonTextAttributes, this, params);\r\n this.textBlocks.forEach((blk: SmoTextBlock) => {\r\n \r\n const blockSer: Partial = {\r\n position: blk.position\r\n }\r\n\r\n blockSer.text = blk.text.serialize();\r\n if (!isTextBlockSer(blockSer)) {\r\n throw ('bad text block ' + JSON.stringify(blockSer));\r\n }\r\n params.textBlocks!.push(blockSer);\r\n });\r\n params.ctor = 'SmoTextGroup';\r\n params.attrs = JSON.parse(JSON.stringify(this.attrs));\r\n if (!isSmoTextGroupParamsSer(params)) {\r\n throw('bad text group ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n /* _isScoreText(st: ) {\r\n return st.ctor && st.ctor === 'SmoScoreText';\r\n } */\r\n constructor(params: SmoTextGroupParams) {\r\n super('SmoTextGroup');\r\n if (typeof (params) === 'undefined') {\r\n params = {} as SmoTextGroupParams;\r\n }\r\n this.textBlocks = [];\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, SmoTextGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, params, this);\r\n if (params.textBlocks) {\r\n params.textBlocks.forEach((block: SmoTextBlock) => {\r\n this.textBlocks.push(block);\r\n });\r\n }\r\n }\r\n scaleText(scale: number) {\r\n this.musicXOffset *= scale;\r\n this.musicYOffset *= scale;\r\n this.textBlocks.forEach((block: SmoTextBlock) => {\r\n block.text.x *= scale;\r\n block.text.y *= scale;\r\n });\r\n }\r\n // ### tryParseUnicode\r\n // Try to parse unicode strings.\r\n tryParseUnicode() {\r\n this.textBlocks.forEach((tb) => {\r\n tb.text.tryParseUnicode();\r\n });\r\n }\r\n estimateWidth() {\r\n let rv = 0;\r\n this.textBlocks.forEach((tb) => {\r\n rv += tb.text.estimateWidth();\r\n });\r\n return rv;\r\n }\r\n // avoid saving text that can't be deleted\r\n isTextVisible() {\r\n let rv = true;\r\n if (this.attachToSelector) {\r\n return true;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n if (block.text.x < 0 || block.text.y < 0) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### setActiveBlock\r\n // let the UI know which block is being edited. Parameter null means reset all\r\n setActiveBlock(scoreText: SmoScoreText | null) {\r\n this.textBlocks.forEach((block) => {\r\n if (scoreText != null && block.text.attrs.id === scoreText.attrs.id) {\r\n block.activeText = true;\r\n } else {\r\n block.activeText = false;\r\n }\r\n });\r\n }\r\n // For editing, keep track of the active text block.\r\n getActiveBlock() {\r\n const rv = this.textBlocks.find((block) => block.activeText === true);\r\n if (typeof (rv) !== 'undefined') {\r\n return rv.text;\r\n }\r\n return this.textBlocks[0].text;\r\n }\r\n setRelativePosition(position: number) {\r\n this.textBlocks.forEach((block) => {\r\n block.position = position;\r\n });\r\n this.relativePosition = position;\r\n }\r\n firstBlock() {\r\n return this.textBlocks[0].text;\r\n }\r\n indexOf(scoreText: SmoScoreText) {\r\n return this.textBlocks.findIndex((block) => block.text.attrs.id === scoreText.attrs.id);\r\n }\r\n addScoreText(scoreText: SmoScoreText, position: number = SmoTextGroup.relativePositions.LEFT) {\r\n this.textBlocks.push({ text: scoreText, position, activeText: false });\r\n }\r\n ul() {\r\n const rv = { x: 0, y: 0 };\r\n this.textBlocks.forEach((block) => {\r\n rv.x = block.text.x > rv.x ? block.text.x : rv.x;\r\n rv.y = block.text.y > rv.y ? block.text.y : rv.y;\r\n });\r\n return rv;\r\n }\r\n removeBlock(scoreText: SmoScoreText) {\r\n const bbid = (typeof (scoreText) === 'string') ? scoreText : scoreText.attrs.id;\r\n const ix = this.textBlocks.findIndex((bb) => bb.text.attrs.id === bbid);\r\n this.textBlocks.splice(ix, 1);\r\n }\r\n offsetX(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicXOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetX(offset);\r\n });\r\n }\r\n offsetY(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicYOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetY(offset);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to modify a staff or system. Some staff modifiers can span multiple\r\n * staves, so it can be a little arbitrary what is a score vs. staff modifier. But\r\n * generally, a staff modifier is anything that has a beginning and end {@link SmoSelector}\r\n * @module /smo/data/staffModifiers\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoNote } from './note';\r\nimport { SmoAttrs, getId, SvgPoint, SmoObjectParams, Clef, SvgBox, SmoModifierBase } from './common';\r\n\r\n/**\r\n * Base class that mostly standardizes the interface and deals with serialization.\r\n * @param ctor constructor for derived class\r\n * @param logicalBox bounding box in SVG coordinates, if rendered\r\n * @param attrs object identification\r\n * @param startSelector where the modifier starts\r\n * @param endSelector where it ends\r\n * @category SmoModifier\r\n * */\r\nexport abstract class StaffModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number = 0;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(params: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + params.ctor);\r\n const fixInstrument = params as any;\r\n if (fixInstrument.subFamily) {\r\n fixInstrument.instrument = fixInstrument.subFamily;\r\n }\r\n const rv = new ctor(params);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\nexport interface StaffModifierBaseSer {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number;\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n}\r\nexport type SoundSustain = 'percussive' | 'sustained';\r\nexport type oscillatorType = 'sample' | 'sine' | 'sawtooth' | 'square' | 'triangle' | 'custom';\r\nexport type oscillatorOptions = 'plucked' | 'bowed' | 'muted' | 'accented' | 'frequency-sweep' | 'na';\r\n/**\r\n * Parameters of an instrument used to create audio nodes\r\n */\r\nexport interface SmoOscillatorInfo {\r\n waveform: oscillatorType,\r\n sustain: SoundSustain,\r\n realOvertones: number[],\r\n imaginaryOvertones: number[],\r\n sample: string | null,\r\n family: string,\r\n instrument: string,\r\n nativeFrequency: number,\r\n dynamic: number,\r\n options: oscillatorOptions[],\r\n minDuration: number,\r\n maxDuration: number\r\n}\r\nexport type SmoOscillatorInfoNumberType = 'minDuration' | 'maxDuration' | 'dynamic' | 'nativeFrequency';\r\nexport type SmoOscillatorInfoNumberArType = 'realOvertones' | 'imaginaryOvertones';\r\nexport type SmoOscillatorInfoStringType = 'family';\r\nexport type SmoOscillatorInfoStringNullType = 'sample';\r\nexport type SmoOscillatorInfoWaveformType = 'waveform';\r\nexport type SmoOscillatorInfoSustainType = 'sustain';\r\nexport type SmoOscillatorInfoOptionsType = 'options';\r\nexport const SmoOscillatorInfoAllTypes = ['minDuration','maxDuration', 'dynamic', 'nativeFrequency', 'realOvertones', 'imaginaryOvertones', 'sample', 'family',\r\n 'waveform', 'sustain', 'options', 'instrument'];\r\n\r\nexport type SmoOscillatorAnyType = SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | oscillatorType | SoundSustain;\r\n \r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoInstrumentParams {\r\n /**\r\n * where instrument starts to take effect\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where instrument changes\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * name, for metadata\r\n */\r\n instrumentName: string,\r\n /**\r\n * woodwind, brass etc.\r\n */\r\n family: string,\r\n /**\r\n * instrument sample\r\n */\r\n instrument: string,\r\n /**\r\n * abbreviation for score\r\n */\r\n abbreviation: string,\r\n /**\r\n * -2 indicates key of Bb\r\n */\r\n keyOffset: number,\r\n /**\r\n * for future\r\n */\r\n midiInstrument: number,\r\n /**\r\n * for future\r\n */\r\n midichannel: number,\r\n /**\r\n * for future\r\n */\r\n midiport: number,\r\n /**\r\n * default clef\r\n */\r\n clef: Clef,\r\n /**\r\n * future, can be used to set sample\r\n */\r\n mutes?: string, \r\n}\r\n\r\n/**\r\n * Serialization of instrument-specific settings, such as sound and key\r\n * @category serialization\r\n */\r\nexport interface SmoInstrumentParamsSer extends SmoInstrumentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoInstrumentParamsSer(params: Partial): params is SmoInstrumentParamsSer {\r\n return params?.ctor === 'SmoInstrument';\r\n}\r\nexport type SmoInstrumentNumParamType = 'keyOffset' | 'midichannel' | 'midiport' | 'midiInstrument';\r\nexport const SmoInstrumentNumParams: SmoInstrumentNumParamType[] = ['keyOffset', 'midichannel', 'midiport', 'midiInstrument'];\r\nexport type SmoInstrumentStringParamType = 'instrumentName' | 'abbreviation' | 'family' | 'instrument';\r\nexport const SmoInstrumentStringParams: SmoInstrumentStringParamType[] = ['instrumentName', 'abbreviation', 'family', 'instrument'];\r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoModifier\r\n */\r\nexport class SmoInstrument extends StaffModifierBase {\r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'keyOffset', 'midichannel', 'midiport', 'instrumentName', 'abbreviation', 'instrument', 'family'];\r\n }\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n instrumentName: string = '';\r\n abbreviation: string = '';\r\n keyOffset: number = 0;\r\n clef: Clef = 'treble';\r\n midiInstrument: number = 1;\r\n midichannel: number;\r\n midiport: number;\r\n family: string;\r\n instrument: string;\r\n articulation?: string;\r\n mutes?: string;\r\n static get defaults(): SmoInstrumentParams {\r\n return JSON.parse(JSON.stringify({\r\n clef: 'treble',\r\n keyOffset: 0,\r\n instrumentName: '',\r\n abbreviation: '',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n midichannel: 0,\r\n midiInstrument: 1,\r\n midiport: 0,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get defaultOscillatorParam(): SmoOscillatorInfo {\r\n return JSON.parse(JSON.stringify({\r\n waveform: 'sample',\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: null,\r\n family: 'none',\r\n instrument: 'none',\r\n nativeFrequency: 440,\r\n dynamic: 100,\r\n options: [],\r\n minDuration: 0,\r\n maxDuration: 0\r\n }));\r\n }\r\n constructor(params: SmoInstrumentParams) {\r\n super('SmoInstrument');\r\n let name = '';\r\n if (typeof ((params as any).instrument) === 'undefined') {\r\n name = params.instrumentName;\r\n } else {\r\n name = (params as any).instrument;\r\n }\r\n this.instrumentName = name;\r\n this.family = params.family;\r\n this.instrument = params.instrument;\r\n this.keyOffset = params.keyOffset;\r\n this.clef = params.clef;\r\n this.midiport = params.midiport;\r\n this.midichannel = params.midichannel;\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n }\r\n serialize(): SmoInstrumentParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoInstrument.defaults, SmoInstrument.attributes, this, params);\r\n params.ctor = 'SmoInstrument';\r\n if (!isSmoInstrumentParamsSer(params)) {\r\n throw ('bad instrument ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n eq(other: SmoInstrument): boolean {\r\n let rv = true;\r\n SmoInstrumentNumParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n SmoInstrumentStringParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SmoInstrumentMeasure {\r\n measureIndex: number,\r\n instrument: SmoInstrumentParams;\r\n}\r\n/**\r\n * constructor params for {@link SmoStaffHairpin}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffHairpinParams {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * Serialized dynamic marking (hairpin)\r\n * @category serialization\r\n */\r\nexport interface SmoStaffHairpinParamsSer extends StaffModifierBaseSer {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffHairpinParamsSer(params: Partial): params is SmoStaffHairpinParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoStaffHairpin')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Also called crescendo etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffHairpin extends StaffModifierBase {\r\n static get editableAttributes() {\r\n return ['xOffsetLeft', 'xOffsetRight', 'yOffset', 'height'];\r\n }\r\n static get defaults(): SmoStaffHairpinParams {\r\n return JSON.parse(JSON.stringify({\r\n xOffsetLeft: -2,\r\n xOffsetRight: 0,\r\n yOffset: -50,\r\n height: 10,\r\n position: SmoStaffHairpin.positions.BELOW,\r\n hairpinType: SmoStaffHairpin.types.CRESCENDO,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n };\r\n }\r\n static get types() {\r\n return {\r\n CRESCENDO: 1,\r\n DECRESCENDO: 2\r\n };\r\n }\r\n static get attributes() {\r\n return ['position', 'startSelector', 'endSelector', 'xOffsetLeft',\r\n 'xOffsetRight', 'yOffset', 'hairpinType', 'height'];\r\n }\r\n xOffsetLeft: number = -2;\r\n xOffsetRight: number = 0;\r\n yOffset: number = -50;\r\n height: number = 10;\r\n position: number = SmoStaffHairpin.positions.BELOW;\r\n hairpinType: number = SmoStaffHairpin.types.CRESCENDO;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffHairpinParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffHairpin.defaults, SmoStaffHairpin.attributes, this, params);\r\n params.ctor = 'SmoStaffHairpin';\r\n if (!isSmoStaffHairpinParamsSer(params)) {\r\n throw 'bad hairpin ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffHairpinParams) {\r\n super('SmoStaffHairpin');\r\n smoSerialize.vexMerge(this, SmoStaffHairpin.defaults);\r\n smoSerialize.filteredMerge(SmoStaffHairpin.attributes, params, this);\r\n // If start/end selector on same note, make sure the hairpin extends\r\n if (SmoSelector.eq(this.startSelector, this.endSelector)) {\r\n if (this.xOffsetRight === SmoStaffHairpin.defaults.xOffsetRight\r\n && this.xOffsetLeft === SmoStaffHairpin.defaults.xOffsetLeft) {\r\n this.xOffsetLeft = -10;\r\n this.xOffsetRight = 10;\r\n }\r\n }\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffHairpin'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * constructor params for {@link SmoStaffTextBracket}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffTextBracketParams {\r\n /**\r\n * the ledger line\r\n */\r\n line: number,\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * serializable bits of SmoStaffTextBracket\r\n * @category serialization\r\n */\r\nexport interface SmoStaffTextBracketParamsSer extends StaffModifierBaseSer{\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n attrs: SmoAttrs;\r\n /**\r\n * the ledger line\r\n */\r\n line: number;\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffTextBracketParamsSer(params: Partial):\r\n params is SmoStaffTextBracketParamsSer {\r\n if (params.ctor && params.ctor === 'SmoStaffTextBracket') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport type SmoTextBracketStringType = 'text' | 'superscript';\r\nexport const SmoTextBracketStringTypes: SmoTextBracketStringType[] = ['text', 'superscript'];\r\nexport type SmoTextBracketNumberType = 'line' | 'position';\r\nexport const SmoTextBracketNumberTypes: SmoTextBracketNumberType[] = ['line', 'position'];\r\n/**\r\n * Text like 8va, rit. that is bracketed on a system\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffTextBracket extends StaffModifierBase {\r\n static RITARD = 'ritard';\r\n static ACCEL = 'accelerando';\r\n static CRESCENDO = 'crescendo';\r\n static DIMENUENDO = 'diminuendo';\r\n static OCTAVEUP = '8va';\r\n static OCTAVEDOWN = '8vb';\r\n static OCTAVEUP2 = '15va';\r\n static OCTAVE2DOWN = '15vb';\r\n static get defaults(): SmoStaffTextBracketParams {\r\n return JSON.parse(JSON.stringify({\r\n line: 1,\r\n position: SmoStaffTextBracket.positions.BOTTOM,\r\n text: '',\r\n superscript: '',\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n TOP: 1,\r\n BOTTOM: -1\r\n };\r\n } \r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'line', 'position', 'text', 'superscript'];\r\n }\r\n position: number = SmoStaffTextBracket.positions.BOTTOM;\r\n text: string = '';\r\n superscript: string = '';\r\n line: number = 1;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffTextBracketParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffTextBracket.defaults, SmoStaffTextBracket.attributes, this, params);\r\n params.ctor = 'SmoStaffTextBracket';\r\n if (!isSmoStaffTextBracketParamsSer(params)) {\r\n throw(' bad text bracket ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffTextBracketParams) {\r\n super('SmoStaffTextBracket');\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, SmoStaffTextBracket.defaults, this);\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, params, this);\r\n this.startSelector = JSON.parse(JSON.stringify(params.startSelector));\r\n this.endSelector = JSON.parse(JSON.stringify(params.endSelector));\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffTextBracket'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * used for debugging\r\n */\r\nexport interface SlurDefaultParams {\r\n stemDir1: number,\r\n stemDir2: number,\r\n line1: number,\r\n line2: number,\r\n lineMin: number,\r\n lineMax: number,\r\n position: number,\r\n orientation: number,\r\n sameBeam: number\r\n}\r\nexport type SlurNumberParam = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' |\r\n 'position_end' | 'cp1x' | 'cp1y' | 'cp2x' | 'cp2y';\r\nexport const SlurNumberParams: SlurNumberParam[] = ['spacing', 'thickness', 'xOffset', 'yOffset', 'position', \r\n 'position_end', 'cp1x', 'cp1y', 'cp2x', 'cp2y'];\r\n/**\r\n * parameters for a slur\r\n * @param spacing between note and curve\r\n * @param thickness thickness of the line\r\n * @param xOffset in pixels\r\n * @param yOffset in pixels\r\n * @param position top or bottom of the chord we are attached to\r\n * @param position_end top or bottom of the chord we are attached to\r\n * @param invert turns that frown upside down\r\n * @param cp1x bz control point\r\n * @param cp1y bz control point\r\n * @param cp2x bz control point\r\n * @param cp2y bz control point\r\n * @param startSelector the start note we are attached to\r\n * @param endSelector the end note we are attached to\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSlurParams {\r\n /** \r\n * spacing between note and curve \r\n * */\r\n spacing: number,\r\n /**\r\n * thickness of the curve\r\n */\r\n thickness: number,\r\n /**\r\n * x offset on both ends\r\n */\r\n xOffset: number,\r\n /**\r\n * move whole curve up or down\r\n */\r\n yOffset: number,\r\n /**\r\n * VF position, whether head-end or stem end\r\n */\r\n position: number,\r\n /**\r\n * VF position for right side of slur\r\n */\r\n position_end: number,\r\n /**\r\n * indicates whether the user wants up, down or 'auto'.\r\n * internally, sets the 'invert' flag\r\n */\r\n orientation: number,\r\n /**\r\n * reverse the slur from the usual rules in VF\r\n */\r\n invert: boolean,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1y: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2y: number,\r\n /**\r\n * start note of the curve\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * start note of the curve\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * optional for debugging\r\n */\r\n debugParams?: SlurDefaultParams\r\n}\r\n/**\r\n * serializable bits of slur\r\n * @category serialization\r\n */\r\nexport interface SmoSlurParamsSer extends SmoSlurParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoSlurParamsSer(params: Partial): params is SmoSlurParamsSer {\r\n if (params && params.ctor && params.ctor === 'SmoSlur') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Defines a slur\r\n * @category SmoModifier\r\n */\r\nexport class SmoSlur extends StaffModifierBase {\r\n static get defaults(): SmoSlurParams {\r\n return JSON.parse(JSON.stringify({\r\n spacing: 2,\r\n thickness: 2,\r\n xOffset: 5,\r\n yOffset: 0,\r\n position: SmoSlur.positions.TOP,\r\n position_end: SmoSlur.positions.TOP,\r\n orientation: SmoSlur.orientations.AUTO,\r\n invert: false,\r\n cp1x: 0,\r\n cp1y: 15,\r\n cp2x: 0,\r\n cp2y: 15,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n // matches VF curve\r\n static get positions() {\r\n return {\r\n HEAD: 1,\r\n TOP: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n AUTO: 5\r\n };\r\n }\r\n static get orientations() {\r\n return {\r\n AUTO: 0,\r\n UP: 1,\r\n DOWN: 2\r\n };\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'spacing', 'xOffset', 'yOffset', 'position', 'position_end', 'invert',\r\n 'orientation', 'cp1x', 'cp1y', 'cp2x', 'cp2y', 'thickness', 'pitchesStart', 'pitchesEnd'];\r\n }\r\n spacing: number = 2;\r\n thickness: number = 2;\r\n xOffset: number = -5;\r\n yOffset: number = 10;\r\n position: number = SmoSlur.positions.TOP;\r\n position_end: number = SmoSlur.positions.TOP;\r\n orientation: number = SmoSlur.orientations.AUTO;\r\n invert: boolean = false;\r\n cp1x: number = 0;\r\n cp1y: number = 15;\r\n cp2x: number = 0;\r\n cp2y: number = 15;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n\r\n serialize(): SmoSlurParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSlur.defaults,\r\n SmoSlur.parameterArray, this, params);\r\n params.ctor = 'SmoSlur';\r\n if (!isSmoSlurParamsSer(params)) {\r\n throw('bad slur ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n get controlPoints(): SvgPoint[] {\r\n const ar: SvgPoint[] = [{\r\n x: this.cp1x,\r\n y: this.cp1y\r\n }, {\r\n x: this.cp2x,\r\n y: this.cp2y\r\n }];\r\n return ar;\r\n }\r\n\r\n constructor(params: SmoSlurParams) {\r\n super('SmoSlur');\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, SmoSlur.defaults, this);\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, params, this);\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n\r\n // Fix some earlier serialization error. \r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSlur'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Map pitch indices of the tie line\r\n */\r\nexport interface TieLine {\r\n from: number,\r\n to: number\r\n}\r\n/**\r\n * Constructor parameters for a tie.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTieParams {\r\n /**\r\n * future: x offset on both sides\r\n */\r\n tie_spacing: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp1: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp2: number,\r\n /**\r\n * x offset\r\n */\r\n first_x_shift: number,\r\n /**\r\n * x offset end\r\n */\r\n last_x_shift: number,\r\n /**\r\n * y offset for all the curves\r\n */\r\n y_shift: number,\r\n /**\r\n * map of lines for the pitches\r\n */\r\n lines: TieLine[],\r\n /**\r\n * start note\r\n */\r\n startSelector: SmoSelector | null,\r\n /**\r\n * end note\r\n */\r\n endSelector: SmoSelector | null\r\n}\r\n\r\n/**\r\n * serializable bits of SmoTie\r\n * @category serialization\r\n */\r\nexport interface SmoTieParamsSer extends SmoTieParams {\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoTieParamsSer(params: Partial): params is SmoTieParamsSer {\r\n if (params.ctor && params.ctor === 'SmoTie') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Like slur, but multiple pitches.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTie extends StaffModifierBase {\r\n invert: boolean = false;\r\n cp1: number = 8;\r\n cp2: number = 12;\r\n first_x_shift: number = 0;\r\n last_x_shift: number = 0;\r\n y_shift: number = 7;\r\n tie_spacing: number = 0;\r\n lines: TieLine[] = [];\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n static get defaults(): SmoTieParams {\r\n return JSON.parse(JSON.stringify({\r\n invert: false,\r\n cp1: 8,\r\n cp2: 12,\r\n y_shift: 7,\r\n first_x_shift: 0,\r\n last_x_shift: 0,\r\n lines: [],\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'invert', 'lines', 'y_shift', 'tie_spacing', 'cp1', 'cp2', 'first_x_shift', 'last_x_shift'];\r\n }\r\n static get vexParameters() {\r\n return ['cp1', 'cp2', 'first_x_shift', 'last_x_shift', 'y_shift'];\r\n }\r\n static isTie(modifier: SmoTie | SmoModifierBase): modifier is SmoTie {\r\n return modifier.ctor === 'SmoTie';\r\n }\r\n\r\n static createLines(fromNote: SmoNote, toNote: SmoNote): TieLine[] {\r\n const maxPitches = Math.max(fromNote.pitches.length, toNote.pitches.length);\r\n let i = 0;\r\n const lines: TieLine[] = [];\r\n // By default, just tie all the pitches to all the other pitches in order\r\n for (i = 0; i < maxPitches; ++i) {\r\n const from = i < fromNote.pitches.length ? i : fromNote.pitches.length - 1;\r\n const to = i < toNote.pitches.length ? i : toNote.pitches.length - 1;\r\n lines.push({ from, to });\r\n }\r\n return lines;\r\n }\r\n\r\n serialize(): SmoTieParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTie.defaults,\r\n SmoTie.parameterArray, this, params);\r\n\r\n params.ctor = 'SmoTie';\r\n if (!isSmoTieParamsSer(params)) {\r\n throw 'bad tie ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n // ### checkLines\r\n // If the note chords have changed, the lines may no longer be valid so update them\r\n checkLines(fromNote: SmoNote, toNote: SmoNote) {\r\n const maxTo = this.lines.map((ll) => ll.to).reduce((a, b) => a > b ? a : b);\r\n const maxFrom = this.lines.map((ll) => ll.from).reduce((a, b) => a > b ? a : b);\r\n if (maxTo < toNote.pitches.length && maxFrom < fromNote.pitches.length) {\r\n return;\r\n }\r\n this.lines = SmoTie.createLines(fromNote, toNote);\r\n }\r\n constructor(params: SmoTieParams) {\r\n super('SmoTie');\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, SmoTie.defaults, this);\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, params, this);\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTie'\r\n };\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support a {@link SmoSystemStaff}, which is a container for measures and\r\n * staff modifiers.\r\n * @module /smo/data/systemStaff\r\n * **/\r\nimport { SmoObjectParams, SmoAttrs, MeasureNumber, getId } from './common';\r\nimport { SmoMusic } from './music';\r\nimport { SmoMeasure, SmoMeasureParamsSer } from './measure';\r\nimport { SmoMeasureFormat, SmoRehearsalMark, SmoRehearsalMarkParams, SmoTempoTextParams, SmoVolta, SmoBarline } from './measureModifiers';\r\nimport { SmoInstrumentParams, StaffModifierBase, SmoInstrument, SmoInstrumentMeasure, SmoInstrumentStringParams, SmoInstrumentNumParams, \r\n SmoTie, SmoStaffTextBracket, SmoStaffTextBracketParamsSer, StaffModifierBaseSer } from './staffModifiers';\r\nimport { SmoPartInfo, SmoPartInfoParamsSer } from './partInfo';\r\nimport { SmoTextGroup } from './scoreText';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBeamer } from '../xform/beamers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * Constructor parameters for {@link SmoSystemStaff}.\r\n * Usually you will call\r\n * {@link SmoSystemStaff.defaults}, and modify the parameters you need to change,\r\n * or get the defaults from an existing staff\r\n * @param staffId the index of the staff in the score\r\n * @param renumberingMap For alternate number, pickups, etc.\r\n * @param keySignatureMap map of keys to measures\r\n * @param measureInstrumentMap map of instruments to staves\r\n * @param measures array of {@link SmoMeasure}\r\n * @param modifiers slurs and such\r\n * @param partInfo information about the part\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemStaffParams {\r\n staffId: number,\r\n renumberingMap: Record,\r\n keySignatureMap: Record,\r\n measureInstrumentMap: Record,\r\n measures: SmoMeasure[],\r\n modifiers: StaffModifierBase[],\r\n partInfo?: SmoPartInfo;\r\n textBrackets?: SmoStaffTextBracket[];\r\n alignWithPrevious?: boolean;\r\n}\r\n/**\r\n * Serialized components of a stave\r\n * @param staffId the index of the staff in the score\r\n * @param renumberingMap For alternate number, pickups, etc.\r\n * @param keySignatureMap map of keys to measures\r\n * @param measureInstrumentMap map of instruments to staves\r\n * @param measures array of {@link SmoMeasure}\r\n * @param modifiers slurs and such\r\n * @param partInfo information about the part \r\n * @category serialization\r\n */\r\nexport interface SmoSystemStaffParamsSer {\r\n ctor: string,\r\n staffId: number,\r\n renumberingMap?: Record,\r\n keySignatureMap: Record,\r\n measureInstrumentMap: Record,\r\n measures: SmoMeasureParamsSer[],\r\n modifiers: StaffModifierBaseSer[],\r\n partInfo?: SmoPartInfoParamsSer;\r\n textBrackets?: SmoStaffTextBracketParamsSer[];\r\n alignWithPrevious?: boolean;\r\n}\r\n\r\nfunction isSmoSystemStaffParamsSer(params: Partial):params is SmoSystemStaffParamsSer {\r\n if (!(typeof(params.ctor) === 'string' && params.ctor === 'SmoSystemStaff')) {\r\n return false;\r\n }\r\n if (!(Array.isArray(params.measures))) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A staff is a line of music that can span multiple measures.\r\n * A system is a line of music for each staff in the score. So a staff\r\n * spans multiple systems.\r\n * A staff modifier connects 2 points in the staff.\r\n * @category SmoObject\r\n * */\r\nexport class SmoSystemStaff implements SmoObjectParams {\r\n /**\r\n * Gets the instrument assigned to a given measure\r\n * @param measureInstrumentMap\r\n * @param measureIndex \r\n * @returns \r\n */\r\n static getStaffInstrument(measureInstrumentMap: Record, measureIndex: number) {\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n let fit = 0;\r\n keyar.forEach((key) => {\r\n const numkey = parseInt(key, 10);\r\n if (numkey <= measureIndex && numkey > fit) {\r\n fit = numkey;\r\n }\r\n });\r\n return measureInstrumentMap[fit];\r\n }\r\n static getStaffInstrumentArray(measureInstrumentMap: Record): SmoInstrumentMeasure[] {\r\n const rv: SmoInstrumentMeasure[] = [];\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n keyar.forEach((key) => {\r\n const measureIndex = parseInt(key, 10);\r\n rv.push({ measureIndex, instrument: measureInstrumentMap[measureIndex] });\r\n });\r\n return rv;\r\n }\r\n\r\n staffId: number = 0;\r\n renumberingMap: Record = {};\r\n keySignatureMap: Record = {};\r\n partInfo: SmoPartInfo;\r\n measureInstrumentMap: Record = {};\r\n measures: SmoMeasure[] = [];\r\n modifiers: StaffModifierBase[] = [];\r\n textBrackets: SmoStaffTextBracket[] = [];\r\n bracketMap: Record = {};\r\n attrs: SmoAttrs = {\r\n id: '',\r\n type: 'SmoSystemStaff'\r\n }\r\n ctor: string = 'SmoSystemStaff';\r\n _mappedStaffId: number = 0;\r\n\r\n // ### defaults\r\n // default values for all instances\r\n static get defaults(): SmoSystemStaffParams {\r\n return JSON.parse(JSON.stringify({\r\n staffId: 0,\r\n renumberingMap: {},\r\n keySignatureMap: {},\r\n measureInstrumentMap: {},\r\n textBrackets: [],\r\n measures: [],\r\n modifiers: []\r\n }));\r\n }\r\n setMappedStaffId(value: number) {\r\n this._mappedStaffId = value;\r\n }\r\n getMappedStaffId(): number {\r\n return this._mappedStaffId;\r\n }\r\n\r\n constructor(params: SmoSystemStaffParams) {\r\n this.staffId = params.staffId;\r\n this.measures = params.measures;\r\n this.modifiers = params.modifiers;\r\n this.textBrackets = params.textBrackets ?? [];\r\n this.renumberingMap = params.renumberingMap;\r\n if (Object.keys(params.measureInstrumentMap).length === 0) {\r\n const instrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n this.measureInstrumentMap[0] = instrument;\r\n } else {\r\n const keys = Object.keys(params.measureInstrumentMap);\r\n keys.forEach((p, ix) => {\r\n const pnum = parseInt(p, 10);\r\n const instrument = new SmoInstrument(params.measureInstrumentMap[pnum]);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n\r\n // Make sure transposition goes to the end stave of the song.\r\n if (ix === keys.length - 1) {\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n }\r\n this.measureInstrumentMap[pnum] = instrument;\r\n });\r\n }\r\n if (this.measures.length) {\r\n this.numberMeasures();\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemStaff'\r\n };\r\n if (params.partInfo) {\r\n this.partInfo = params.partInfo;\r\n } else {\r\n const staveNo = this.staffId + 1;\r\n const partDefs = SmoPartInfo.defaults;\r\n partDefs.partName = 'Staff ' + staveNo;\r\n partDefs.partAbbreviation = staveNo.toString() + '.';\r\n this.partInfo = new SmoPartInfo(partDefs);\r\n }\r\n }\r\n\r\n // ### defaultParameters\r\n // the parameters that get saved with the score.\r\n static get defaultParameters() {\r\n return [\r\n 'renumberingMap', 'keySignatureMap', 'instrumentInfo'];\r\n }\r\n\r\n get renderableModifiers() {\r\n const rv: StaffModifierBase[] = \r\n this.modifiers.concat(this.textBrackets);\r\n return rv;\r\n }\r\n // ### serialize\r\n // JSONify self.\r\n serialize(): SmoSystemStaffParamsSer {\r\n const params: Partial = {\r\n ctor: 'SmoSystemStaff'\r\n };\r\n smoSerialize.serializedMerge(SmoSystemStaff.defaultParameters, this, params);\r\n params.measures = [];\r\n params.measureInstrumentMap = {};\r\n const ikeys: string[] = Object.keys(this.measureInstrumentMap);\r\n ikeys.forEach((ikey: string) => {\r\n params.measureInstrumentMap![parseInt(ikey, 10)] = this.measureInstrumentMap[parseInt(ikey, 10)].serialize();\r\n });\r\n this.measures.forEach((measure) => {\r\n params.measures!.push(measure.serialize());\r\n });\r\n params.modifiers = [];\r\n this.modifiers.forEach((modifier) => {\r\n params.modifiers!.push(modifier.serialize());\r\n });\r\n this.textBrackets.forEach((bracket) => {\r\n params.modifiers!.push(bracket.serialize());\r\n });\r\n params.partInfo = this.partInfo.serialize();\r\n if (!isSmoSystemStaffParamsSer(params)) {\r\n throw ('bad staff ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n\r\n // ### deserialize\r\n // parse formerly serialized staff.\r\n static deserialize(jsonObj: SmoSystemStaffParamsSer): SmoSystemStaff {\r\n const params: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n params.staffId = jsonObj.staffId ?? 0;\r\n params.measures = [];\r\n params.modifiers = [];\r\n params.textBrackets = [];\r\n params.renumberingMap = jsonObj.renumberingMap ?? {};\r\n if (jsonObj.partInfo) {\r\n // Deserialize the text groups first\r\n const tgs: SmoTextGroup[] = [];\r\n jsonObj.partInfo.textGroups.forEach((tgSer: any) => {\r\n tgs.push(SmoTextGroup.deserializePreserveId(tgSer));\r\n });\r\n jsonObj.partInfo.textGroups = tgs;\r\n params.partInfo = SmoPartInfo.deserialize(jsonObj.partInfo);\r\n }\r\n // Up-convert legacy instrument info, which was split between different objects\r\n if (!jsonObj.measureInstrumentMap) {\r\n const jsonLegacy = jsonObj as any;\r\n if (jsonLegacy.instrumentInfo) {\r\n const defs = SmoInstrument.defaults;\r\n defs.keyOffset = jsonLegacy.instrumentInfo.keyOffset;\r\n defs.clef = jsonLegacy.instrumentInfo.clef;\r\n defs.instrumentName = jsonLegacy.instrumentInfo.instrumentName;\r\n const ii: SmoInstrument = new SmoInstrument(defs);\r\n params.measureInstrumentMap = { 0: ii };\r\n } else {\r\n const ii: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n params.measureInstrumentMap = { 0: ii };\r\n }\r\n params.measureInstrumentMap[0].startSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.measure = jsonObj.measures.length - 1;\r\n params.measureInstrumentMap[0].keyOffset = jsonObj.measures[0].transposeIndex ?? 0;\r\n } else {\r\n const ikeys = Object.keys(jsonObj.measureInstrumentMap);\r\n ikeys.forEach((ikey) => {\r\n const ix = parseInt(ikey, 10);\r\n const inst = jsonObj.measureInstrumentMap[ix];\r\n const defs = SmoInstrument.defaults;\r\n SmoInstrumentStringParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'string') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n SmoInstrumentNumParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'number') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n if (typeof(inst.startSelector) !== 'undefined') {\r\n defs.startSelector = inst.startSelector;\r\n }\r\n if (typeof(inst.endSelector) !== 'undefined') {\r\n defs.endSelector = inst.endSelector;\r\n }\r\n params.measureInstrumentMap[ix] = new SmoInstrument(defs);\r\n });\r\n }\r\n const instrumentAr = SmoSystemStaff.getStaffInstrumentArray(params.measureInstrumentMap);\r\n let curInstrumentIndex = 0;\r\n jsonObj.measures.forEach((measureObj: any) => {\r\n const measure = SmoMeasure.deserialize(measureObj);\r\n if (instrumentAr.length > (curInstrumentIndex + 1) && measure.measureNumber.measureIndex >=\r\n instrumentAr[curInstrumentIndex + 1].measureIndex) {\r\n curInstrumentIndex += 1;\r\n }\r\n measure.transposeIndex = instrumentAr[curInstrumentIndex].instrument.keyOffset;\r\n params.measures.push(measure);\r\n });\r\n if (jsonObj.modifiers) {\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const mod = StaffModifierBase.deserialize(modParams);\r\n mod.associatedStaff = jsonObj.staffId;\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n params.textBrackets!.push(mod as SmoStaffTextBracket);\r\n } else {\r\n params.modifiers.push(mod);\r\n }\r\n });\r\n }\r\n const rv = new SmoSystemStaff(params);\r\n return rv;\r\n }\r\n /**\r\n * We have created a score with staff mappings. Update the selectors in staff modifiers so that\r\n * 'from' in the staff slot is 'to'\r\n */\r\n mapStaffFromTo(from: number, to: number) {\r\n if (from === to) {\r\n return;\r\n }\r\n this.modifiers.forEach((mod) => {\r\n if (mod.startSelector.staff === from) {\r\n mod.startSelector.staff = to;\r\n }\r\n if (mod.endSelector.staff === from) {\r\n mod.endSelector.staff = to;\r\n }\r\n mod.associatedStaff = to; // this.staffId will remap to 'to' value\r\n });\r\n }\r\n updateMeasureFormatsForPart() {\r\n this.measures.forEach((measure, mix) => {\r\n if (this.partInfo.measureFormatting[mix]) {\r\n measure.format = new SmoMeasureFormat(this.partInfo.measureFormatting[mix]);\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n });\r\n }\r\n /**\r\n * Get the active instrument at the given measure\r\n * @param measureIndex\r\n * @returns\r\n */\r\n getStaffInstrument(measureIndex: number): SmoInstrument {\r\n return SmoSystemStaff.getStaffInstrument(this.measureInstrumentMap, measureIndex);\r\n }\r\n getInstrumentList(): SmoInstrument[] {\r\n const rv: SmoInstrument[] = [];\r\n const keys = Object.keys(this.measureInstrumentMap);\r\n keys.forEach((key) => {\r\n rv.push(this.getStaffInstrument(parseInt(key)));\r\n });\r\n return rv;\r\n }\r\n updateInstrumentOffsets() {\r\n const ar = SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap);\r\n ar.forEach((entry) => {\r\n let i = entry.instrument.startSelector.measure;\r\n for (i; i <= entry.instrument.endSelector.measure && i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const concertKey = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n const targetKey = SmoMusic.vexKeySigWithOffset(concertKey, entry.instrument.keyOffset);\r\n measure.transposeToOffset(entry.instrument.keyOffset, targetKey, entry.instrument.clef);\r\n measure.transposeIndex = entry.instrument.keyOffset;\r\n measure.keySignature = targetKey;\r\n measure.setClef(entry.instrument.clef);\r\n }\r\n });\r\n }\r\n isRest(index: number) {\r\n return this.measures[index].isRest();\r\n }\r\n isRepeat(index: number) {\r\n const specialBar = !(this.measures[index].getEndBarline().barline === SmoBarline.barlines.singleBar &&\r\n (this.measures[index].getStartBarline().barline === SmoBarline.barlines.singleBar ||\r\n this.measures[index].getStartBarline().barline === SmoBarline.barlines.noBar));\r\n return specialBar || this.measures[index].repeatSymbol;\r\n }\r\n isRepeatSymbol(index: number) {\r\n return this.measures[index].repeatSymbol;\r\n }\r\n isRehearsal(index: number) {\r\n return !(typeof(this.measures[index].getRehearsalMark()) === 'undefined');\r\n }\r\n\r\n // ### addStaffModifier\r\n // add a staff modifier, or replace a modifier of same type\r\n // with same endpoints.\r\n addStaffModifier(modifier: StaffModifierBase) {\r\n this.removeStaffModifier(modifier);\r\n this.modifiers.push(modifier);\r\n modifier.associatedStaff = this.staffId;\r\n }\r\n\r\n // ### removeStaffModifier\r\n // Remove a modifier of given type and location\r\n removeStaffModifier(modifier: StaffModifierBase) {\r\n const mods: StaffModifierBase[] = [];\r\n const tbs: SmoStaffTextBracket[] = [];\r\n this.renderableModifiers.forEach((mod: StaffModifierBase) => {\r\n if (mod.attrs.type !== modifier.attrs.type ||\r\n SmoSelector.neq(mod.startSelector, modifier.startSelector) ||\r\n SmoSelector.neq(mod.endSelector, modifier.endSelector)) {\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n tbs.push(mod as SmoStaffTextBracket);\r\n } else {\r\n mods.push(mod);\r\n }\r\n }\r\n });\r\n this.textBrackets = tbs;\r\n this.modifiers = mods;\r\n }\r\n // ### getVoltaMap\r\n getVoltaMap(startIndex: number, endIndex: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startBar >= startIndex && ending.endBar <= endIndex) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n getVoltasForMeasure(ix: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startSelector?.measure === ix || ending.endSelector?.measure === ix) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n // ### getModifiersAt\r\n // get any modifiers at the selected location\r\n getModifiersAt(selector: SmoSelector): StaffModifierBase[] {\r\n const rv: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n if (SmoSelector.sameNote(mod.startSelector, selector)) {\r\n rv.push(mod);\r\n }\r\n });\r\n return rv;\r\n }\r\n getModifier(modData: any) {\r\n return this.renderableModifiers.find((mod) =>\r\n SmoSelector.eq(mod.startSelector, modData.startSelector) && mod.attrs.type === modData.attrs.type);\r\n }\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricFont(fontInfo);\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n setChordFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordFont(fontInfo);\r\n });\r\n }\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n addTextBracket(bracketParams: SmoStaffTextBracket) { \r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n brackets.push(new SmoStaffTextBracket(bracketParams));\r\n this.textBrackets = brackets;\r\n }\r\n removeTextBracket(bracketParams: SmoStaffTextBracket) { \r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n this.textBrackets = brackets;\r\n }\r\n getTextBracketsStartingAt(selector: SmoSelector) {\r\n return this.textBrackets.filter((tb) => SmoSelector.eq(tb.startSelector, selector));\r\n }\r\n\r\n // ### getSlursStartingAt\r\n // like it says. Used by audio player to slur notes\r\n getSlursStartingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoSlur'\r\n );\r\n }\r\n // ### getSlursEndingAt\r\n // like it says.\r\n getSlursEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector)\r\n );\r\n }\r\n\r\n getTiesStartingAt(selector: SmoSelector): SmoTie[] {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoTie'\r\n ) as SmoTie[];\r\n }\r\n\r\n getTiesEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoTie'\r\n );\r\n }\r\n\r\n // ### accesor getModifiers\r\n getModifiers() {\r\n return this.modifiers;\r\n }\r\n\r\n // ### applyBeams\r\n // group all the measures' notes into beam groups.\r\n applyBeams() {\r\n for (let i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n SmoBeamer.applyBeams(measure);\r\n }\r\n }\r\n\r\n // ### addRehearsalMark\r\n // for all measures in the system, and also bump the\r\n // auto-indexing\r\n addRehearsalMark(index: number, parameters: SmoRehearsalMarkParams) {\r\n let i = 0;\r\n let symbol = '';\r\n var mark = new SmoRehearsalMark(parameters);\r\n if (!mark.increment) {\r\n this.measures[index].addRehearsalMark(mark);\r\n return;\r\n }\r\n\r\n symbol = mark.symbol;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (i < index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n symbol = rm.getIncrement();\r\n mark.symbol = symbol;\r\n }\r\n }\r\n if (i === index) {\r\n mm.addRehearsalMark(mark);\r\n symbol = mark.getIncrement();\r\n }\r\n if (i > index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n rm.symbol = symbol;\r\n symbol = rm.getIncrement();\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeTempo(index: number) {\r\n this.measures[index].resetTempo();\r\n }\r\n\r\n addTempo(tempo: SmoTempoTextParams, index: number) {\r\n this.measures[index].setTempo(tempo);\r\n }\r\n\r\n // ### removeRehearsalMark\r\n // for all measures in the system, and also decrement the\r\n // auto-indexing\r\n removeRehearsalMark(index: number) {\r\n let ix: number = 0;\r\n let symbol: string | null = null;\r\n let card: string | null = null;\r\n this.measures.forEach((measure) => {\r\n if (ix === index) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark) {\r\n symbol = mark.symbol;\r\n card = mark.cardinality;\r\n }\r\n measure.removeRehearsalMark();\r\n }\r\n if (ix > index && symbol && card) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark && mark.increment) {\r\n mark.symbol = symbol;\r\n symbol = mark.getIncrement();\r\n }\r\n }\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ### deleteMeasure\r\n // delete the measure, and any staff modifiers that start/end there.\r\n deleteMeasure(index: number) {\r\n if (this.measures.length < 2) {\r\n return; // don't delete last measure.\r\n }\r\n const nm: SmoMeasure[] = [];\r\n this.measures.forEach((measure) => {\r\n if (measure.measureNumber.measureIndex !== index) {\r\n nm.push(measure);\r\n }\r\n });\r\n const sm: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n // Bug: if we are deleting a measure before the selector, change the measure number.\r\n if (mod.startSelector.measure !== index && mod.endSelector.measure !== index) {\r\n if (index < mod.startSelector.measure) {\r\n mod.startSelector.measure -= 1;\r\n }\r\n if (index < mod.endSelector.measure) {\r\n mod.endSelector.measure -= 1;\r\n }\r\n sm.push(mod);\r\n }\r\n });\r\n const instMap: Record = {};\r\n SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap).forEach((mm) => {\r\n if (mm.instrument.startSelector.measure > index || mm.instrument.startSelector.measure > this.measures.length - 1) {\r\n mm.instrument.startSelector.measure -= 1;\r\n }\r\n if (mm.instrument.endSelector.measure > index || mm.instrument.endSelector.measure > this.measures.length - 1) {\r\n mm.instrument.endSelector.measure -= 1;\r\n }\r\n instMap[mm.instrument.startSelector.measure] = new SmoInstrument(mm.instrument);\r\n });\r\n this.measures = nm;\r\n this.modifiers = sm;\r\n this.numberMeasures();\r\n }\r\n\r\n // ### addKeySignature\r\n // Add key signature to the given measure and update map so we know\r\n // when it changes, cancels etc.\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.keySignatureMap[measureIndex] = key;\r\n const target = this.measures[measureIndex];\r\n target.keySignature = key;\r\n }\r\n\r\n _updateKeySignatures() {\r\n let i = 0;\r\n const currentSig = this.measures[0].keySignature;\r\n\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const nextSig = this.keySignatureMap[i] ? this.keySignatureMap[i] : currentSig;\r\n measure.setKeySignature(nextSig);\r\n }\r\n }\r\n\r\n // ### numberMeasures\r\n // After anything that might change the measure numbers, update them iteratively\r\n numberMeasures() {\r\n let i: number = 0;\r\n let localIndex = 0;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n if (typeof(this.renumberingMap[i]) === 'number') {\r\n localIndex = this.renumberingMap[i];\r\n } else {\r\n localIndex += 1;\r\n }\r\n // If this is the first full measure, call it '1'\r\n const numberObj: MeasureNumber = {\r\n localIndex,\r\n measureIndex: i,\r\n systemIndex: i,\r\n staffId: this.staffId\r\n };\r\n measure.setMeasureNumber(numberObj);\r\n }\r\n }\r\n\r\n addDefaultMeasure(index: number, params: SmoMeasure) {\r\n const measure = SmoMeasure.getDefaultMeasure(params);\r\n this.addMeasure(index, measure);\r\n }\r\n\r\n // ## addMeasure\r\n // ## Description:\r\n // Add the measure at the specified index, splicing the array as required.\r\n addMeasure(index: number, measure: SmoMeasure) {\r\n if (index === 0 && this.measures.length) {\r\n measure.setMeasureNumber(this.measures[0].measureNumber);\r\n }\r\n if (index >= this.measures.length) {\r\n this.measures.push(measure);\r\n } else {\r\n this.measures.splice(index, 0, measure);\r\n }\r\n const modifiers = this.modifiers.filter((mod) => mod.startSelector.measure >= index);\r\n modifiers.forEach((mod) => {\r\n if (mod.startSelector.measure < this.measures.length) {\r\n mod.startSelector.measure += 1;\r\n }\r\n if (mod.endSelector.measure < this.measures.length) {\r\n mod.endSelector.measure += 1;\r\n }\r\n });\r\n this.numberMeasures();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoTuplet}\r\n * @module /smo/data/tuplet\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNote, SmoNoteParamsSer } from './note';\r\nimport { SmoMusic } from './music';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport { getId, SmoAttrs, Clef } from './common';\r\n\r\n/**\r\n * Parameters for tuplet construction\r\n * @param notes - runtime instance of tuplet has an actual instance of \r\n * notes. The note instances are created by the deserilization of the \r\n * measure. We serialize the note parameters so we can identify the correct notes\r\n * when deserializing.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTupletParams {\r\n notes: SmoNote[],\r\n attrs?: SmoAttrs,\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n durationMap: number[],\r\n ratioed: boolean,\r\n bracketed: boolean,\r\n voice: number,\r\n startIndex: number\r\n}\r\n/**\r\n * serializabl bits of SmoTuplet\r\n * @category serialization\r\n */\r\nexport interface SmoTupletParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * info about the serialized notes\r\n */\r\n notes: SmoNoteParamsSer[],\r\n /**\r\n * numNotes in the duplet (not necessarily same as notes array size)\r\n */\r\n numNotes: number,\r\n /**\r\n * used to decide how to beam, 2048 for 1/4 triplet for instance\r\n */\r\n stemTicks: number,\r\n /**\r\n * total ticks to squeeze numNotes\r\n */\r\n totalTicks: number,\r\n /**\r\n * map of notes to ticks\r\n */\r\n durationMap: number[],\r\n /**\r\n * whether to use the :\r\n */\r\n ratioed: boolean,\r\n /**\r\n * whether to show the brackets\r\n */\r\n bracketed: boolean,\r\n /**\r\n * which voice the tuplet applies to\r\n */\r\n voice: number,\r\n /**\r\n * the start tick index of the measure\r\n */\r\n startIndex: number\r\n}\r\n\r\n/**\r\n * tuplets must be serialized with their id attribute, enforce this\r\n * @param params a possible-valid SmoTupletParamsSer\r\n * @returns \r\n */\r\nfunction isSmoTupletParamsSer(params: Partial): params is SmoTupletParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoTuplet')) {\r\n return false;\r\n }\r\n if (!params.attrs || !(typeof(params.attrs.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A tuplet is a container for notes within a measure\r\n * @category SmoObject\r\n */\r\nexport class SmoTuplet {\r\n static get defaults(): SmoTupletParams {\r\n return JSON.parse(JSON.stringify({\r\n notes: [],\r\n numNotes: 3,\r\n stemTicks: 2048,\r\n totalTicks: 4096, // how many ticks this tuple takes up\r\n durationMap: [1.0, 1.0, 1.0],\r\n bracketed: true,\r\n voice: 0,\r\n ratioed: false,\r\n startIndex: 0\r\n }));\r\n }\r\n attrs: SmoAttrs;\r\n notes: SmoNote[];\r\n numNotes: number = 3;\r\n stemTicks: number = 2048;\r\n totalTicks: number = 4096;\r\n durationMap: number[] = [1.0, 1.0, 1.0];\r\n bracketed: boolean = true;\r\n voice: number = 0;\r\n ratioed: boolean = false;\r\n startIndex: number = 0;\r\n\r\n get clonedParams() {\r\n const paramAr = ['stemTicks', 'ticks', 'totalTicks', 'durationMap', 'numNotes'];\r\n const rv = {};\r\n smoSerialize.serializedMerge(paramAr, this, rv);\r\n return rv;\r\n }\r\n\r\n static get parameterArray() {\r\n return ['stemTicks', 'ticks', 'totalTicks',\r\n 'durationMap', 'attrs', 'ratioed', 'bracketed', 'voice', 'startIndex', 'numNotes'];\r\n }\r\n\r\n serialize(): SmoTupletParamsSer {\r\n const params:Partial = {\r\n notes: []\r\n };\r\n this.notes.forEach((nn) => {\r\n params.notes!.push(nn.serialize());\r\n });\r\n params.ctor = 'SmoTuplet';\r\n smoSerialize.serializedMergeNonDefault(SmoTuplet.defaults,\r\n SmoTuplet.parameterArray, this, params);\r\n if (!isSmoTupletParamsSer(params)) {\r\n throw 'bad tuplet ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n\r\n static calculateStemTicks(totalTicks: number, numNotes: number) {\r\n const stemValue = totalTicks / numNotes;\r\n let stemTicks = SmoTuplet.longestTuplet;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (stemValue < stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n return stemTicks * 2;\r\n }\r\n constructor(params: SmoTupletParams) {\r\n smoSerialize.vexMerge(this, SmoTuplet.defaults);\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, params, this);\r\n this.notes = params.notes;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTuplet'\r\n };\r\n this._adjustTicks();\r\n }\r\n static get longestTuplet() {\r\n return 8192;\r\n }\r\n static cloneTuplet(tuplet: SmoTuplet): SmoTuplet {\r\n let i = 0;\r\n const noteAr = tuplet.notes;\r\n const durationMap = JSON.parse(JSON.stringify(tuplet.durationMap)); // deep copy array\r\n\r\n // Add any remainders for oddlets\r\n const totalTicks = noteAr.map((nn) => nn.ticks.numerator + nn.ticks.remainder)\r\n .reduce((acc, nn) => acc + nn);\r\n\r\n const numNotes: number = tuplet.numNotes;\r\n const stemTicks = SmoTuplet.calculateStemTicks(totalTicks, numNotes);\r\n\r\n const tupletNotes: SmoNote[] = [];\r\n\r\n noteAr.forEach((note) => {\r\n const textModifiers = note.textModifiers;\r\n // Note preserver remainder\r\n note = SmoNote.cloneWithDuration(note, {\r\n numerator: stemTicks * tuplet.durationMap[i],\r\n denominator: 1,\r\n remainder: note.ticks.remainder\r\n });\r\n\r\n // Don't clone modifiers, except for first one.\r\n if (i === 0) {\r\n const ntmAr: any = [];\r\n textModifiers.forEach((tm) => {\r\n const ntm = SmoNoteModifierBase.deserialize(tm);\r\n ntmAr.push(ntm);\r\n });\r\n note.textModifiers = ntmAr;\r\n }\r\n i += 1;\r\n tupletNotes.push(note);\r\n });\r\n const rv = new SmoTuplet({\r\n numNotes: tuplet.numNotes,\r\n voice: tuplet.voice,\r\n notes: tupletNotes,\r\n stemTicks,\r\n totalTicks,\r\n ratioed: false,\r\n bracketed: true,\r\n startIndex: tuplet.startIndex,\r\n durationMap\r\n });\r\n return rv;\r\n }\r\n\r\n _adjustTicks() {\r\n let i = 0;\r\n const sum = this.durationSum;\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n // TODO: notes_occupied needs to consider vex duration\r\n note.ticks.denominator = 1;\r\n note.ticks.numerator = Math.floor((this.totalTicks * this.durationMap[i]) / sum);\r\n note.tuplet = this.attrs;\r\n }\r\n\r\n // put all the remainder in the first note of the tuplet\r\n const noteTicks = this.notes.map((nn) => nn.tickCount)\r\n .reduce((acc, dd) => acc + dd);\r\n // bug fix: if this is a clones tuplet, remainder is already set\r\n this.notes[0].ticks.remainder =\r\n this.notes[0].ticks.remainder + this.totalTicks - noteTicks;\r\n }\r\n getIndexOfNote(note: SmoNote | null): number {\r\n let rv = -1;\r\n let i = 0;\r\n if (!note) {\r\n return -1;\r\n }\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const tn = this.notes[i];\r\n if (note.attrs.id === tn.attrs.id) {\r\n rv = i;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n split(combineIndex: number) {\r\n let i = 0;\r\n const multiplier = 0.5;\r\n const nnotes: SmoNote[] = [];\r\n const nmap: number[] = [];\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (i === combineIndex) {\r\n nmap.push(this.durationMap[i] * multiplier);\r\n nmap.push(this.durationMap[i] * multiplier);\r\n note.ticks.numerator *= multiplier;\r\n\r\n const onote = SmoNote.clone(note);\r\n // remainder is for the whole tuplet, so don't duplicate that.\r\n onote.ticks.remainder = 0;\r\n nnotes.push(note);\r\n nnotes.push(onote);\r\n } else {\r\n nmap.push(this.durationMap[i]);\r\n nnotes.push(note);\r\n }\r\n }\r\n this.notes = nnotes;\r\n this.durationMap = nmap;\r\n }\r\n combine(startIndex: number, endIndex: number) {\r\n let i = 0;\r\n let base = 0.0;\r\n let acc = 0.0;\r\n // can't combine in this way, too many notes\r\n if (this.notes.length <= endIndex || startIndex >= endIndex) {\r\n return this;\r\n }\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n acc += this.durationMap[i];\r\n if (i === startIndex) {\r\n base = this.durationMap[i];\r\n } else if (this.durationMap[i] !== base) {\r\n // Can't combine non-equal tuplet notes\r\n return this;\r\n }\r\n }\r\n // how much each combined value will be multiplied by\r\n const multiplier = acc / base;\r\n\r\n const nmap = [];\r\n const nnotes = [];\r\n // adjust the duration map\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n // notes that don't change are unchanged\r\n if (i < startIndex || i > endIndex) {\r\n nmap.push(this.durationMap[i]);\r\n nnotes.push(note);\r\n }\r\n // changed note with combined duration\r\n if (i === startIndex) {\r\n note.ticks.numerator = note.ticks.numerator * multiplier;\r\n nmap.push(acc);\r\n nnotes.push(note);\r\n }\r\n // other notes after startIndex are removed from the map.\r\n }\r\n this.notes = nnotes;\r\n this.durationMap = nmap;\r\n return this;\r\n }\r\n\r\n // ### getStemDirection\r\n // Return the stem direction, so we can bracket the correct place\r\n getStemDirection(clef: Clef) {\r\n const note = this.notes.find((nn) => nn.noteType === 'n');\r\n if (!note) {\r\n return SmoNote.flagStates.down;\r\n }\r\n if (note.flagState !== SmoNote.flagStates.auto) {\r\n return note.flagState;\r\n }\r\n return SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n get durationSum() {\r\n let acc = 0;\r\n let i = 0;\r\n for (i = 0; i < this.durationMap.length; ++i) {\r\n acc += this.durationMap[i];\r\n }\r\n return Math.round(acc);\r\n }\r\n get num_notes() {\r\n return this.durationSum;\r\n }\r\n get notes_occupied() {\r\n return Math.floor(this.totalTicks / this.stemTicks);\r\n }\r\n get note_ticks_occupied() {\r\n return this.totalTicks / this.stemTicks;\r\n }\r\n get tickCount() {\r\n let rv = 0;\r\n let i = 0;\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n rv += (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Convert midi to Smo object model. Midi parsing code from:\r\n * @module /smo/midi/midiToSmo\r\n */\r\nimport { SmoToMidi } from \"./smoToMidi\";\r\nimport { Clef, Pitch } from \"../data/common\";\r\nimport { SmoMeasure } from \"../data/measure\";\r\nimport { SmoTempoText, TimeSignature } from \"../data/measureModifiers\";\r\nimport { SmoMusic } from \"../data/music\";\r\nimport { SmoNote } from \"../data/note\";\r\nimport { SmoScore } from \"../data/score\";\r\nimport { SmoLayoutManager } from \"../data/scoreModifiers\";\r\nimport { SmoTie } from \"../data/staffModifiers\";\r\nimport { SmoSystemStaff } from \"../data/systemStaff\";\r\nimport { SmoTuplet } from \"../data/tuplet\";\r\n\r\nexport type MidiEventType = 'text' | 'copyrightNotice' | 'trackName' | 'instrumentName' | 'lyrics' | 'marker' |\r\n 'cuePoint' | 'channelPrefix' | 'portPrefix' | 'endOfTrack' | 'setTempo' | 'smpteOffset' | 'timeSignature' | 'keySignature' |\r\n 'sequencerSpecific' | 'unknownMeta' |\r\n 'noteOff' | 'noteOn' | 'noteAftertouch' | 'controller' | 'programChange' | 'channelAftertouch' | 'pitchBend';\r\n\r\n/**\r\n * These are the midi events as defined by the parser.\r\n */\r\nexport interface MidiTrackEvent {\r\n deltaTime: number,\r\n meta?: boolean,\r\n numerator?: number,\r\n denominator?: number,\r\n microsecondsPerBeat?: number,\r\n scale?: number,\r\n key?: number,\r\n metronome?: number,\r\n thirtyseconds?: number,\r\n type: MidiEventType,\r\n channel?: number,\r\n noteNumber?: number,\r\n velocity?: number\r\n}\r\ninterface RunningMetadata {\r\n keySignature: string,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText\r\n}\r\ninterface MidiNoteOn {\r\n channel: number,\r\n note: number,\r\n smoIndex: number\r\n}\r\ninterface MidiTupletInfo {\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n isLast: boolean\r\n}\r\ninterface EventSmoData {\r\n pitches: Pitch[],\r\n durationTicks: number,\r\n tupletInfo: MidiTupletInfo | null,\r\n isRest: boolean,\r\n isTied: boolean,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText,\r\n keySignature: string,\r\n measure: number,\r\n tick: number\r\n}\r\n\r\nfunction getValueForTick(arg: Record, tick: number) {\r\n const keys = Object.keys(arg);\r\n let maxKey = 0;\r\n let rv = arg[0];\r\n keys.forEach((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt <= tick && keyInt > maxKey && arg[keyInt]) {\r\n rv = arg[maxKey];\r\n maxKey = keyInt;\r\n }\r\n });\r\n return rv;\r\n}\r\n/**\r\n * Converts a JSON midi file to a {@link SmoScore}\r\n * @category SmoToMidi\r\n */\r\nexport class MidiToSmo {\r\n timeSignatureMap: Record = {};\r\n tempoMap: Record = {};\r\n keySignatureMap: Record = {};\r\n tieMap: Record = {};\r\n timeDivision: number = 480;\r\n trackIndex: number = 0;\r\n eventIndex: number = 0; // index into current track\r\n maxMeasure: number = 0;\r\n quantizeTicks: number = MidiToSmo.quantizeTicksDefault;\r\n eot: boolean = false;\r\n midiOnNotes: Record = {};\r\n\r\n midi: any; // MIDI JSON from MIDI parser\r\n static get quantizeTicksDefault() {\r\n return 1024;\r\n }\r\n /**\r\n * Since midi has very little metadata, we don't know the original clef.\r\n * so just use the one (treble or bass) that uses the fewest ledger lines\r\n * @internal\r\n * @param notes notes in measure\r\n * @returns \r\n */\r\n static guessClefForNotes(measure: SmoMeasure): Clef {\r\n let trebleMax = 0;\r\n let bassMax = 0;\r\n measure.voices[0].notes.forEach((note) => {\r\n note.pitches.forEach((pitch) => {\r\n const tl = Math.abs(SmoMusic.pitchToStaffLine('treble', pitch));\r\n const bl = Math.abs(SmoMusic.pitchToStaffLine('bass', pitch));\r\n trebleMax = Math.max(trebleMax, tl);\r\n bassMax = Math.max(bassMax, bl);\r\n })\r\n });\r\n const clef: Clef = trebleMax <= bassMax ? 'treble' : 'bass';\r\n measure.clef = clef;\r\n // For rests, make sure the rest is centered in the clef\r\n measure.voices[0].notes.forEach((note) => {\r\n if (note.noteType === 'r') {\r\n note.pitches = [SmoMeasure.defaultPitchForClef[clef]];\r\n }\r\n note.clef = clef;\r\n });\r\n return clef;\r\n }\r\n /**\r\n * Create an object to convert MIDI to a {@link SmoScore}\r\n * @param midi the output of midi parser\r\n * @param quantizeDuration ticks to quantize (1024 == 16th note)\r\n */\r\n constructor(midi: any, quantizeDuration: number) {\r\n this.midi = midi;\r\n // console.log(JSON.stringify(midi, null, ''));\r\n this.timeSignatureMap[0] = new TimeSignature(TimeSignature.defaults);\r\n this.tempoMap[0] = new SmoTempoText(SmoTempoText.defaults);\r\n this.keySignatureMap[0] = 'c';\r\n this.timeDivision = midi.header.ticksPerBeat;\r\n this.quantizeTicks = quantizeDuration;\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTempo(ticks: number) {\r\n if (this.tempoMap[ticks]) {\r\n return this.tempoMap[ticks];\r\n }\r\n return getValueForTick(this.tempoMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTimeSignature(ticks: number): TimeSignature {\r\n if (this.timeSignatureMap[ticks]) {\r\n return this.timeSignatureMap[ticks];\r\n }\r\n return getValueForTick(this.timeSignatureMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getKeySignature(ticks: number) {\r\n if (this.keySignatureMap[ticks]) {\r\n return this.keySignatureMap[ticks];\r\n }\r\n return getValueForTick(this.keySignatureMap, ticks);\r\n }\r\n /**\r\n * Get metadata from the map for this point in the score\r\n * @param ticks current point in track\r\n * @returns \r\n */\r\n getMetadata(ticks: number) {\r\n return { tempo: this.getTempo(ticks), timeSignature: this.getTimeSignature(ticks), keySignature: this.getKeySignature(ticks) };\r\n }\r\n /**\r\n * We process 3 types of metadata at present: time signature, tempo and keysignature.\r\n * @param trackEvent \r\n * @param ticks \r\n */\r\n handleMetadata(trackEvent: MidiTrackEvent, ticks: number) {\r\n if (trackEvent.meta) {\r\n const mtype = trackEvent.type;\r\n if (mtype === 'timeSignature') {\r\n /**\r\n * whenever we get a time signature event, recompute ticks per measure\r\n */\r\n const numerator = trackEvent.numerator!;\r\n const denominator = trackEvent.denominator!;\r\n const tsDef = TimeSignature.defaults;\r\n tsDef.actualBeats = numerator;\r\n tsDef.beatDuration = denominator;\r\n const ts = new TimeSignature(tsDef);\r\n this.timeSignatureMap[ticks] = ts;\r\n } else if (mtype === 'setTempo') {\r\n const bpm = 60 / (trackEvent.microsecondsPerBeat! / 1000000);\r\n const tempoDef = SmoTempoText.defaults;\r\n tempoDef.bpm = bpm;\r\n this.tempoMap[ticks] = new SmoTempoText(tempoDef);\r\n } else if (mtype === 'keySignature') {\r\n const mdata = trackEvent.key!;\r\n if (mdata === 0) {\r\n this.keySignatureMap[ticks] = 'C';\r\n } else {\r\n // there seem to be different ways to encode this...\r\n let signed = mdata / 256;\r\n if (signed > 7) {\r\n signed = -1 * (256 - signed);\r\n }\r\n if (Math.abs(mdata) < 256) {\r\n signed = mdata;\r\n }\r\n this.keySignatureMap[ticks] = SmoMusic.midiKeyToVexKey(signed);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Convert from Midi PPQ to Smoosic (and vex) ticks\r\n * @internal\r\n */\r\n getSmoTicks(midiTicks: number) {\r\n return 4096 * midiTicks / this.timeDivision;\r\n }\r\n /**\r\n * @internal\r\n */\r\n createNewEvent(metadata: RunningMetadata): EventSmoData {\r\n return {\r\n pitches: [], durationTicks: 0, tupletInfo: null, isRest: false, timeSignature: new TimeSignature(metadata.timeSignature),\r\n tempo: new SmoTempoText(metadata.tempo), keySignature: metadata.keySignature, measure: 0, tick: 0, isTied: false\r\n };\r\n }\r\n /**\r\n * @internal\r\n */\r\n static copyEvent(o: EventSmoData): EventSmoData {\r\n const pitches = JSON.parse(JSON.stringify(o.pitches));\r\n const timeSignature = new TimeSignature(o.timeSignature);\r\n const tempo = new SmoTempoText(o.tempo);\r\n return ({\r\n pitches, durationTicks: o.durationTicks, tupletInfo: o.tupletInfo, isRest: o.isRest, timeSignature, tempo, keySignature: o.keySignature,\r\n measure: o.measure, tick: o.tick, isTied: o.isTied\r\n });\r\n }\r\n /**\r\n * @internal\r\n */\r\n addToTieMap(measureIndex: number) {\r\n const staffIx = this.trackIndex;\r\n if (typeof (this.tieMap[staffIx]) === 'undefined') {\r\n this.tieMap[staffIx] = [];\r\n }\r\n this.tieMap[staffIx].push(measureIndex);\r\n }\r\n /**\r\n * Step 3 in the 3-step process. Quantize the note durations and convert the midi\r\n * event into SmoNotes.\r\n * @param events \r\n * @returns \r\n */\r\n createNotesFromEvents(events: EventSmoData[]): SmoMeasure[] {\r\n let measureIndex = 0;\r\n const measures: SmoMeasure[] = [];\r\n let measure: SmoMeasure | null = null;\r\n let deficit = 0;\r\n // If the midi event is smaller than the smallest note..\r\n const smallest = 1 * (this.quantizeTicks / 4);\r\n events.forEach((ev) => {\r\n if (measure === null || ev.measure > measureIndex) {\r\n const measureDefs = SmoMeasure.defaults;\r\n measureDefs.keySignature = ev.keySignature;\r\n measureDefs.timeSignature = new TimeSignature(ev.timeSignature);\r\n measureDefs.tempo = new SmoTempoText(ev.tempo);\r\n measure = new SmoMeasure(measureDefs);\r\n measure.voices.push({ notes: [] });\r\n measureIndex = ev.measure;\r\n measures.push(measure);\r\n }\r\n if (Math.abs(ev.durationTicks - deficit) < smallest && !(ev.tupletInfo !== null)) {\r\n deficit = deficit - ev.durationTicks;\r\n } else {\r\n const best = SmoMusic.midiTickSearch(ev.durationTicks - deficit, this.quantizeTicks);\r\n deficit += best.result - ev.durationTicks;\r\n ev.durationTicks = best.result;\r\n const defs = SmoNote.defaults;\r\n defs.ticks.numerator = ev.durationTicks;\r\n defs.pitches = JSON.parse(JSON.stringify(ev.pitches));\r\n defs.noteType = ev.isRest ? 'r' : 'n';\r\n const note = new SmoNote(defs);\r\n SmoNote.sortPitches(note);\r\n measure.voices[0].notes.push(note);\r\n if (ev.tupletInfo !== null && ev.tupletInfo.isLast === true) {\r\n const voiceLen = measure.voices[0].notes.length;\r\n const tupletNotes = [note, measure.voices[0].notes[voiceLen - 2], measure.voices[0].notes[voiceLen - 3]];\r\n const defs = SmoTuplet.defaults;\r\n defs.notes = tupletNotes;\r\n defs.stemTicks = ev.tupletInfo.stemTicks;\r\n defs.numNotes = ev.tupletInfo.numNotes;\r\n defs.totalTicks = ev.tupletInfo.totalTicks;\r\n defs.startIndex = voiceLen - 3;\r\n measure.tuplets.push(new SmoTuplet(defs));\r\n }\r\n if (ev.isTied) {\r\n this.addToTieMap(measureIndex);\r\n }\r\n }\r\n });\r\n measures.forEach((measure) => {\r\n measure.clef = MidiToSmo.guessClefForNotes(measure);\r\n });\r\n return measures;\r\n }\r\n /**\r\n * @param ticks \r\n * @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0\r\n */\r\n tripletType(ticks: number): number {\r\n const tripletBeat = Math.round(4096 / 3);\r\n const tripletHalf = Math.round((4096 * 2) / 3);\r\n const tripletEighth = Math.round((4096 / 2) / 3);\r\n const beatTrip = tripletBeat / ticks;\r\n const eigthTrip = tripletEighth / ticks;\r\n const halfTrip = tripletHalf / ticks;\r\n if (Math.abs(1 - beatTrip) < 0.05) {\r\n return 4096;\r\n }\r\n if (Math.abs(1 - eigthTrip) < 0.05) {\r\n return 2048;\r\n }\r\n if (Math.abs(1 - halfTrip) < 0.05) {\r\n return 4096 * 2;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * step 2 in the 3 step process. Divide the music up into measures based on\r\n * tick duration. If there are events overlapping measures, create extra events in the\r\n * new measure (hence the expand) and shorten the original event\r\n * @param events\r\n * @returns \r\n */\r\n expandMidiEvents(events: EventSmoData[]): EventSmoData[] {\r\n const rv: EventSmoData[] = [];\r\n if (events.length === 0) {\r\n return rv;\r\n }\r\n let i = 0;\r\n let ticksSoFar = 0;\r\n let measure = 0;\r\n let tick = 0;\r\n let tripletCount = 0;\r\n let tripletValue = 0;\r\n for (i = 0; i < events.length; ++i) {\r\n const ev = events[i];\r\n // If it's too small, continue. Don't record the event but do count the ticks\r\n if (ev.durationTicks < 128) {\r\n ticksSoFar += ev.durationTicks;\r\n continue;\r\n }\r\n const ticksPerMeasure = SmoMusic.timeSignatureToTicks(ev.timeSignature.timeSignature);\r\n const nevent = MidiToSmo.copyEvent(ev);\r\n if (ticksSoFar + ev.durationTicks > ticksPerMeasure) {\r\n nevent.durationTicks = ticksPerMeasure - ticksSoFar;\r\n if (nevent.durationTicks > 0) {\r\n rv.push(nevent);\r\n nevent.tick = tick;\r\n }\r\n tick = 0;\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n measure += 1;\r\n ticksSoFar = 0;\r\n this.maxMeasure = Math.max(this.maxMeasure, measure);\r\n let overflow = ev.durationTicks - nevent.durationTicks;\r\n while (overflow > ticksPerMeasure) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.tick = tick;\r\n ovfEvent.measure = measure;\r\n tick += 1;\r\n measure += 1;\r\n ovfEvent.durationTicks = ticksPerMeasure;\r\n rv.push(ovfEvent);\r\n overflow -= ticksPerMeasure;\r\n }\r\n if (overflow > 0) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.isTied = true;\r\n ovfEvent.durationTicks = overflow;\r\n ovfEvent.measure = measure;\r\n ovfEvent.tick = tick;\r\n ticksSoFar += ovfEvent.durationTicks;\r\n tick += 1;\r\n rv.push(ovfEvent);\r\n overflow = 0;\r\n }\r\n } else {\r\n ticksSoFar += ev.durationTicks;\r\n // Try to infer the presence of triplets. If it looks like a triplet, mark it and we will\r\n // create the tuplet when we create the measure.\r\n const possibleTriplet = this.tripletType(nevent.durationTicks);\r\n if (possibleTriplet > 0 && (tripletValue === 0 || possibleTriplet === tripletValue)) {\r\n tripletCount += 1;\r\n tripletValue = possibleTriplet;\r\n if (tripletCount === 3) {\r\n nevent.tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: true\r\n };\r\n rv[rv.length - 1].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n rv[rv.length - 2].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n } else {\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n rv.push(nevent);\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Store midi on events. If the midi on or off matches an existing\r\n * stored event based on channel and note, return it so it can be processed\r\n * @param ev raw event\r\n * @param evIndex index of processed events\r\n * @returns \r\n */\r\n pushPopMidiEvent(ev: MidiTrackEvent, evIndex: number): MidiNoteOn | null {\r\n let rv: MidiNoteOn | null = null;\r\n if (!ev.noteNumber || typeof (ev.channel) === 'undefined') {\r\n return null;\r\n }\r\n if (this.midiOnNotes[ev.noteNumber]) {\r\n const ix = this.midiOnNotes[ev.noteNumber].findIndex((x) => x.channel === ev.channel);\r\n if (ix >= 0) {\r\n rv = JSON.parse(JSON.stringify(this.midiOnNotes[ev.noteNumber][ix]));\r\n this.midiOnNotes[ev.noteNumber].splice(ix);\r\n }\r\n }\r\n if (!this.midiOnNotes[ev.noteNumber]) {\r\n this.midiOnNotes[ev.noteNumber] = [];\r\n }\r\n if (ev.type === 'noteOn' && ev.velocity && ev.velocity > 0) {\r\n this.midiOnNotes[ev.noteNumber].push({\r\n note: ev.noteNumber,\r\n channel: ev.channel,\r\n smoIndex: evIndex\r\n });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Step 1 in the 3-step process. Collapse midi events into \r\n * a single EventSmoData for each distinct tick that contains\r\n * the metadata state, a duration, and note information.\r\n * @param trackEvents \r\n * @returns \r\n */\r\n collapseMidiEvents(trackEvents: MidiTrackEvent[]): EventSmoData[] {\r\n const isEot = (ev: MidiTrackEvent) => {\r\n if (!ev) {\r\n return true;\r\n }\r\n if (typeof (ev.type) === 'undefined') {\r\n return true;\r\n }\r\n return ev.type === 'endOfTrack';\r\n }\r\n if (this.eventIndex >= trackEvents.length) {\r\n this.eot = true;\r\n return [];\r\n }\r\n const rv: EventSmoData[] = [];\r\n let cur = trackEvents[0];\r\n let metadata: RunningMetadata = this.getMetadata(0);\r\n let curSmo = this.createNewEvent(metadata);\r\n let untrackedTicks = 0;\r\n let ticks = 0;\r\n while (this.eventIndex < trackEvents.length && !(this.eot)) {\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n if (cur.deltaTime > 0) {\r\n curSmo.durationTicks = this.getSmoTicks(cur.deltaTime);\r\n ticks += curSmo.durationTicks;\r\n // We only need to track note on/off events. Other events update the global\r\n // map, we need to keep track of the duration changes though.\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n if (curSmo.pitches.length === 0) {\r\n curSmo.isRest = true;\r\n }\r\n curSmo.durationTicks += untrackedTicks;\r\n untrackedTicks = 0;\r\n rv.push(curSmo);\r\n } else {\r\n untrackedTicks += curSmo.durationTicks\r\n }\r\n curSmo = this.createNewEvent(metadata);\r\n }\r\n curSmo.timeSignature = metadata.timeSignature;\r\n curSmo.tempo = metadata.tempo;\r\n curSmo.keySignature = metadata.keySignature;\r\n\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n const mm = this.pushPopMidiEvent(cur, rv.length);\r\n if (mm) {\r\n const npitch = SmoMusic.getEnharmonicInKey(SmoMusic.smoIntToPitch(mm.note - 12), metadata.keySignature);\r\n if (mm.smoIndex < rv.length) {\r\n rv[mm.smoIndex].pitches.push(npitch);\r\n rv[mm.smoIndex].isRest = false;\r\n } else {\r\n console.warn('bad index in event mm.smoIndex');\r\n }\r\n }\r\n } else if (cur.meta) {\r\n this.handleMetadata(cur, ticks);\r\n }\r\n metadata = this.getMetadata(ticks);\r\n this.eventIndex += 1;\r\n cur = trackEvents[this.eventIndex];\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n getTrackData(midi: any) {\r\n if (midi.header.format !== 0) {\r\n return midi.tracks;\r\n }\r\n const trackData: any[] = [];\r\n const trackHash: Record = {};\r\n const trackEvents: MidiTrackEvent[] = midi.tracks[0];\r\n trackEvents.forEach((ev) => {\r\n const channel = ev.channel ?? 0;\r\n if (!trackHash[channel]) {\r\n trackHash[channel] = [];\r\n }\r\n trackHash[channel].push(ev);\r\n });\r\n const trackKeys = Object.keys(trackHash);\r\n trackKeys.forEach((trackKey) => {\r\n trackData.push(trackHash[trackKey]);\r\n });\r\n return trackData;\r\n }\r\n\r\n /**\r\n * Convert the midi to a score as best we can. The conversion is made via a 3-step\r\n * process. \r\n * 1. consolidate all the MIDI events into individual note on/off events with a duration\r\n * 2. adjust the durations so the fit in with Smoosic measure lengths.\r\n * 3. Create the {@link SmoNote} objects from the events.\r\n * @returns \r\n */\r\n convert(): SmoScore {\r\n let staves: SmoSystemStaff[] = [];\r\n // go through the tracks. If this is midi format 1, split tracks into their own channels\r\n const tracks = this.getTrackData(this.midi);\r\n tracks.forEach((trackEvents: MidiTrackEvent[], trackIx: number) => {\r\n this.eventIndex = 0; // index into current track\r\n this.trackIndex = trackIx;\r\n this.eot = false;\r\n this.tieMap[trackIx] = [];\r\n const collapsed: EventSmoData[] = this.collapseMidiEvents(trackEvents);\r\n const expanded: EventSmoData[] = this.expandMidiEvents(collapsed);\r\n if (expanded.length > 0) {\r\n const staffDef = SmoSystemStaff.defaults;\r\n staffDef.staffId = trackIx;\r\n staffDef.measures = this.createNotesFromEvents(expanded);\r\n\r\n const staff = new SmoSystemStaff(staffDef);\r\n // For notes that are tied across measures, add the tie\r\n this.tieMap[trackIx].forEach((mm) => {\r\n const startMeasure = staffDef.measures[mm - 1];\r\n const endMeasure = staffDef.measures[mm];\r\n const endIx = startMeasure.voices[0].notes.length - 1;\r\n const startNote = startMeasure.voices[0].notes[endIx];\r\n const endNote = endMeasure.voices[0].notes[0];\r\n if (startNote.noteType === 'n' &&\r\n endNote.noteType === 'n' && SmoMusic.pitchArraysMatch(startNote.pitches, endNote.pitches)) {\r\n const tieDefs = SmoTie.defaults;\r\n tieDefs.startSelector = {\r\n staff: trackIx, measure: mm - 1, voice: 0, tick: endIx,\r\n pitches: []\r\n }\r\n tieDefs.endSelector = {\r\n staff: trackIx, measure: mm, voice: 0, tick: 0,\r\n pitches: []\r\n }\r\n tieDefs.lines.push({ from: 0, to: 0 });\r\n const tie = new SmoTie(tieDefs);\r\n staff.modifiers.push(tie);\r\n }\r\n });\r\n staves.push(staff);\r\n }\r\n });\r\n if (staves.length === 0) {\r\n return SmoScore.getEmptyScore(SmoScore.defaults);\r\n }\r\n let longestStave = staves[0];\r\n staves.forEach((staff) => {\r\n if (staff.measures.length > longestStave.measures.length) {\r\n longestStave = staff;\r\n }\r\n });\r\n staves.forEach((staff) => {\r\n let i = 0;\r\n for (i = staff.measures.length; i < longestStave.measures.length; ++i) {\r\n const measure = SmoMeasure.getDefaultMeasure(longestStave.measures[i]);\r\n measure.voices.push({ notes: SmoMeasure.getDefaultNotes(longestStave.measures[i]) });\r\n staff.measures.push(measure);\r\n }\r\n });\r\n const scoreDefs = SmoScore.defaults;\r\n scoreDefs.staves = staves;\r\n\r\n const rv = new SmoScore(scoreDefs);\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.65;\r\n layoutDefaults.globalLayout.zoomScale = 1.5;\r\n return rv;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /smo/midi/smoToMidi\r\n */\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoAudioScore } from '../xform/audioTrack';\r\nimport { SmoScore } from '../data/score';\r\ndeclare var MidiWriter: any;\r\n/* options: [{\r\n\r\n value: 1,\r\n label: 'Piano (bowed)'\r\n }, {\r\n value: 34,\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 27,\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]*/\r\n\r\nexport interface MidiTrackHash {\r\n track: any,\r\n lastMeasure: number\r\n}\r\n\r\n/**\r\n * Convert a {@link SmoScore} object to MIDI\r\n * @category SmoToMidi\r\n */\r\nexport class SmoToMidi {\r\n /**\r\n * @param score \r\n * @returns Midi byte array that can be sent to a file upload widget\r\n */\r\n static convert(score: SmoScore) {\r\n const beatTime = 128; // midi ticks per beat\r\n const converter = new SmoAudioScore(score, beatTime);\r\n const audioScore = converter.convert();\r\n const smoTracks = audioScore.tracks;\r\n let currentKey: string = 'C';\r\n const trackHash: Record = {};\r\n smoTracks.forEach((smoTrack, trackIx) => {\r\n let j = 0;\r\n if (typeof(trackHash[trackIx]) === 'undefined') {\r\n trackHash[trackIx] = {\r\n track: new MidiWriter.Track(),\r\n lastMeasure: 0\r\n };\r\n }\r\n const track = trackHash[trackIx].track;\r\n // eslint-disable-next-line\r\n audioScore.repeatMap.forEach((measureMap) => {\r\n for (j = measureMap.startMeasure; j <= measureMap.endMeasure; ++j) {\r\n // eslint-disable-next-line\r\n const notes = smoTrack.notes.filter((nn) => nn.selector.measure === j);\r\n notes.forEach((noteData) => { \r\n const selectorKey = SmoSelector.getMeasureKey(noteData.selector);\r\n if (smoTrack.tempoMap[selectorKey]) {\r\n track.setTempo(smoTrack.tempoMap[selectorKey]);\r\n }\r\n if (smoTrack.timeSignatureMap[selectorKey]) {\r\n const ts = smoTrack.timeSignatureMap[selectorKey];\r\n track.setTimeSignature(ts.numerator, ts.denominator);\r\n }\r\n if (smoTrack.keyMap[j]) {\r\n const ksString = smoTrack.keyMap[j];\r\n const ks = -1 * SmoMusic.getFlatsInKeySignature(ksString) + SmoMusic.getSharpsInKeySignature(ksString);\r\n track.setKeySignature(ks, 0);\r\n }\r\n if (noteData.noteType === 'r') {\r\n if (!noteData.padding) {\r\n const rest = new MidiWriter.NoteOffEvent({\r\n channel: trackIx + 1,\r\n pitch: 'C4',\r\n duration: 't' + noteData.duration\r\n });\r\n track.addEvent(rest);\r\n }\r\n } else {\r\n const pitchArray = SmoMusic.smoPitchesToMidiStrings(noteData.pitches);\r\n const velocity = Math.round(127 * noteData.volume);\r\n const midiNote = new MidiWriter.NoteEvent({\r\n channel: trackIx + 1,\r\n pitch: pitchArray,\r\n duration: 't' + noteData.duration,\r\n velocity\r\n });\r\n track.addEvent(midiNote);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key].track);\r\n const writer = new MidiWriter.Writer(tracks);\r\n return writer.buildFile();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef, Pitch } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoBarline, TimeSignature, SmoRehearsalMark, SmoMeasureModifierBase } from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie } from '../data/staffModifiers';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoTuplet } from '../data/tuplet';\r\n\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { SmoTempoText } from '../data/measureModifiers';\r\nimport { XmlToSmo } from './xmlToSmo';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\ninterface SlurXml {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n number: number\r\n}\r\n/**\r\n * Keep state of the xml document as we are generating it\r\n * @category SmoToXml\r\n */\r\nexport interface SmoState {\r\n divisions: number,\r\n measureNumber: number,\r\n measureIndex: number,\r\n transposeOffset: number,\r\n tickCount: number,\r\n voiceIndex: number,\r\n keySignature: string,\r\n voiceTickIndex: number,\r\n voice?: SmoVoice,\r\n partStaves: SmoSystemStaff[],\r\n staffPartIx: number, // index of staff in part\r\n slurs: SlurXml[],\r\n ties: SlurXml[],\r\n tieds: SlurXml[],\r\n lyricState: Record,\r\n measureTicks: number,\r\n note?: SmoNote,\r\n beamState: number,\r\n beamTicks: number,\r\n timeSignature?: TimeSignature,\r\n tempo?: SmoTempoText\r\n}\r\n\r\n/**\r\n * Convert {@link SmoScore} object into a music XML serialization\r\n * \r\n * usage: `xdoc: XmlDocument = SmoToXml.convert(score)`\r\n * @category SmoToXml\r\n */\r\nexport class SmoToXml {\r\n static get beamStates(): Record {\r\n return {\r\n none: 1, start: 2, continue: 3, stop: 4\r\n };\r\n }\r\n static get defaultState(): SmoState {\r\n return JSON.parse(JSON.stringify({\r\n divisions: 0,\r\n measureNumber: 0,\r\n measureIndex: 0,\r\n transposeOffset: 0,\r\n tickCount: 0,\r\n voiceIndex: 0,\r\n keySignature: 'C',\r\n voiceTickIndex: 0,\r\n slurs: [],\r\n ties: [],\r\n partStaves: [],\r\n lyricState: {},\r\n measureTicks: 0,\r\n beamState: 0,\r\n beamTicks: 4096\r\n }));\r\n }\r\n /**\r\n * see usage\r\n * @param score\r\n * @returns \r\n */\r\n static convert(score: SmoScore): XMLDocument {\r\n let staffGroupIx = 0;\r\n let staffIx = 0;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const dom = XmlHelpers.createRootElement(); \r\n const root = dom.children[0];\r\n const work = nn(root, 'work', null, '');\r\n nn(work, 'work-title', score.scoreInfo, 'title');\r\n const identification = nn(root, 'identification', null, '');\r\n const creator = nn(identification, 'creator', score.scoreInfo, 'composer');\r\n XmlHelpers.createAttributes(creator, { type: 'composer' });\r\n const encoding = nn(identification, 'encoding', null, '');\r\n nn(encoding, 'software', { software: 'Some pre-release version of Smoosic' }, 'software');\r\n const today = new Date();\r\n const dd = (n: number) => n < 10 ? '0' + n.toString() : n.toString()\r\n const dateString: string = today.getFullYear() + '-' + dd(today.getMonth() + 1) + '-' + dd(today.getDate());\r\n nn(encoding, 'encoding-date', dateString, 'date');\r\n const defaults = nn(root, 'defaults', null, '');\r\n const scaling = nn(defaults, 'scaling', null, '');\r\n const svgScale = score.layoutManager!.getGlobalLayout().svgScale;\r\n\r\n // music in vexflow is rendered at a font size of 38\r\n const mm = XmlToSmo.mmPerPixel * 42 * svgScale;\r\n nn(scaling, 'millimeters', { mm }, 'mm');\r\n nn(scaling, 'tenths', { tenths: 40 }, 'tenths');\r\n const pageLayout = nn(defaults, 'page-layout', null, '');\r\n const musicFont = nn(defaults, 'music-font', null, '');\r\n const engrave = score.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n XmlHelpers.createAttribute(musicFont, 'font-size', 38 * svgScale );\r\n if (engrave) {\r\n XmlHelpers.createAttribute(musicFont, 'font-family', engrave.family);\r\n }\r\n const tenthConversion = (25.2 / 96) * (40 / mm);\r\n const pageDims = {\r\n 'page-height': score.layoutManager!.globalLayout.pageHeight * tenthConversion,\r\n 'page-width' : score.layoutManager!.globalLayout.pageWidth * tenthConversion\r\n };\r\n Object.keys(pageDims).forEach((dim) => {\r\n nn(pageLayout, dim, pageDims, dim);\r\n });\r\n const margins = { 'left-margin': score.layoutManager!.pageLayouts[0].leftMargin * tenthConversion,\r\n 'right-margin': score.layoutManager!.pageLayouts[0].rightMargin * tenthConversion,\r\n 'top-margin': score.layoutManager!.pageLayouts[0].topMargin * tenthConversion,\r\n 'bottom-margin': score.layoutManager!.pageLayouts[0].bottomMargin * tenthConversion };\r\n const pageMargins = nn(pageLayout, 'page-margins', null, '');\r\n Object.keys(margins).forEach((margin) => {\r\n nn(pageMargins, margin, margins, margin);\r\n });\r\n const partList = nn(root, 'part-list', null, '');\r\n score.staves.forEach((staff) => {\r\n score.systemGroups.forEach((sg) => {\r\n if (sg.startSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'start' });\r\n const groupSymbol = nn(partGroup, 'group-symbol', null, '');\r\n let symbolText = 'line';\r\n if (sg.leftConnector === SmoSystemGroup.connectorTypes['brace']) {\r\n symbolText = 'brace';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['bracket']) {\r\n symbolText = 'bracket';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['double']) {\r\n symbolText = 'square';\r\n }\r\n groupSymbol.textContent = symbolText;\r\n } else if (sg.endSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'stop' });\r\n }\r\n });\r\n if (!staff.partInfo.stavesBefore) {\r\n const id = 'P' + staff.staffId;\r\n const scorePart = nn(partList, 'score-part', null, '');\r\n XmlHelpers.createAttributes(scorePart, { id });\r\n nn(scorePart, 'part-name', { name: staff.measureInstrumentMap[0].instrumentName }, 'name');\r\n nn(scorePart, 'part-abbreviation', { name: staff.measureInstrumentMap[0].abbreviation }, 'name');\r\n const staffInsts = staff.getInstrumentList();\r\n staffInsts.forEach((inst, ix) => {\r\n const scoreInstrument = nn(scorePart, 'score-instrument', null, '');\r\n XmlHelpers.createAttributes(scoreInstrument, { id: `${id}-${ix}` });\r\n const iname = nn(scoreInstrument, 'instrument-name', null, '');\r\n iname.textContent = inst.instrumentName;\r\n const iinst = nn(scoreInstrument, 'instrument-sound', null, '');\r\n // Hack: family is in the sample library, breaks dependency direction\r\n const family = SuiSampleMedia.getFamilyForInstrument(inst.instrument);\r\n iinst.textContent = `${family}.${inst.instrument}`;\r\n });\r\n }\r\n });\r\n const smoState: SmoState = SmoToXml.defaultState;\r\n for (staffIx = 0; staffIx < score.staves.length; ++staffIx) {\r\n smoState.partStaves = [];\r\n // If this is the second staff in a part, we've already output the music with the\r\n // first stave\r\n if (score.staves[staffIx].partInfo.stavesBefore > 0) {\r\n continue;\r\n }\r\n smoState.partStaves.push(score.staves[staffIx]);\r\n if (smoState.partStaves[0].partInfo.stavesAfter > 0 && staffIx < score.staves.length + 1) {\r\n smoState.partStaves.push(score.staves[staffIx + 1]);\r\n } \r\n const part = nn(root, 'part', null, '');\r\n const id = 'P' + smoState.partStaves[0].staffId;\r\n XmlHelpers.createAttributes(part, { id });\r\n smoState.measureNumber = 1;\r\n smoState.tickCount = 0;\r\n smoState.transposeOffset = 0;\r\n smoState.slurs = [];\r\n smoState.ties = [];\r\n smoState.tieds = [];\r\n smoState.lyricState = {};\r\n for (smoState.measureIndex = 0; smoState.measureIndex < smoState.partStaves[0].measures.length; ++smoState.measureIndex) {\r\n const measureElement = nn(part, 'measure', null, '');\r\n for (smoState.staffPartIx = 0; smoState.staffPartIx < smoState.partStaves.length; ++smoState.staffPartIx) {\r\n smoState.measureTicks = 0;\r\n // each staff in a part goes in the same measure element. If this is a subsequent part, we've already \r\n SmoToXml.measure(measureElement, smoState);\r\n }\r\n smoState.measureNumber += 1;\r\n }\r\n }\r\n \r\n return SmoToXml.prettifyXml(dom);\r\n }\r\n /**\r\n * MuseScore doesn't like minified xml, so we pretty-print it.\r\n * @param xmlDoc \r\n * @returns \r\n */\r\n static prettifyXml(xmlDoc: XMLDocument) {\r\n var xsltDoc = new DOMParser().parseFromString([\r\n // describes how we want to modify the XML - indent everything\r\n '',\r\n ' ',\r\n ' ', // change to just text() to strip space in text nodes\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n '',\r\n ].join('\\n'), 'application/xml');\r\n\r\n var xsltProcessor = new XSLTProcessor(); \r\n xsltProcessor.importStylesheet(xsltDoc);\r\n var resultDoc = xsltProcessor.transformToDocument(xmlDoc);\r\n return resultDoc;\r\n};\r\n /**\r\n * /score-partwise/part/measure\r\n * @param measureElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static measure(measureElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const measure = smoState.partStaves[smoState.staffPartIx].measures[smoState.measureIndex];\r\n if (smoState.measureNumber === 1 && measure.isPickup()) {\r\n smoState.measureNumber = 0;\r\n }\r\n if (measure.getForceSystemBreak()) {\r\n const printElement = nn(measureElement, 'print', null, '');\r\n XmlHelpers.createAttributes(printElement, { 'new-system': 'yes' });\r\n }\r\n XmlHelpers.createAttributes(measureElement, { number: smoState.measureNumber });\r\n SmoToXml.attributes(measureElement, measure, smoState);\r\n smoState.voiceIndex = 1;\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n smoState.beamTicks = 0;\r\n SmoToXml.barline(measureElement, smoState, true);\r\n measure.voices.forEach((voice) => {\r\n smoState.voiceTickIndex = 0;\r\n smoState.voice = voice;\r\n voice.notes.forEach((note) => {\r\n smoState.note = note;\r\n // Start wedge before note starts\r\n SmoToXml.direction(measureElement, smoState, true);\r\n SmoToXml.note(measureElement, measure, note, smoState);\r\n // End wedge on next tick\r\n SmoToXml.direction(measureElement, smoState, false);\r\n });\r\n // If this is the end of a voice, back up the time to align the voices\r\n if (measure.voices.length > smoState.voiceIndex) {\r\n smoState.voiceIndex += 1;\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration');\r\n } else {\r\n if (smoState.partStaves.length > 1 && smoState.staffPartIx + 1 < smoState.partStaves.length) {\r\n // If this is the end of a measure, and this is the first part in the staff, back it up for the second staff\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration'); \r\n smoState.tickCount += smoState.measureTicks;\r\n } else if (smoState.partStaves.length === 1) {\r\n smoState.tickCount += smoState.measureTicks;\r\n }\r\n }\r\n smoState.measureTicks = 0;\r\n });\r\n SmoToXml.barline(measureElement, smoState, false);\r\n }\r\n /**\r\n * /score-partwise/part/measure/barline\r\n * @param measureElement \r\n * @param smoState \r\n * @param start \r\n */\r\n static barline(measureElement: Element, smoState: SmoState, start: boolean) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let barlineElement = null;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (start) {\r\n if (measure!.getStartBarline().barline === SmoBarline.barlines.startRepeat) {\r\n barlineElement = nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'forward' });\r\n }\r\n }\r\n const voltas = staff.getVoltasForMeasure(measure!.measureNumber.measureIndex);\r\n const numArray: number[] = [];\r\n voltas.forEach((volta) => {\r\n if ((start && volta?.startSelector?.measure === measure.measureNumber.measureIndex) || \r\n (!start && volta?.endSelector?.measure === measure.measureNumber.measureIndex)) {\r\n numArray.push(volta.number);\r\n }\r\n });\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-heavy'} , 'style');\r\n } else if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.doubleBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-light'} , 'style');\r\n }\r\n if (numArray.length) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const numstr = numArray.join(',');\r\n const endElement = nn(barlineElement, 'ending', null, '');\r\n const endString = start ? 'start' : 'stop';\r\n XmlHelpers.createAttributes(endElement, { type: endString, number: numstr });\r\n }\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endRepeat) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'backward' });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static tied(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.tieds.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.tieds.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.tieds = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.tieds.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param noteElement\r\n * @param smoState \r\n */\r\n static tie(noteElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.ties.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.ties.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.ties = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.ties.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/notations/slur\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static slur(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForSlur = ((slurs: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n slurs.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getSlursStartingAt(selector) as SmoSlur[];\r\n const ends = staff.getSlursEndingAt(selector) as SmoSlur[];\r\n const remove: SlurXml[] = [];\r\n const newSlurs: SlurXml[] = [];\r\n ends.forEach((slur) => {\r\n const match = smoState.slurs.find((ss: any) => SmoSelector.eq(ss.startSelector, slur.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, slur.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: match.number, type: 'stop' });\r\n }\r\n });\r\n smoState.slurs.forEach((slur: any) => {\r\n if (remove.findIndex((rr) => rr.number === slur.number) < 0) {\r\n newSlurs.push(slur);\r\n }\r\n });\r\n smoState.slurs = newSlurs;\r\n starts.forEach((slur) => {\r\n const number = getNumberForSlur(smoState.slurs);\r\n smoState.slurs.push({\r\n startSelector: slur.startSelector,\r\n endSelector: slur.endSelector,\r\n number\r\n });\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: number, type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note/time-modification\r\n * /score-partwise/measure/note/tuplet\r\n * @param noteElement \r\n * @param notationsElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static tupletTime(noteElement: Element, tuplet: SmoTuplet, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const obj = {\r\n actualNotes: tuplet.numNotes, normalNotes: tuplet.notes_occupied\r\n };\r\n const timeModification = nn(noteElement, 'time-modification', null, '');\r\n nn(timeModification, 'actual-notes', obj, 'actualNotes');\r\n nn(timeModification, 'normal-notes', obj, 'normalNotes');\r\n }\r\n static tupletNotation(notationsElement: Element, tuplet: SmoTuplet, note: SmoNote) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (tuplet.getIndexOfNote(note) === 0) {\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: 1, type: 'start'\r\n });\r\n } else if (tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) {\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: 1, type: 'stop'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/measure/note/pitch\r\n * @param pitch \r\n * @param noteElement \r\n */\r\n static pitch(pitch: Pitch, noteElement: Element) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const accidentalOffset = ['bb', 'b', 'n', '#', '##'];\r\n const alter = accidentalOffset.indexOf(pitch.accidental) - 2;\r\n const pitchElement = nn(noteElement, 'pitch', null, '');\r\n nn(pitchElement, 'step', { letter: pitch.letter.toUpperCase() }, 'letter');\r\n nn(pitchElement, 'alter', { alter }, 'alter');\r\n nn(pitchElement, 'octave', pitch, 'octave');\r\n }\r\n /**\r\n * /score-partwise/measure/beam\r\n * @param noteElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static beamNote(noteElement: Element, smoState: SmoState) {\r\n if (!smoState.note) {\r\n return;\r\n }\r\n if (!smoState.voice) {\r\n return;\r\n }\r\n const nn = XmlHelpers.createTextElementChild;\r\n const note = smoState.note;\r\n const nextNote = (smoState.voiceTickIndex + 1) >= smoState.voice.notes.length ?\r\n null : smoState.voice.notes[smoState.voiceTickIndex + 1];\r\n const exceedTicks = smoState.beamTicks + note.tickCount >= note.beamBeats;\r\n // don't start a beam on a rest\r\n if (note.isRest() && smoState.beamState === SmoToXml.beamStates.none) {\r\n return;\r\n }\r\n let toBeam = SmoToXml.beamStates.none;\r\n if (note.tickCount <= 2048 && !exceedTicks) {\r\n // Explicit end beam, or no more notes to beam, so stop beam\r\n if (note.endBeam || nextNote === null) {\r\n if (smoState.beamState !== SmoToXml.beamStates.none) {\r\n toBeam = SmoToXml.beamStates.stop;\r\n }\r\n } else {\r\n // else if the next note is beamable, start or continue the beam\r\n if (nextNote.tickCount <= 2048) {\r\n toBeam = smoState.beamState === SmoToXml.beamStates.continue ?\r\n SmoToXml.beamStates.continue : SmoToXml.beamStates.start;\r\n }\r\n }\r\n }\r\n if (toBeam === SmoToXml.beamStates.start || toBeam === SmoToXml.beamStates.continue) {\r\n smoState.beamTicks += smoState.note.tickCount;\r\n } else {\r\n smoState.beamTicks = 0;\r\n }\r\n // slur is start/stop, beam is begin, end, gf\r\n if (toBeam === SmoToXml.beamStates.start) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'begin' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.continue;\r\n } else if (toBeam === SmoToXml.beamStates.continue) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'continue' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n } else if ((toBeam === SmoToXml.beamStates.stop) ||\r\n (toBeam === SmoToXml.beamStates.none && smoState.beamState !== SmoToXml.beamStates.none)) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'end' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/direction/direction-type\r\n * @param measureElement \r\n * @param smoState \r\n * @param beforeNote \r\n */\r\n static direction(measureElement: Element, smoState: SmoState, beforeNote: boolean) {\r\n let addDirection = false;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const directionElement = measureElement.ownerDocument.createElement('direction');\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const directionChildren: Element[] = [];\r\n const tempo = measure.getTempo();\r\n let displayTempo = false;\r\n if (smoState.tempo) {\r\n if (tempo.display && measure.measureNumber.measureIndex === 0 && smoState.measureTicks === 0) {\r\n displayTempo = true;\r\n } else if (tempo.display && !SmoTempoText.eq(smoState.tempo, tempo)) {\r\n displayTempo = true;\r\n }\r\n } else {\r\n displayTempo = true;\r\n }\r\n smoState.tempo = new SmoTempoText(tempo);\r\n if (beforeNote === true && smoState.staffPartIx === 0 && smoState.measureTicks === 0 && smoState.partStaves[0].staffId === 0) {\r\n const mark: SmoMeasureModifierBase | undefined = measure.getRehearsalMark();\r\n if (mark) {\r\n const rmtype = nn(directionElement, 'direction-type', null, '');\r\n const xmark = (mark as SmoRehearsalMark);\r\n const rElement = nn(rmtype, 'rehearsal', { mark: xmark.symbol }, 'mark');\r\n XmlHelpers.createAttribute(rElement, 'enclosure', 'square');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n addDirection = true;\r\n }\r\n }\r\n if (beforeNote === true && displayTempo) {\r\n addDirection = true;\r\n const tempoBpm = Math.round(tempo.bpm * tempo.beatDuration / 4096);\r\n const tempoElement = nn(directionElement, 'direction-type', null, '');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n let tempoText = tempo.tempoText;\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n tempoText = tempo.customText;\r\n }\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n nn(tempoElement, 'words', { words: tempoText }, 'words');\r\n } else if (tempo.tempoMode === SmoTempoText.tempoModes.customMode || tempo.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n const metronomeElement = nn(tempoElement, 'metronome', null, '');\r\n let durationType = 'quarter';\r\n let dotType = false;\r\n if (tempo.bpm >= 8192) {\r\n durationType = 'half';\r\n } else if (tempo.bpm < 4096) {\r\n durationType = 'eighth';\r\n }\r\n if (tempo.bpm === 6144 || tempo.bpm === 12288 || tempo.bpm === 3072) {\r\n dotType = true;\r\n }\r\n nn(metronomeElement, 'beat-unit', { beatUnit: durationType}, 'beatUnit');\r\n if (dotType) {\r\n nn(metronomeElement, 'beat-unit-dot', null, '');\r\n }\r\n nn(metronomeElement, 'per-minute', { tempo }, 'bpm');\r\n }\r\n // Sound is supposed to come last under 'direction' element\r\n const soundElement = measureElement.ownerDocument.createElement('sound');\r\n soundElement.setAttribute('tempo', tempoBpm.toString());\r\n directionChildren.push(soundElement);\r\n }\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n if (!beforeNote) {\r\n selector.tick -= 1;\r\n }\r\n const startWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n const endWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n if (endWedge && !beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n XmlHelpers.createAttributes(wedgeElement, { type: 'stop', spread: '20' });\r\n }\r\n if (startWedge && beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n const wedgeType = startWedge.hairpinType === SmoStaffHairpin.types.CRESCENDO ?\r\n 'crescendo' : 'diminuendo';\r\n XmlHelpers.createAttributes(wedgeElement, { type: wedgeType });\r\n }\r\n if (addDirection) {\r\n measureElement.appendChild(directionElement);\r\n directionChildren.forEach((el) => {\r\n directionElement.appendChild(el);\r\n })\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/note/lyric\r\n * @param noteElement \r\n * @param smoState \r\n */\r\n static lyric(noteElement: Element, smoState: SmoState) {\r\n const smoNote = smoState.note!;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const lyrics = smoNote.getTrueLyrics() as SmoLyric[];\r\n lyrics.forEach((lyric) => {\r\n let syllabic = 'single';\r\n if (lyric.isHyphenated() === false && lyric.isDash() === false) {\r\n if (smoState.lyricState[lyric.verse] === 'begin') {\r\n syllabic = 'end';\r\n } // else stays single\r\n } else {\r\n if (lyric.isHyphenated()) {\r\n syllabic = smoState.lyricState[lyric.verse] === 'begin' ?\r\n 'middle' : 'begin';\r\n } else if (lyric.isDash()) {\r\n syllabic = 'middle';\r\n }\r\n }\r\n smoState.lyricState[lyric.verse] = syllabic;\r\n const lyricElement = nn(noteElement, 'lyric', null, '');\r\n XmlHelpers.createAttribute(lyricElement, 'number', lyric.verse + 1);\r\n XmlHelpers.createAttribute(lyricElement, 'placement', 'below');\r\n XmlHelpers.createAttribute(lyricElement, 'default-y',\r\n -80 - 10 * lyric.verse);\r\n nn(lyricElement, 'syllabic', syllabic, '');\r\n nn(lyricElement, 'text', lyric.getText(), '');\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static note(measureElement: Element, measure: SmoMeasure, note: SmoNote, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let i = 0;\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n let j = 0;\r\n const noteElement = nn(measureElement, 'note', null, '');\r\n const isChord = i > 0;\r\n if (isChord) {\r\n nn(noteElement, 'chord', null, '');\r\n } else {\r\n }\r\n if (note.isRest()) {\r\n const restElement = nn(noteElement, 'rest', null, '');\r\n const step = { letter: note.pitches[i].letter.toUpperCase() };\r\n nn(restElement, 'display-step', step, 'letter');\r\n nn(restElement, 'display-octave', { ...note.pitches[i] }, 'octave');\r\n } else {\r\n SmoToXml.pitch(note.pitches[i], noteElement);\r\n }\r\n const duration = note.tickCount;\r\n smoState.measureTicks += duration;\r\n const tuplet = measure.getTupletForNote(note);\r\n nn(noteElement, 'duration', { duration }, 'duration');\r\n SmoToXml.tie(noteElement, smoState);\r\n nn(noteElement, 'voice', { voice: smoState.voiceIndex }, 'voice');\r\n let typeTickCount = note.tickCount;\r\n if (tuplet) {\r\n typeTickCount = tuplet.stemTicks;\r\n }\r\n nn(noteElement, 'type', { type: XmlHelpers.closestStemType(typeTickCount) },\r\n 'type');\r\n const dots = SmoMusic.smoTicksToVexDots(note.tickCount);\r\n for (j = 0; j < dots; ++j) {\r\n nn(noteElement, 'dot', null, '');\r\n }\r\n // time modification (tuplet) comes before notations which have tuplet beaming rules\r\n // also before stem\r\n if (tuplet) {\r\n SmoToXml.tupletTime(noteElement, tuplet, smoState);\r\n }\r\n if (note.flagState === SmoNote.flagStates.up) {\r\n nn(noteElement, 'stem', { direction: 'up' }, 'direction');\r\n }\r\n if (note.flagState === SmoNote.flagStates.down) {\r\n nn(noteElement, 'stem', { direction: 'down' }, 'direction');\r\n }\r\n // stupid musicxml requires beam to be last.\r\n const notationsElement = noteElement.ownerDocument.createElement('notations');\r\n // If a multi-part staff, we need to include 'staff' element\r\n if (smoState.partStaves.length > 1) {\r\n nn(noteElement, 'staff', { staffIx: smoState.staffPartIx + 1 }, 'staffIx');\r\n }\r\n if (!isChord) {\r\n SmoToXml.beamNote(noteElement, smoState);\r\n }\r\n if (!isChord) {\r\n SmoToXml.slur(notationsElement, smoState);\r\n }\r\n SmoToXml.tied(notationsElement, smoState);\r\n if (tuplet) {\r\n SmoToXml.tupletNotation(notationsElement, tuplet, note);\r\n }\r\n const ornaments = note.getOrnaments();\r\n if (ornaments.length) {\r\n const ornamentsElement = noteElement.ownerDocument.createElement('ornaments');\r\n ornamentsElement.textContent = '\\n';\r\n ornaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlOrnaments[ornament.ornament]) {\r\n const sub = nn(ornamentsElement, SmoOrnament.xmlOrnaments[ornament.ornament], null, '');\r\n XmlHelpers.createAttribute(sub, 'placement', 'above');\r\n }\r\n });\r\n if (ornamentsElement.children.length) {\r\n notationsElement.appendChild(ornamentsElement);\r\n }\r\n }\r\n const jazzOrnaments = note.getJazzOrnaments();\r\n const articulations = note.articulations;\r\n if (jazzOrnaments.length || articulations.length) {\r\n const articulationsElement = noteElement.ownerDocument.createElement('articulations');\r\n jazzOrnaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlJazz[ornament.ornament]) {\r\n nn(articulationsElement, SmoOrnament.xmlJazz[ornament.ornament], null, '');\r\n }\r\n });\r\n articulations.forEach((articulation) => {\r\n if (SmoArticulation.xmlArticulations[articulation.articulation]) {\r\n nn(articulationsElement, SmoArticulation.xmlArticulations[articulation.articulation], null, '');\r\n }\r\n });\r\n if (articulationsElement.children.length) {\r\n notationsElement.append(articulationsElement);\r\n }\r\n }\r\n if (notationsElement.children.length) {\r\n noteElement.appendChild(notationsElement);\r\n }\r\n // stupid musicxml requires beam to be laster.\r\n if (!isChord) {\r\n SmoToXml.lyric(noteElement, smoState);\r\n }\r\n }\r\n smoState.voiceTickIndex += 1;\r\n }\r\n /**\r\n * /score-partwise/measure/attributes/key\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static key(attributesElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n let fifths = 0;\r\n if (smoState.keySignature && measure.keySignature === smoState.keySignature) {\r\n return; // no key change\r\n }\r\n const flats = SmoMusic.getFlatsInKeySignature(measure.keySignature);\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (flats > 0) {\r\n fifths = -1 * flats;\r\n } else {\r\n fifths = SmoMusic.getSharpsInKeySignature(measure.keySignature);\r\n }\r\n const keyElement = nn(attributesElement, 'key', null, '');\r\n nn(keyElement, 'fifths', { fifths }, 'fifths');\r\n nn(keyElement, 'mode', { mode: 'major' }, 'major');\r\n smoState.keySignature = measure.keySignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/time\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static time(attributesElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const currentTs = (smoState.timeSignature as TimeSignature) ?? null;\r\n if (currentTs !== null && TimeSignature.equal(currentTs, measure.timeSignature)) {\r\n return;\r\n }\r\n smoState.timeSignature = measure.timeSignature;\r\n const time = { beats: measure.timeSignature.actualBeats, beatType: measure.timeSignature.beatDuration };\r\n const timeElement = nn(attributesElement, 'time', null, '');\r\n nn(timeElement, 'beats', time, 'beats');\r\n nn(timeElement, 'beat-type', time, 'beatType');\r\n smoState.timeSignature = measure.timeSignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/clef\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static clef(attributesElement: Element, smoState: SmoState) { \r\n smoState.partStaves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[smoState.measureIndex];\r\n let prevMeasure: SmoMeasure | null = null;\r\n let clefChange: Clef | null = null;\r\n if (smoState.measureIndex > 0) {\r\n prevMeasure = staff.measures[smoState.measureIndex - 1];\r\n }\r\n if (prevMeasure && prevMeasure.clef !== measure.clef) {\r\n clefChange = measure.clef;\r\n }\r\n // both clefs are defined in the first measure one time.\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n clefChange = measure.clef;\r\n }\r\n if (clefChange) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xmlClef = SmoMusic.clefSigns[clefChange];\r\n const clefElement = nn(attributesElement, 'clef', null, '');\r\n nn(clefElement, 'sign', xmlClef.sign, 'sign');\r\n if (typeof(xmlClef.line) !== 'undefined') {\r\n nn(clefElement, 'line', xmlClef, 'line');\r\n }\r\n if (typeof(xmlClef.octave) !== 'undefined') {\r\n nn(clefElement, 'clef-octave-change', xmlClef, 'octave');\r\n }\r\n XmlHelpers.createAttribute(clefElement, 'number', (staffIx + 1).toString());\r\n }\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static attributes(measureElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const attributesElement = measureElement.ownerDocument.createElement('attributes');\r\n if (smoState.divisions < 1) {\r\n nn(attributesElement, 'divisions', { divisions: 4096 }, 'divisions');\r\n smoState.divisions = 4096;\r\n }\r\n SmoToXml.key(attributesElement, measure, smoState);\r\n SmoToXml.time(attributesElement, smoState);\r\n // only call out number of staves in a part at the beginning of the part\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n SmoToXml.staves(attributesElement, smoState);\r\n }\r\n SmoToXml.clef(attributesElement, smoState);\r\n SmoToXml.transpose(attributesElement, smoState);\r\n if (attributesElement.children.length > 0) {\r\n // don't add an empty attributes element\r\n measureElement.appendChild(attributesElement);\r\n }\r\n }\r\n static staves(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const staffCount = staff.partInfo.stavesAfter > 0 ? 2 : 1;\r\n const nn = XmlHelpers.createTextElementChild;\r\n nn(attributesElement, 'staves', { staffCount: staffCount.toString() }, 'staffCount');\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/transpose\r\n * @param attributesElement\r\n * @param smoState \r\n * @returns \r\n */\r\n static transpose(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (measure.transposeIndex !== smoState.transposeOffset) {\r\n smoState.transposeOffset = measure.transposeIndex;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xposeElement = nn(attributesElement, 'transpose', null, '');\r\n const offset = (measure.transposeIndex * -1).toString();;\r\n nn(xposeElement, 'chromatic', { offset: offset }, 'offset');\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoArticulation, SmoNoteModifierBase, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch, PitchLetter } from '../data/common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBarline } from '../data/measureModifiers';\r\n\r\nexport interface XmlOrnamentData {\r\n ctor: string,\r\n params: Record\r\n}\r\nexport interface XmlSmoMap {\r\n xml: string, smo: string\r\n}\r\nexport interface XmlDurationAlteration {\r\n noteCount: number, noteDuration: number\r\n}\r\nexport interface XmlDuration {\r\n tickCount: number, duration: number, alteration: XmlDurationAlteration\r\n}\r\n/**\r\n * Store slur information when parsing xml\r\n */\r\nexport interface XmlSlurType {\r\n number: number, type: string, orientation: string, placement: string, controlX: number, controlY: number, selector: SmoSelector, yOffset: number\r\n}\r\n/**\r\n * Store tie information when parsing xml\r\n */\r\nexport interface XmlTieType {\r\n number: number, type: string, orientation: string, selector: SmoSelector, pitchIndex: number\r\n}\r\n/**\r\n * Store tuplet information when parsing xml\r\n */\r\nexport interface XmlTupletData {\r\n number: number, type: string\r\n}\r\nexport interface XmlEndingData {\r\n numbers: number[], type: string\r\n}\r\nexport type LyricSyllabic = 'begin' | 'end' | 'middle' | 'single';\r\n/**\r\n * Store lyric information when parsing xml\r\n */\r\nexport interface XmlLyricData {\r\n _text: string, verse: number | string, syllabic: LyricSyllabic\r\n}\r\n/**\r\n * Utilities for parsing and serialzing musicXML.\r\n * @category SmoToXml\r\n * */\r\nexport class XmlHelpers {\r\n /**\r\n * mxml note 'types', really s/b stem types.\r\n * For grace notes, we use the note type and not duration\r\n * to get the flag\r\n */\r\n static get noteTypesToSmoMap(): Record {\r\n return {\r\n 'breve': 8192 * 4,\r\n 'whole': 8192 * 2,\r\n 'half': 8192,\r\n 'quarter': 4096,\r\n 'eighth': 2048,\r\n '16th': 1024,\r\n '32nd': 512,\r\n '64th': 256,\r\n '128th': 128\r\n };\r\n }\r\n static readonly _ticksToNoteTypeMap: Record = smoSerialize.reverseMap(XmlHelpers.noteTypesToSmoMap) as Record;\r\n\r\n static get ticksToNoteTypeMap(): Record {\r\n return XmlHelpers._ticksToNoteTypeMap;\r\n }\r\n // ### closestStemType\r\n // smo infers the stem type from the duration, but other applications don't\r\n static closestStemType(ticks: number) {\r\n const nticks = SmoMusic.closestDurationTickLtEq(ticks);\r\n return XmlHelpers.ticksToNoteTypeMap[nticks];\r\n }\r\n static get beamStates(): Record {\r\n return {\r\n BEGIN: 1,\r\n END: 2,\r\n AUTO: 3\r\n };\r\n }\r\n static get ornamentXmlToSmoMap(): Record {\r\n return {\r\n staccato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.staccato } },\r\n tenuto: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.tenuto } },\r\n marcato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.marcato } },\r\n accent: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.accent } },\r\n doit: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.doitLong } },\r\n falloff: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.fall } },\r\n scoop: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.scoop } },\r\n 'delayed-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.after } },\r\n turn: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.on } },\r\n 'inverted-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turnInverted } },\r\n mordent: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordent } },\r\n 'inverted-mordent': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n shake: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n 'trill-mark': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.trill } },\r\n };\r\n }\r\n // ### createRootElement\r\n // Create score-partwise document with prelude\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=318086\r\n static createRootElement() {\r\n const doc = document.implementation.createDocument('', '', null);\r\n const rootElem = doc.createElement('score-partwise');\r\n const piElement = doc.createProcessingInstruction('xml', 'version=\"1.0\" encoding=\"UTF-8\"');\r\n rootElem.setAttribute('version', '3.1');\r\n doc.appendChild(rootElem);\r\n doc.insertBefore(piElement, rootElem);\r\n return doc;\r\n }\r\n // Parse an element whose child has a number in the textContent\r\n static getNumberFromElement(parent: Element, path: string, defaults: number): number {\r\n let rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const tval = XmlHelpers.getTextFromElement(parent, path, defaults);\r\n if (!tval) {\r\n return rv;\r\n }\r\n if (typeof (tval) === 'number') {\r\n return tval;\r\n }\r\n if (tval.indexOf('.')) {\r\n const tf = parseFloat(tval);\r\n rv = isNaN(tf) ? rv : tf;\r\n } else {\r\n const ff = parseInt(tval, 10);\r\n rv = isNaN(ff) ? rv : ff;\r\n }\r\n return rv;\r\n }\r\n // Parse an element whose child has a textContent\r\n static getTextFromElement(parent: Element, path: string, defaults: number | string | null): string {\r\n const rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const el = [...parent.getElementsByTagName(path)];\r\n if (!el.length) {\r\n return rv.toString();\r\n }\r\n return el[0].textContent as string;\r\n }\r\n static getNumberFromAttribute(node: Element, attribute: string, defaults: number) {\r\n const str = XmlHelpers.getTextFromAttribute(node, attribute, defaults.toString());\r\n const rv = parseInt(str, 10);\r\n if (isNaN(rv)) {\r\n return defaults;\r\n }\r\n return rv;\r\n }\r\n static getTextFromAttribute(node: Element, attribute: string, defaults: string): string {\r\n const rv = node.getAttribute(attribute);\r\n if (rv) {\r\n return rv;\r\n }\r\n return defaults;\r\n }\r\n // ### getChildrenFromPath\r\n // Like xpath, given ['foo', 'bar'] and parent element\r\n // 'moo' return any element /moo/foo/bar as an array of elements\r\n static getChildrenFromPath(parent: Element, pathAr: string[]): Element[] {\r\n let i = 0;\r\n let node = parent;\r\n const rv: Element[] = [];\r\n for (i = 0; i < pathAr.length; ++i) {\r\n const tag = pathAr[i];\r\n const nodes: Element[] = [...node.getElementsByTagName(tag)];\r\n if (nodes.length === 0) {\r\n return [];\r\n }\r\n if (i < pathAr.length - 1) {\r\n node = nodes[0];\r\n } else {\r\n nodes.forEach((nn: Element) => {\r\n rv.push(nn);\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n static getStemType(noteElement: Element) {\r\n const tt = XmlHelpers.getTextFromElement(noteElement, 'stem', '');\r\n if (tt === 'up') {\r\n return SmoNote.flagStates.up;\r\n } else if (tt === 'down') {\r\n return SmoNote.flagStates.down;\r\n }\r\n return SmoNote.flagStates.auto;\r\n }\r\n static getEnding(barlineNode: Element): XmlEndingData | null {\r\n const endingNodes = [...barlineNode.getElementsByTagName('ending')];\r\n if (!endingNodes.length) {\r\n return null;\r\n }\r\n const attrs = XmlHelpers.nodeAttributes(endingNodes[0]);\r\n if (attrs.number && attrs.type) {\r\n return {\r\n numbers: attrs.number.split(',').map((x) => parseInt(x, 10)),\r\n type: attrs.type\r\n };\r\n }\r\n return null;\r\n }\r\n static getBarline(barlineNode: Element): number {\r\n const rptNode = [...barlineNode.getElementsByTagName('repeat')];\r\n if (rptNode.length) {\r\n const repeatattr = XmlHelpers.nodeAttributes(rptNode[0]);\r\n return repeatattr.direction === 'forward' ? SmoBarline.barlines.startRepeat : SmoBarline.barlines.endRepeat;\r\n }\r\n const styleText = XmlHelpers.getTextFromElement(barlineNode, 'bar-style', '');\r\n if (styleText.length) {\r\n const double = styleText.indexOf('-') >= 0;\r\n const heavy = styleText.indexOf('heavy') >= 0;\r\n const light = styleText.indexOf('light') >= 0;\r\n if (double && heavy && light) {\r\n return SmoBarline.barlines.endBar;\r\n }\r\n if (double) {\r\n return SmoBarline.barlines.doubleBar;\r\n }\r\n }\r\n return SmoBarline.barlines.singleBar;\r\n }\r\n \r\n // ### assignDefaults\r\n // Map SMO layout data from xml layout data (default node)\r\n static assignDefaults(node: Element, defObj: any, parameters: XmlSmoMap[]) {\r\n parameters.forEach((param) => {\r\n if (!isNaN(parseInt(defObj[param.smo], 10))) {\r\n const smoParam = param.smo;\r\n const xmlParam = param.xml;\r\n defObj[smoParam] = XmlHelpers.getNumberFromElement(node, xmlParam, defObj[smoParam]);\r\n }\r\n });\r\n }\r\n // ### nodeAttributes\r\n // turn the attributes of an element into a JS hash\r\n static nodeAttributes(node: Element): Record {\r\n const rv: Record = {};\r\n node.getAttributeNames().forEach((attr) => {\r\n const aval: string | null = node.getAttribute(attr);\r\n if (aval) {\r\n rv[attr] = aval;\r\n }\r\n });\r\n return rv;\r\n }\r\n // Some measures have staff ID, some don't.\r\n // convert xml 1 index to array 0 index\r\n static getStaffId(node: Element) {\r\n const staff = [...node.getElementsByTagName('staff')];\r\n if (staff.length && staff[0].textContent) {\r\n return parseInt(staff[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static noteBeamState(noteNode: Element) {\r\n const beamNodes = [...noteNode.getElementsByTagName('beam')];\r\n if (!beamNodes.length) {\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n const beamText = beamNodes[0].textContent;\r\n if (beamText === 'begin') {\r\n return XmlHelpers.beamStates.BEGIN;\r\n } else if (beamText === 'end') {\r\n return XmlHelpers.beamStates.END;\r\n }\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n // same with notes and voices. same convert\r\n static getVoiceId(node: Element) {\r\n const voice = [...node.getElementsByTagName('voice')];\r\n if (voice.length && voice[0].textContent) {\r\n return parseInt(voice[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static smoPitchFromNote(noteNode: Element, defaultPitch: Pitch): Pitch {\r\n const accidentals = ['bb', 'b', 'n', '#', '##'];\r\n const letter: PitchLetter = XmlHelpers.getTextFromElement(noteNode, 'step', defaultPitch.letter).toLowerCase() as PitchLetter;\r\n const octave = XmlHelpers.getNumberFromElement(noteNode, 'octave', defaultPitch.octave);\r\n const xaccidental = XmlHelpers.getNumberFromElement(noteNode, 'alter', 0);\r\n return { letter, accidental: accidentals[xaccidental + 2], octave };\r\n }\r\n static isGrace(noteNode: Element) {\r\n const path = XmlHelpers.getChildrenFromPath(noteNode, ['grace']);\r\n return path?.length > 0;\r\n }\r\n static isSystemBreak(measureNode: Element) {\r\n const printNodes = measureNode.getElementsByTagName('print');\r\n if (printNodes.length) {\r\n const attrs = XmlHelpers.nodeAttributes(printNodes[0]);\r\n if (typeof (attrs['new-system']) !== 'undefined') {\r\n return attrs['new-system'] === 'yes';\r\n }\r\n }\r\n return false;\r\n }\r\n // ### durationFromType\r\n // Get the SMO tick duration of a note, based on the XML type element (quarter, etc)\r\n static durationFromType(noteNode: Element, def: number): number {\r\n const typeNodes = [...noteNode.getElementsByTagName('type')];\r\n if (typeNodes.length) {\r\n const txt = typeNodes[0].textContent;\r\n if (txt && XmlHelpers.noteTypesToSmoMap[txt]) {\r\n return XmlHelpers.noteTypesToSmoMap[txt];\r\n }\r\n }\r\n return def;\r\n }\r\n // ### durationFromNode\r\n // the true duration value, used to handle forward/backward\r\n static durationFromNode(noteNode: Element, def: number) {\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n const duration = parseInt(durationNodes[0].textContent, 10);\r\n return duration;\r\n }\r\n return def;\r\n }\r\n static ticksFromDuration(noteNode: Element, divisions: number, def: number): XmlDuration {\r\n const rv: XmlDuration = { tickCount: def, duration: def / divisions, alteration: { noteCount: 1, noteDuration: 1 } };\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n const timeAlteration = XmlHelpers.getTimeAlteration(noteNode);\r\n // different ways to declare note duration - from type is the graphical\r\n // type, SMO uses ticks for everything\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n rv.duration = parseInt(durationNodes[0].textContent, 10);\r\n rv.tickCount = 4096 * (rv.duration / divisions);\r\n } else {\r\n rv.tickCount = XmlHelpers.durationFromType(noteNode, def);\r\n rv.duration = (divisions / 4096) * rv.tickCount;\r\n }\r\n // If this is a tuplet, we adjust the note duration back to the graphical type\r\n // and SMO will create the tuplet after. We keep track of tuplet data though for beaming\r\n if (timeAlteration) {\r\n rv.tickCount = (rv.tickCount * timeAlteration.noteCount) / timeAlteration.noteDuration;\r\n rv.alteration = timeAlteration;\r\n }\r\n return rv;\r\n }\r\n \r\n static getTieData(noteNode: Element, selector: SmoSelector, pitchIndex: number): XmlTieType[] {\r\n const rv: XmlTieType[] = [];\r\n let number = 0;\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tied')];\r\n slurNodes.forEach((slurNode) => {\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orientation', 'auto');\r\n const type = slurNode.getAttribute('type') as string;\r\n number = XmlHelpers.getNumberFromAttribute(slurNode, 'number', 1);\r\n rv.push({ number, type, orientation, selector, pitchIndex });\r\n });\r\n });\r\n return rv;\r\n }\r\n static getSlurData(noteNode: Element, selector: SmoSelector): XmlSlurType[] {\r\n const rv: XmlSlurType[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('slur')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orienation', 'auto');\r\n const placement = XmlHelpers.getTextFromAttribute(slurNode, 'placement', 'auto');\r\n const controlX = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-x', 0);\r\n // Y coordinates are reversed from music XML to SVG, hence the -1\r\n const controlY = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-y', 15) * -1;\r\n const slurInfo = { number, type, orientation, placement, controlX, controlY, selector, invert: false, yOffset: 0 };\r\n rv.push(slurInfo);\r\n });\r\n });\r\n return rv;\r\n }\r\n static getCrescendoData(directionElement: Element) {\r\n let rv = {};\r\n const nNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n nNodes.forEach((nNode) => {\r\n rv = { type: nNode.getAttribute('type') };\r\n });\r\n return rv;\r\n }\r\n static getTupletData(noteNode: Element): XmlTupletData[] {\r\n const rv: XmlTupletData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tuplet')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n rv.push({ number, type });\r\n });\r\n });\r\n return rv;\r\n }\r\n static articulationsAndOrnaments(noteNode: Element): SmoNoteModifierBase[] {\r\n const rv: SmoNoteModifierBase[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n ['articulations', 'ornaments'].forEach((typ) => {\r\n const articulations = [...nNode.getElementsByTagName(typ)];\r\n articulations.forEach((articulation) => {\r\n Object.keys(XmlHelpers.ornamentXmlToSmoMap).forEach((key) => {\r\n if (articulation.getElementsByTagName(key).length) {\r\n const ctor = eval('globalThis.Smo.' + XmlHelpers.ornamentXmlToSmoMap[key].ctor);\r\n rv.push(new ctor(XmlHelpers.ornamentXmlToSmoMap[key].params));\r\n }\r\n });\r\n });\r\n });\r\n });\r\n return rv;\r\n }\r\n static lyrics(noteNode: Element): XmlLyricData[] {\r\n const rv: XmlLyricData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('lyric')];\r\n nNodes.forEach((nNode) => {\r\n let verse = nNode.getAttribute('number');\r\n const text = XmlHelpers.getTextFromElement(nNode, 'text', '_');\r\n const name = nNode.getAttribute('name') as string;\r\n const syllabic = XmlHelpers.getTextFromElement(nNode, 'syllabic', 'end') as LyricSyllabic;\r\n // Per xml spec, verse can be specified by a string (name), as in 'chorus'\r\n if (!verse) {\r\n verse = name;\r\n }\r\n const obj: XmlLyricData = { _text: text, verse, syllabic };\r\n rv.push(obj);\r\n });\r\n return rv;\r\n }\r\n\r\n static getTimeAlteration(noteNode: Element): XmlDurationAlteration | null {\r\n const timeNodes = XmlHelpers.getChildrenFromPath(noteNode, ['time-modification']);\r\n if (timeNodes.length) {\r\n return {\r\n noteCount: XmlHelpers.getNumberFromElement(timeNodes[0], 'actual-notes', 1),\r\n noteDuration: XmlHelpers.getNumberFromElement(timeNodes[0], 'normal-notes', 1)\r\n };\r\n }\r\n return null;\r\n }\r\n // ### createTextElementChild\r\n // In: ../parent\r\n // Out: ../parent/elementName/obj[field]\r\n // returns elementName element. If obj is null, just creates and returns child\r\n // if obj is a string, it uses it as the text value\r\n static createTextElementChild(parentElement: Element, elementName: string, obj: any, field: string): Element {\r\n const el = parentElement.ownerDocument.createElement(elementName);\r\n if (obj) {\r\n if (typeof (obj) === 'string') {\r\n el.textContent = obj;\r\n } else {\r\n el.textContent = obj[field];\r\n }\r\n }\r\n parentElement.appendChild(el);\r\n return el;\r\n }\r\n static createAttributes(element: Element, obj: any) {\r\n Object.keys(obj).forEach((key) => {\r\n const attr = element.ownerDocument.createAttribute(key);\r\n attr.value = obj[key];\r\n element.setAttributeNode(attr);\r\n });\r\n }\r\n static createAttribute(element: Element, name: string, value: any) {\r\n const obj: any = {};\r\n obj[name] = value;\r\n XmlHelpers.createAttributes(element, obj);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { XmlHelpers, XmlLyricData, XmlDurationAlteration, XmlTieType, XmlSlurType, XmlTupletData } from './xmlHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoSystemGroup, SmoFormattingManager } from '../data/scoreModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoTie, SmoStaffHairpin, SmoSlur, SmoSlurParams, SmoInstrument, SmoInstrumentParams, TieLine } from '../data/staffModifiers';\r\nimport { SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoTempoText } from '../data/measureModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoLyric, SmoDynamicText, SmoGraceNote } from '../data/noteModifiers';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { Clef } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\n\r\nexport interface XmlClefInfo {\r\n clef: string, staffId: number\r\n}\r\nexport interface XmlVoiceInfo {\r\n notes: SmoNote[],\r\n ticksUsed: number\r\n}\r\nexport interface XmlStaffInfo {\r\n clefInfo: XmlClefInfo,\r\n measure: SmoMeasure | null,\r\n voices: Record\r\n}\r\nexport interface XmlBeamGroupInfo {\r\n ticks: number, notes: number\r\n}\r\nexport interface XmlSystemInfo {\r\n startSelector: SmoSelector, endSelector: SmoSelector, leftConnector: number\r\n}\r\nexport interface XmlStaffGroupInfo {\r\n start: number, length: number\r\n}\r\n/**\r\n * Wedge is a hairpin/cresc.\r\n */\r\nexport interface XmlWedgeInfo {\r\n type: string\r\n}\r\nexport interface XmlWedgeState {\r\n type: string, start: number\r\n}\r\nexport interface XmlHairpinInfo {\r\n type: string, start: number, end: number\r\n}\r\nexport interface XmlDynamicInfo {\r\n dynamic: string, offset: number\r\n}\r\nexport interface XmlCompletedTies {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n fromPitch: number,\r\n toPitch: number\r\n}\r\nexport interface XmlCompletedTuplet {\r\n tuplet: SmoTuplet, staffId: number, voiceId: number\r\n}\r\nexport interface XmlTupletState {\r\n start: SmoSelector,\r\n end: SmoSelector\r\n}\r\nexport interface XmlEnding {\r\n start: number,\r\n end: number,\r\n number: number\r\n}\r\nexport interface XmlPartGroup {\r\n partNum: number,\r\n group: SmoSystemGroup,\r\n parts: number[]\r\n}\r\n/**\r\n * Keep state of musical objects while parsing music xml\r\n * @category SmoToXml\r\n * */\r\nexport class XmlState {\r\n static get defaults() {\r\n return {\r\n divisions: 4096, tempo: new SmoTempoText(SmoTempoText.defaults), timeSignature: '4/4', keySignature: 'C',\r\n clefInfo: [], staffGroups: [], smoStaves: []\r\n };\r\n }\r\n clefInfo: XmlClefInfo[] = [];\r\n systems: XmlSystemInfo[] = [];\r\n staffGroups: XmlStaffGroupInfo[] = [];\r\n smoStaves: SmoSystemStaff[] = [];\r\n slurs: Record = {};\r\n wedges: XmlWedgeState = {} as XmlWedgeState;\r\n hairpins: XmlHairpinInfo[] = [];\r\n instrument: SmoInstrumentParams = SmoInstrument.defaults;\r\n instrumentMap: Record = {};\r\n globalCursor = 0;\r\n staffVoiceHash: Record = {};\r\n endingMap: Record = {};\r\n startRepeatMap: Record = {};\r\n endRepeatMap: Record = {};\r\n startBarline: number = SmoBarline.barlines.singleBar;\r\n endBarline: number = SmoBarline.barlines.singleBar;\r\n measureIndex = -1;\r\n completedSlurs: SmoSlurParams[] = [];\r\n completedTies: XmlTieType[] = [];\r\n verseMap: Record = {};\r\n measureNumber: number = 0;\r\n formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n tuplets: Record = {};\r\n tickCursor: number = 0;\r\n tempo: SmoTempoText = new SmoTempoText(SmoTempoText.defaults);\r\n staffArray: XmlStaffInfo[] = [];\r\n staffIndex: number = 0;\r\n graceNotes: SmoGraceNote[] = [];\r\n currentDuration: number = 0;\r\n beamGroups: Record = {};\r\n dynamics: XmlDynamicInfo[] = [];\r\n previousNote: SmoNote = new SmoNote(SmoNote.defaults);\r\n completedTuplets: XmlCompletedTuplet[] = [];\r\n newTitle: boolean = false;\r\n divisions: number = 4096;\r\n keySignature: string = 'c';\r\n timeSignature: string = '4/4';\r\n voiceIndex: number = 0;\r\n pixelsPerTenth: number = 0.4;\r\n musicFontSize: number = 16;\r\n partId: string = '';\r\n rehearsalMark = '';\r\n rehearsalMarks: Record = {};\r\n parts: Record = {}; \r\n openPartGroup: XmlPartGroup | null = null;\r\n // Initialize things that persist throughout a staff\r\n // likc hairpins and slurs\r\n initializeForPart() {\r\n this.slurs = {};\r\n this.wedges = {} as XmlWedgeState;\r\n this.hairpins = [];\r\n this.globalCursor = 0;\r\n this.staffVoiceHash = {};\r\n this.measureIndex = -1;\r\n this.completedSlurs = [];\r\n this.verseMap = {};\r\n this.instrument.keyOffset = 0;\r\n this.instrumentMap = {};\r\n this.partId = '';\r\n this.clefInfo = [];\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n // ### initializeForMeasure\r\n // reset state for a new measure: beam groups, tuplets\r\n // etc. that don't cross measure boundaries\r\n initializeForMeasure(measureElement: Element) {\r\n const oldMeasure = this.measureNumber;\r\n this.measureNumber =\r\n parseInt(measureElement.getAttribute('number') as string, 10) - 1;\r\n if (isNaN(this.measureNumber)) {\r\n this.measureNumber = oldMeasure + 1;\r\n }\r\n this.tuplets = {};\r\n this.tickCursor = 0;\r\n this.tempo = SmoMeasureModifierBase.deserialize(this.tempo.serialize());\r\n this.tempo.display = false;\r\n this.staffArray = [];\r\n this.graceNotes = [];\r\n this.currentDuration = 0;\r\n this.beamGroups = {};\r\n this.completedTuplets = [];\r\n this.dynamics = [];\r\n this.startBarline = SmoBarline.barlines.singleBar;\r\n this.endBarline = SmoBarline.barlines.singleBar;\r\n this.previousNote = new SmoNote(SmoNote.defaults);\r\n this.measureIndex += 1;\r\n this.rehearsalMark = '';\r\n }\r\n // ### initializeStaff\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part, so we treat them as a hash.\r\n // staff IDs persist per part but are sequential.\r\n initializeStaff(staffIndex: number, voiceIndex: number) {\r\n // If no clef is specified, default to treble\r\n if (typeof (this.staffArray[staffIndex]) === 'undefined') {\r\n this.staffArray.push({ clefInfo: { clef: 'treble', staffId: this.staffIndex }, measure: null, voices: {} });\r\n }\r\n if (typeof (this.staffArray[staffIndex].voices[voiceIndex]) === 'undefined') {\r\n this.staffArray[staffIndex].voices[voiceIndex] = { notes: [], ticksUsed: 0 };\r\n // keep track of 0-indexed voice for slurs and other modifiers\r\n if (!this.staffVoiceHash[staffIndex]) {\r\n this.staffVoiceHash[staffIndex] = [];\r\n }\r\n if (this.staffVoiceHash[staffIndex].indexOf(voiceIndex) < 0) {\r\n this.staffVoiceHash[staffIndex].push(voiceIndex);\r\n }\r\n // The smo 0-indexed voice index, used in selectors\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n // ### updateStaffGroups\r\n // once everything is parsed, figure out how to group the staves\r\n updateStaffGroups() {\r\n this.systems = [];\r\n this.staffGroups.forEach((staffGroup) => {\r\n const len = this.smoStaves[staffGroup.start].measures.length;\r\n const startSelector = SmoSelector.default;\r\n startSelector.staff = staffGroup.start;\r\n startSelector.measure = 0;\r\n const endSelector = SmoSelector.default;\r\n endSelector.staff = staffGroup.start + (staffGroup.length - 1);\r\n endSelector.measure = len;\r\n const grpParams = SmoSystemGroup.defaults;\r\n grpParams.startSelector = startSelector;\r\n grpParams.endSelector = endSelector;\r\n grpParams.leftConnector = SmoSystemGroup.connectorTypes.brace;\r\n this.systems.push(\r\n new SmoSystemGroup(grpParams)\r\n );\r\n });\r\n }\r\n addLyric(note: SmoNote, lyricData: XmlLyricData) {\r\n if (typeof (this.verseMap[lyricData.verse]) === 'undefined') {\r\n const keys = Object.keys(this.verseMap);\r\n this.verseMap[lyricData.verse] = keys.length;\r\n }\r\n lyricData.verse = this.verseMap[lyricData.verse];\r\n const params = SmoLyric.defaults;\r\n params.text = lyricData._text;\r\n params.verse = lyricData.verse;\r\n if (lyricData.syllabic === 'begin' || lyricData.syllabic === 'middle') {\r\n params.text += '-';\r\n }\r\n const lyric = new SmoLyric(params);\r\n note.addLyric(lyric);\r\n }\r\n /**\r\n * process a wedge aka hairpin dynamic\r\n * @param wedgeInfo \r\n */\r\n processWedge(wedgeInfo: XmlWedgeInfo) {\r\n if (wedgeInfo.type) {\r\n // If we already know about this wedge, it must have been\r\n // started, so complete it\r\n if (this.wedges.type) {\r\n this.hairpins.push({\r\n type: this.wedges.type,\r\n start: this.wedges.start,\r\n end: this.tickCursor + this.globalCursor\r\n });\r\n this.wedges = {} as XmlWedgeState;\r\n } else {\r\n this.wedges.type = wedgeInfo.type;\r\n this.wedges.start = this.tickCursor + this.globalCursor;\r\n }\r\n }\r\n }\r\n // ### backtrackHairpins\r\n // For the measure just parsed, find the correct tick for the\r\n // beginning and end of hairpins, if a hairpin stop directive\r\n // was received. These are not associated with a staff or voice, so\r\n // we use the first one in the measure element for both\r\n backtrackHairpins(smoStaff: SmoSystemStaff, staffId: number) {\r\n this.hairpins.forEach((hairpin) => {\r\n let hpMeasureIndex = this.measureIndex;\r\n let hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n let startTick = hpMeasure.voices[0].notes.length - 1;\r\n let hpTickCount = this.globalCursor; // All ticks read so far\r\n const endSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0,\r\n tick: -1, pitches: []\r\n };\r\n while (hpMeasureIndex >= 0 && hpTickCount > hairpin.start) {\r\n if (endSelector.tick < 0 && hpTickCount <= hairpin.end) {\r\n endSelector.tick = startTick;\r\n }\r\n hpTickCount -= hpMeasure.voices[0].notes[startTick].ticks.numerator;\r\n if (hpTickCount > hairpin.start) {\r\n startTick -= 1;\r\n if (startTick < 0) {\r\n hpMeasureIndex -= 1;\r\n hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n startTick = hpMeasure.voices[0].notes.length - 1;\r\n }\r\n }\r\n }\r\n\r\n const params = SmoStaffHairpin.defaults;\r\n params.startSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0, tick: startTick, pitches: []\r\n };\r\n params.endSelector = endSelector;\r\n params.hairpinType = hairpin.type === 'crescendo' ? SmoStaffHairpin.types.CRESCENDO : SmoStaffHairpin.types.DECRESCENDO;\r\n const smoHp = new SmoStaffHairpin(params);\r\n smoStaff.modifiers.push(smoHp);\r\n });\r\n this.hairpins = [];\r\n }\r\n\r\n // ### updateDynamics\r\n // Based on note just parsed, put the dynamics on the closest\r\n // note, based on the offset of dynamic\r\n updateDynamics() {\r\n const smoNote = this.previousNote;\r\n const tickCursor = this.tickCursor;\r\n const newArray: XmlDynamicInfo[] = [];\r\n this.dynamics.forEach((dynamic) => {\r\n if (tickCursor >= dynamic.offset) {\r\n const modParams = SmoDynamicText.defaults;\r\n modParams.text = dynamic.dynamic;\r\n // TODO: change the smonote name of this interface\r\n smoNote.addDynamic(new SmoDynamicText(modParams));\r\n } else {\r\n newArray.push(dynamic);\r\n }\r\n });\r\n this.dynamics = newArray;\r\n }\r\n // For the given voice, beam the notes according to the\r\n // note beam length\r\n backtrackBeamGroup(voice: XmlVoiceInfo, beamGroup: XmlBeamGroupInfo) {\r\n let i = 0;\r\n for (i = 0; i < beamGroup.notes; ++i) {\r\n const note = voice.notes[voice.notes.length - (i + 1)];\r\n if (!note) {\r\n console.warn('no note for beam group');\r\n return;\r\n }\r\n note.endBeam = i === 0;\r\n note.beamBeats = beamGroup.ticks;\r\n }\r\n }\r\n // ### updateBeamState\r\n // Keep track of beam instructions found while parsing note element\r\n // includes time alteration from tuplets\r\n updateBeamState(beamState: number, alteration: XmlDurationAlteration, voice: XmlVoiceInfo, voiceIndex: number) {\r\n const note = voice.notes[voice.notes.length - 1];\r\n if (beamState === XmlHelpers.beamStates.BEGIN) {\r\n this.beamGroups[voiceIndex] = {\r\n ticks: (note.tickCount * alteration.noteCount) / alteration.noteDuration,\r\n notes: 1\r\n };\r\n } else if (this.beamGroups[voiceIndex]) {\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).ticks += note.tickCount;\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).notes += 1;\r\n if (beamState === XmlHelpers.beamStates.END) {\r\n this.backtrackBeamGroup(voice, this.beamGroups[voiceIndex] as XmlBeamGroupInfo);\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n }\r\n updateTieStates(tieInfos: XmlTieType[]) {\r\n tieInfos.forEach((tieInfo) => {\r\n // tieInfo = { number, type, orientation, selector, pitchIndex }\r\n if (tieInfo.type === 'start') {\r\n this.completedTies.push(tieInfo);\r\n }\r\n });\r\n }\r\n updateEndings(barlineNode: Element) {\r\n const findStartEnding = (endingNumber: number, ix: number): XmlEnding | null | undefined => {\r\n const endingIx = Object.keys(this.endingMap).map((xx) => parseInt(xx, 10));\r\n let gt = -1;\r\n let rv: XmlEnding | null = null;\r\n endingIx.forEach((ee) => {\r\n if (ee > gt && ee <= ix) {\r\n const endings = this.endingMap[ee];\r\n const txt = endings.find((xx: XmlEnding) => xx.number === endingNumber);\r\n if (txt) {\r\n gt = ee;\r\n rv = txt;\r\n }\r\n if (endings.findIndex((xx: XmlEnding) => xx.number === endingNumber) >= 0) {\r\n gt = ee;\r\n }\r\n }\r\n });\r\n if (gt >= 0) {\r\n return rv;\r\n } else {\r\n return null;\r\n }\r\n };\r\n const ending = XmlHelpers.getEnding(barlineNode);\r\n if (ending) {\r\n if (ending.type === 'start') {\r\n const numbers = ending.numbers;\r\n numbers.forEach((nn) => {\r\n const endings: XmlEnding[] | undefined = this.endingMap[this.measureIndex];\r\n if (!endings) {\r\n this.endingMap[this.measureIndex] = [];\r\n }\r\n const inst = this.endingMap[this.measureIndex].find((ee) => ee.number === nn);\r\n if (!inst) {\r\n this.endingMap[this.measureIndex].push({\r\n start: this.measureIndex,\r\n end: -1,\r\n number: nn\r\n });\r\n }\r\n });\r\n } else {\r\n ending.numbers.forEach((nn) => {\r\n const inst = findStartEnding(nn, this.measureIndex);\r\n if (!inst) {\r\n console.warn('bad ending ' + nn + ' at ' + this.measureIndex);\r\n } else {\r\n inst.end = this.measureIndex;\r\n }\r\n });\r\n }\r\n }\r\n const barline = XmlHelpers.getBarline(barlineNode);\r\n if (barline === SmoBarline.barlines.startRepeat) {\r\n this.startBarline = barline;\r\n } else {\r\n this.endBarline = barline;\r\n }\r\n }\r\n\r\n /**\r\n * While parsing a measure,\r\n * on a slur element, either complete a started\r\n * slur or start a new one.\r\n * @param slurInfos \r\n */\r\n updateSlurStates(slurInfos: XmlSlurType[]) {\r\n const clef: Clef = this.staffArray[this.staffIndex].clefInfo.clef as Clef;\r\n const note = this.previousNote;\r\n const getForcedSlurDirection = (smoParams: SmoSlurParams, xmlStart: XmlSlurType, xmlEnd: XmlSlurType | null) => {\r\n // If the slur direction is specified, otherwise use autor.\r\n if (xmlStart.placement === 'above' || xmlEnd?.placement === 'above') {\r\n smoParams.position_end = SmoSlur.positions.ABOVE;\r\n smoParams.position = SmoSlur.positions.ABOVE;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n } else if (xmlStart.placement === 'below' || xmlEnd?.placement === 'below') {\r\n smoParams.position_end = SmoSlur.positions.BELOW;\r\n smoParams.position = SmoSlur.positions.BELOW;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n }\r\n };\r\n slurInfos.forEach((slurInfo) => {\r\n // slurInfo = { number, type, selector }\r\n if (slurInfo.type === 'start') {\r\n const slurParams = SmoSlur.defaults;\r\n // if start and stop come out of order\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'stop') {\r\n slurParams.endSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.startSelector = slurInfo.selector;\r\n slurParams.cp1x = slurInfo.controlX;\r\n slurParams.cp1y = slurInfo.controlY;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n // We no longer try to pick the slur direction until the score is complete.\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n } else if (slurInfo.type === 'stop') {\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'start') {\r\n const slurData = this.slurs[slurInfo.number] as XmlSlurType;\r\n const slurParams = SmoSlur.defaults;\r\n slurParams.startSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.endSelector = slurInfo.selector;\r\n slurParams.cp2x = slurInfo.controlX;\r\n slurParams.cp2y = slurInfo.controlY;\r\n slurParams.yOffset = slurData.yOffset;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n // console.log('complete slur ' + slurInfo.number + JSON.stringify(slurParams, null, ' '));\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n }\r\n });\r\n }\r\n assignRehearsalMarks() {\r\n Object.keys(this.rehearsalMarks).forEach((rm) => {\r\n const measureIx = parseInt(rm, 10);\r\n this.smoStaves.forEach((staff) => {\r\n const mark = new SmoRehearsalMark(SmoRehearsalMark.defaults);\r\n staff.addRehearsalMark(measureIx, mark);\r\n });\r\n });\r\n }\r\n /**\r\n * After reading in a measure, update any completed slurs and make them\r\n * into SmoSlur and add them to the SmoSystemGroup objects.\r\n * staffIndexOffset is the offset from the xml staffId and the score staff Id\r\n * (i.e. the staves that have already been parsed in other parts)\r\n */\r\n completeSlurs() {\r\n this.completedSlurs.forEach((slur) => { \r\n const smoSlur = new SmoSlur(slur);\r\n this.smoStaves[slur.startSelector.staff].addStaffModifier(smoSlur);\r\n });\r\n }\r\n /**\r\n * Go through saved start ties, try to find the endpoint of the tie. Ties in music xml\r\n * are a little ambiguous, we assume we are tying to the same pitch\r\n * @param score \r\n */\r\n completeTies(score: SmoScore) {\r\n this.completedTies.forEach((tieInfo) => {\r\n const startSelection: SmoSelection | null = SmoSelection.noteFromSelector(score, tieInfo.selector);\r\n if (startSelection && startSelection.note) {\r\n const startNote = startSelection.note;\r\n const endSelection = SmoSelection.nextNoteSelectionFromSelector(score, startSelection.selector);\r\n const endNote = endSelection?.note;\r\n const pitches: TieLine[] = [];\r\n if (endSelection && endNote) {\r\n startNote.pitches.forEach((spitch, ix) => {\r\n endNote.pitches.forEach((epitch, jx) => {\r\n if (SmoMusic.smoPitchToInt(spitch) === SmoMusic.smoPitchToInt(epitch)) {\r\n pitches.push({ from: ix, to: jx });\r\n }\r\n });\r\n });\r\n }\r\n if (pitches.length && endSelection) {\r\n const params = SmoTie.defaults;\r\n params.startSelector = startSelection.selector;\r\n params.endSelector = endSelection.selector;\r\n params.lines = pitches;\r\n const smoTie = new SmoTie(params);\r\n score.staves[smoTie.startSelector.staff].addStaffModifier(smoTie);\r\n }\r\n }\r\n });\r\n }\r\n // ### backtrackTuplets\r\n // If we received a tuplet end, go back through the voice\r\n // and construct the SmoTuplet.\r\n backtrackTuplets(voice: XmlVoiceInfo, tupletNumber: number, staffId: number, voiceId: number) {\r\n const tupletState = this.tuplets[tupletNumber];\r\n let i = tupletState.start.tick;\r\n const notes = [];\r\n const durationMap = [];\r\n while (i < voice.notes.length) {\r\n const note = voice.notes[i];\r\n notes.push(note);\r\n if (i === tupletState.start.tick) {\r\n durationMap.push(1.0);\r\n } else {\r\n const prev = voice.notes[i - 1];\r\n durationMap.push(note.ticks.numerator / prev.ticks.numerator);\r\n }\r\n i += 1;\r\n }\r\n const tp = SmoTuplet.defaults;\r\n tp.notes = notes;\r\n tp.durationMap = durationMap;\r\n tp.voice = voiceId;\r\n const tuplet = new SmoTuplet(tp);\r\n // Store the tuplet with the staff ID and voice so we\r\n // can add it to the right measure when it's created.\r\n this.completedTuplets.push({ tuplet, staffId, voiceId });\r\n }\r\n // ### updateTupletStates\r\n // react to a tuplet start or stop directive\r\n updateTupletStates(tupletInfos: XmlTupletData[], voice: XmlVoiceInfo, staffIndex: number, voiceIndex: number) {\r\n const tick = voice.notes.length - 1;\r\n tupletInfos.forEach((tupletInfo) => {\r\n if (tupletInfo.type === 'start') {\r\n this.tuplets[tupletInfo.number] = {\r\n start: { staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: [] },\r\n end: SmoSelector.default\r\n };\r\n } else if (tupletInfo.type === 'stop') {\r\n this.tuplets[tupletInfo.number].end = {\r\n staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: []\r\n };\r\n this.backtrackTuplets(voice, tupletInfo.number, staffIndex, voiceIndex);\r\n }\r\n });\r\n }\r\n addTupletsToMeasure(smoMeasure: SmoMeasure, staffId: number, voiceId: number) {\r\n const completed: XmlCompletedTuplet[] = [];\r\n this.completedTuplets.forEach((tuplet) => {\r\n if (tuplet.voiceId === voiceId && tuplet.staffId === staffId) {\r\n smoMeasure.tuplets.push(tuplet.tuplet);\r\n } else {\r\n completed.push(tuplet);\r\n }\r\n });\r\n this.completedTuplets = completed;\r\n }\r\n getSystems(): SmoSystemGroup[] {\r\n const rv: SmoSystemGroup[] = [];\r\n this.systems.forEach((system) => {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = system.startSelector;\r\n params.endSelector = system.endSelector;\r\n params.leftConnector = system.leftConnector;\r\n rv.push(new SmoSystemGroup(params));\r\n });\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Logic to convert music XML (finale) to Smo internal format\r\n * @module XmlToSmo\r\n */\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { XmlVoiceInfo, XmlState, XmlWedgeInfo } from './xmlState';\r\nimport { SmoLayoutManager, SmoPageLayout, SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, SmoVolta, SmoBarline } from '../data/measureModifiers';\r\nimport { SmoScore, isEngravingFont } from '../data/score';\r\nimport { SmoMeasure, SmoMeasureParams } from '../data/measure';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoGraceNote, SmoOrnament, SmoArticulation } from '../data/noteModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoNote, SmoNoteParams } from '../data/note';\r\nimport { Pitch, PitchKey, Clef } from '../data/common';\r\nimport { SmoOperation } from '../xform/operations';\r\nimport { SmoInstrument, SmoSlur, SmoTie, TieLine } from '../data/staffModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\n\r\n/**\r\n * A class that takes a music XML file and outputs a {@link SmoScore}\r\n * @category SmoToXml\r\n */\r\nexport class XmlToSmo {\r\n static get mmPerPixel() {\r\n return 0.264583;\r\n }\r\n /**\r\n * Vex renders everything as if the font size were 39\r\n */\r\n static get vexFontSize() {\r\n return 39;\r\n }\r\n static get customProportionDefault(): number {\r\n return SmoScore.defaults.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n static get pageLayoutMap() {\r\n return [\r\n { xml: 'page-height', smo: 'pageHeight' },\r\n { xml: 'page-width', smo: 'pageWidth' }\r\n ];\r\n }\r\n static get pageMarginMap() {\r\n return [\r\n { xml: 'left-margin', smo: 'leftMargin' },\r\n { xml: 'right-margin', smo: 'rightMargin' },\r\n { xml: 'top-margin', smo: 'topMargin' },\r\n { xml: 'bottom-margin', smo: 'bottomMargin' }\r\n ];\r\n }\r\n static get scoreInfoFields() {\r\n return ['title', 'subTitle', 'composer', 'copyright'];\r\n }\r\n /**\r\n * Convert music XML file from parsed xml to a {@link SmoScore}\r\n * @param xmlDoc \r\n * @returns\r\n */\r\n static convert(xmlDoc: Document): SmoScore {\r\n try {\r\n const scoreRoots = [...xmlDoc.getElementsByTagName('score-partwise')];\r\n if (!scoreRoots.length) {\r\n // no score node\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n\r\n const scoreRoot = scoreRoots[0];\r\n const rv: SmoScore = new SmoScore(SmoScore.defaults);\r\n rv.staves = [];\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.5;\r\n layoutDefaults.globalLayout.zoomScale = 1.0;\r\n const xmlState = new XmlState();\r\n xmlState.newTitle = false;\r\n rv.scoreInfo.name = 'Imported Smoosic';\r\n XmlToSmo.scoreInfoFields.forEach((field) => {\r\n (rv.scoreInfo as any)[field] = '';\r\n });\r\n const childNodes = [...scoreRoot.children];\r\n childNodes.forEach((scoreElement) => {\r\n if (scoreElement.tagName === 'work') {\r\n const scoreNameNode = [...scoreElement.getElementsByTagName('work-title')];\r\n if (scoreNameNode.length && scoreNameNode[0].textContent) {\r\n rv.scoreInfo.title = scoreNameNode[0].textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'identification') {\r\n const creators = [...scoreElement.getElementsByTagName('creator')];\r\n creators.forEach((creator) => {\r\n if (creator.getAttribute('type') === 'composer' && creator.textContent) {\r\n rv.scoreInfo.composer = creator.textContent;\r\n }\r\n });\r\n } else if (scoreElement.tagName === 'movement-title') {\r\n if (xmlState.newTitle && scoreElement.textContent) {\r\n rv.scoreInfo.subTitle = scoreElement.textContent;\r\n } else if (scoreElement.textContent) {\r\n rv.scoreInfo.title = scoreElement.textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'defaults') {\r\n XmlToSmo.defaults(scoreElement, rv, layoutDefaults, xmlState);\r\n } else if (scoreElement.tagName === 'part') {\r\n xmlState.initializeForPart();\r\n XmlToSmo.part(scoreElement, xmlState);\r\n } else if (scoreElement.tagName === 'part-list') {\r\n XmlToSmo.partList(scoreElement, rv, xmlState);\r\n }\r\n });\r\n // The entire score is parsed and xmlState now contains the staves.\r\n rv.formattingManager = xmlState.formattingManager;\r\n rv.staves = xmlState.smoStaves;\r\n xmlState.updateStaffGroups();\r\n rv.systemGroups = xmlState.getSystems();\r\n\r\n // Fix tempo to be column mapped\r\n rv.staves[0].measures.forEach((measure) => {\r\n const tempoStaff = rv.staves.find((ss) => ss.measures[measure.measureNumber.measureIndex].tempo.display === true);\r\n if (tempoStaff) {\r\n const tempo = tempoStaff.measures[measure.measureNumber.measureIndex].tempo;\r\n rv.staves.forEach((ss) => {\r\n ss.measures[measure.measureNumber.measureIndex].tempo =\r\n SmoMeasureModifierBase.deserialize(tempo);\r\n });\r\n }\r\n });\r\n const lm: SmoLayoutManager = rv.layoutManager as SmoLayoutManager;\r\n if (rv.scoreInfo.title) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.TITLE, rv.scoreInfo.title, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.subTitle) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.SUBTITLE, rv.scoreInfo.subTitle, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.composer) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.COMPOSER, rv.scoreInfo.composer, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n XmlToSmo.setSlurDefaults(rv);\r\n xmlState.completeTies(rv);\r\n \r\n rv.preferences.showPiano = false;\r\n XmlToSmo.setVoltas(rv, xmlState);\r\n rv.staves.forEach((staff) => {\r\n\r\n });\r\n return rv;\r\n } catch (exc) {\r\n console.warn(exc);\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n /**\r\n * when building the slurs, we don't always know which direction the beams will go or what other\r\n * voices there will be.\r\n * @param score\r\n */\r\n static setSlurDefaults(score: SmoScore) {\r\n score.staves.forEach((staff) => {\r\n const slurs = staff.modifiers.filter((mm) =>mm.ctor === 'SmoSlur');\r\n slurs.forEach((ss) => {\r\n const slur = (ss as any) as SmoSlur;\r\n let slurPosition = SmoSlur.positions.AUTO;\r\n if (slur.position === slur.position_end) {\r\n slurPosition = slur.position;\r\n }\r\n const slurParams = SmoOperation.getDefaultSlurDirection(score, ss.startSelector, ss.endSelector, slurPosition, slur.orientation);\r\n slur.position = slurParams.position;\r\n slur.position_end = slurParams.position_end;\r\n slur.invert = slurParams.invert;\r\n slur.yOffset = slurParams.yOffset;\r\n slur.cp1y = slurParams.cp1y;\r\n slur.cp2y = slurParams.cp2y;\r\n slur.xOffset = slurParams.xOffset;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * After parsing the XML, resolve the voltas we've saved\r\n * @param score \r\n * @param state \r\n */\r\n static setVoltas(score: SmoScore, state: XmlState) {\r\n const endingMeasures = Object.keys(state.endingMap).map((k) => parseInt(k, 10));\r\n endingMeasures.forEach((em) => {\r\n const endings = state.endingMap[em];\r\n endings.forEach((ending) => {\r\n const defs = SmoVolta.defaults;\r\n defs.number = ending.number;\r\n defs.startBar = ending.start;\r\n defs.endBar = ending.end >= 0 ? ending.end : ending.start;\r\n const volta = new SmoVolta(defs);\r\n SmoOperation.addEnding(score, volta);\r\n });\r\n });\r\n }\r\n static partList(partList: Element, score: SmoScore, state: XmlState) {\r\n const children = partList.children;\r\n let partIndex = 0;\r\n var i = 0;\r\n for (i = 0;i < children.length; ++i) {\r\n const child = children[i];\r\n if (child.tagName === 'score-part') {\r\n const partElement = child;\r\n const partData = new SmoPartInfo(SmoPartInfo.defaults);\r\n partData.partName = XmlHelpers.getTextFromElement(partElement, 'part-name', 'part ' + i);\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', i.toString());\r\n if (state.openPartGroup) {\r\n state.openPartGroup.parts.push(partIndex);\r\n }\r\n partIndex += 1;\r\n state.parts[partId] = partData;\r\n partData.partAbbreviation = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', 'p.');\r\n partData.midiDevice = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', null);\r\n // it seems like musicxml doesn't allow for different music font size in parts vs. score\r\n // partData.layoutManager.globalLayout.svgScale = 0.55;\r\n partData.layoutManager.globalLayout.svgScale = state.musicFontSize / XmlToSmo.vexFontSize;\r\n const midiElements = partElement.getElementsByTagName('midi-instrument');\r\n if (midiElements.length) {\r\n const midiElement = midiElements[0];\r\n partData.midiInstrument = {\r\n channel: XmlHelpers.getNumberFromElement(midiElement, 'midi-channel', 1),\r\n program: XmlHelpers.getNumberFromElement(midiElement, 'midi-program', 1),\r\n volume: XmlHelpers.getNumberFromElement(midiElement, 'volume', 80),\r\n pan: XmlHelpers.getNumberFromElement(midiElement, 'pan', 0)\r\n };\r\n }\r\n } else if (child.tagName === 'part-group') {\r\n const groupElement = child;\r\n if (state.openPartGroup) {\r\n const staffGroup = state.openPartGroup.group;\r\n state.openPartGroup.parts.forEach((part) => {\r\n if (staffGroup.startSelector.staff === 0 || staffGroup.startSelector.staff > part) {\r\n staffGroup.startSelector.staff = part;\r\n }\r\n if (staffGroup.endSelector.staff < part) {\r\n staffGroup.endSelector.staff = part;\r\n }\r\n });\r\n score.systemGroups.push(staffGroup);\r\n state.openPartGroup = null;\r\n } else {\r\n const staffGroup = new SmoSystemGroup(SmoSystemGroup.defaults); \r\n const groupNum = XmlHelpers.getNumberFromAttribute(groupElement, 'number', 1);\r\n const xmlSymbol = XmlHelpers.getTextFromElement(groupElement, 'group-symbol', 'single');\r\n if (xmlSymbol === 'single') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['single'];\r\n } else if (xmlSymbol === 'brace') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['brace'];\r\n } if (xmlSymbol === 'bracket') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['bracket'];\r\n } if (xmlSymbol === 'square') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['double'];\r\n }\r\n state.openPartGroup = {\r\n partNum: groupNum,\r\n parts: [],\r\n group: staffGroup\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n /**\r\n * page-layout element occurs in a couple of places\r\n * @param defaultsElement\r\n * @param layoutDefaults \r\n * @param xmlState \r\n */\r\n static pageSizeFromLayout(defaultsElement: Element, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n const pageLayoutNode = defaultsElement.getElementsByTagName('page-layout');\r\n if (pageLayoutNode.length) {\r\n XmlHelpers.assignDefaults(pageLayoutNode[0], layoutDefaults.globalLayout, XmlToSmo.pageLayoutMap);\r\n layoutDefaults.globalLayout.pageHeight *= xmlState.pixelsPerTenth;\r\n layoutDefaults.globalLayout.pageWidth *= xmlState.pixelsPerTenth;\r\n }\r\n const pageMarginNode = XmlHelpers.getChildrenFromPath(defaultsElement,\r\n ['page-layout', 'page-margins']);\r\n if (pageMarginNode.length) {\r\n XmlHelpers.assignDefaults(pageMarginNode[0], layoutDefaults.pageLayouts[0], XmlToSmo.pageMarginMap);\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n layoutDefaults.pageLayouts[0][attr] *= xmlState.pixelsPerTenth;\r\n });\r\n }\r\n }\r\n /**\r\n * /score-partwise/defaults\r\n * @param defaultsElement \r\n * @param score \r\n * @param layoutDefaults \r\n */\r\n static defaults(defaultsElement: Element, score: SmoScore, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n // Default scale for mxml\r\n let scale = 1 / 7;\r\n const currentScale = layoutDefaults.getGlobalLayout().svgScale;\r\n const scaleNode = defaultsElement.getElementsByTagName('scaling');\r\n if (scaleNode.length) {\r\n const mm = XmlHelpers.getNumberFromElement(scaleNode[0], 'millimeters', 1);\r\n const tn = XmlHelpers.getNumberFromElement(scaleNode[0], 'tenths', 7);\r\n if (tn > 0 && mm > 0) {\r\n scale = mm / tn;\r\n }\r\n }\r\n const fontNode = defaultsElement.getElementsByTagName('music-font');\r\n // All musicxml sizes are given in 'tenths'. Smoosic and vex use pixels. so find the ratio and \r\n // normalize all values.\r\n xmlState.pixelsPerTenth = scale / XmlToSmo.mmPerPixel;\r\n if (fontNode.length) {\r\n const fontString = fontNode[0].getAttribute('font-size');\r\n if (fontString) {\r\n xmlState.musicFontSize = parseInt(fontString, 10);\r\n }\r\n const fontFamily = fontNode[0].getAttribute('font-family');\r\n if (fontFamily && isEngravingFont(fontFamily)) {\r\n score.engravingFont =fontFamily;\r\n }\r\n }\r\n XmlToSmo.pageSizeFromLayout(defaultsElement, layoutDefaults, xmlState);\r\n \r\n // svgScale is the ratio of music font size to the default Vex font size (39).\r\n layoutDefaults.globalLayout.svgScale = xmlState.musicFontSize / XmlToSmo.vexFontSize;\r\n score.scaleTextGroups(currentScale / layoutDefaults.globalLayout.svgScale);\r\n }\r\n\r\n /**\r\n * /score-partwise/part\r\n * @param partElement \r\n * @param xmlState \r\n */\r\n static part(partElement: Element, xmlState: XmlState) {\r\n let staffId = xmlState.smoStaves.length;\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', '');\r\n console.log('part ' + partId);\r\n xmlState.initializeForPart();\r\n xmlState.partId = partId;\r\n const stavesForPart: SmoSystemStaff[] = [];\r\n const measureElements = [...partElement.getElementsByTagName('measure')];\r\n measureElements.forEach((measureElement) => {\r\n // Parse the measure element, populate staffArray of xmlState with the\r\n // measure data\r\n XmlToSmo.measure(measureElement, xmlState);\r\n const newStaves = xmlState.staffArray;\r\n if (newStaves.length > 1 && stavesForPart.length <= newStaves[0].clefInfo.staffId) {\r\n xmlState.staffGroups.push({ start: staffId, length: newStaves.length });\r\n }\r\n xmlState.globalCursor += (newStaves[0].measure as SmoMeasure).getMaxTicksVoice();\r\n newStaves.forEach((staffMeasure) => {\r\n if (stavesForPart.length <= staffMeasure.clefInfo.staffId) {\r\n const params = SmoSystemStaff.defaults;\r\n params.staffId = staffId;\r\n params.measureInstrumentMap = xmlState.instrumentMap;\r\n const newStaff = new SmoSystemStaff(params);\r\n if (xmlState.parts[partId]) {\r\n console.log('putting part ' + partId + ' in staff ' + newStaff.staffId);\r\n newStaff.partInfo = new SmoPartInfo(xmlState.parts[partId]);\r\n }\r\n console.log('createing stave ' + newStaff.staffId);\r\n stavesForPart.push(newStaff);\r\n staffId += 1;\r\n }\r\n const smoStaff = stavesForPart[staffMeasure.clefInfo.staffId];\r\n smoStaff.measures.push(staffMeasure.measure as SmoMeasure);\r\n });\r\n const oldStaffId = staffId - stavesForPart.length;\r\n xmlState.backtrackHairpins(stavesForPart[0], oldStaffId + 1);\r\n });\r\n if (stavesForPart.length > 1) {\r\n stavesForPart[0].partInfo.stavesAfter = 1;\r\n stavesForPart[0].partInfo.stavesBefore = 0;\r\n console.log('part has stave after ' + stavesForPart[0].staffId);\r\n stavesForPart[1].partInfo.stavesAfter = 0;\r\n stavesForPart[1].partInfo.stavesBefore = 1;\r\n console.log('part has stave before ' + stavesForPart[1].staffId);\r\n }\r\n xmlState.smoStaves = xmlState.smoStaves.concat(stavesForPart);\r\n xmlState.completeSlurs();\r\n xmlState.assignRehearsalMarks();\r\n }\r\n /**\r\n * /score-partwise/measure/direction/sound:tempo\r\n * @param element \r\n * @returns \r\n */\r\n static tempo(element: Element) {\r\n let tempoText = '';\r\n let customText = tempoText;\r\n const rv: { staffId: number, tempo: SmoTempoText }[] = [];\r\n const soundNodes = XmlHelpers.getChildrenFromPath(element,\r\n ['sound']);\r\n soundNodes.forEach((sound) => {\r\n let tempoMode = SmoTempoText.tempoModes.durationMode;\r\n tempoText = sound.getAttribute('tempo') as string;\r\n if (tempoText) {\r\n const bpm = parseInt(tempoText, 10);\r\n const wordNode =\r\n [...element.getElementsByTagName('words')];\r\n tempoText = wordNode.length ? wordNode[0].textContent as string :\r\n tempoText.toString();\r\n if (isNaN(parseInt(tempoText, 10))) {\r\n if (SmoTempoText.tempoTexts[tempoText.toLowerCase()]) {\r\n tempoMode = SmoTempoText.tempoModes.textMode;\r\n } else {\r\n tempoMode = SmoTempoText.tempoModes.customMode;\r\n customText = tempoText;\r\n }\r\n }\r\n const params = SmoTempoText.defaults;\r\n params.tempoMode = tempoMode;\r\n params.bpm = bpm;\r\n params.tempoText = tempoText;\r\n params.customText = customText;\r\n params.display = true;\r\n const tempo = new SmoTempoText(params);\r\n const staffId = XmlHelpers.getStaffId(element);\r\n rv.push({ staffId, tempo });\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * /score-partwise/measure/direction/dynamics\r\n * @param element \r\n * @returns \r\n */\r\n static dynamics(directionElement: Element, xmlState: XmlState) {\r\n let offset = 1;\r\n const dynamicNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'dynamics']);\r\n const rehearsalNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'rehearsal']);\r\n const offsetNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['offset']);\r\n if (offsetNodes.length) {\r\n offset = parseInt(offsetNodes[0].textContent as string, 10);\r\n }\r\n if (rehearsalNodes.length) {\r\n const rm = rehearsalNodes[0].textContent;\r\n if (rm) {\r\n xmlState.rehearsalMark = rm;\r\n }\r\n }\r\n dynamicNodes.forEach((dynamic) => {\r\n xmlState.dynamics.push({\r\n dynamic: dynamic.children[0].tagName,\r\n offset: (offset / xmlState.divisions) * 4096\r\n });\r\n });\r\n }\r\n\r\n // ### attributes\r\n // /score-partwise/part/measure/attributes\r\n static attributes(measureElement: Element, xmlState: XmlState) {\r\n let smoKey: PitchKey = {} as PitchKey;\r\n const attributesNodes = XmlHelpers.getChildrenFromPath(measureElement, ['attributes']);\r\n if (!attributesNodes.length) {\r\n return;\r\n }\r\n const attributesNode = attributesNodes[0];\r\n xmlState.divisions =\r\n XmlHelpers.getNumberFromElement(attributesNode, 'divisions', xmlState.divisions);\r\n\r\n const keyNode = XmlHelpers.getChildrenFromPath(attributesNode, ['key']);\r\n // MusicXML expresses keys in 'fifths' from C.\r\n if (keyNode.length) {\r\n const fifths = XmlHelpers.getNumberFromElement(keyNode[0], 'fifths', 0);\r\n if (fifths < 0) {\r\n smoKey = SmoMusic.circleOfFifths[SmoMusic.circleOfFifths.length + fifths];\r\n } else {\r\n smoKey = SmoMusic.circleOfFifths[fifths];\r\n }\r\n xmlState.keySignature = smoKey.letter.toUpperCase();\r\n if (smoKey.accidental !== 'n') {\r\n xmlState.keySignature += smoKey.accidental;\r\n }\r\n }\r\n const transposeNode = XmlHelpers.getChildrenFromPath(attributesNode, ['transpose']);\r\n if (transposeNode.length) {\r\n const offset = XmlHelpers.getNumberFromElement(transposeNode[0], 'chromatic', 0);\r\n if (offset !== xmlState.instrument.keyOffset) {\r\n xmlState.instrument.keyOffset = -1 * offset;\r\n if (xmlState.instrumentMap[xmlState.measureIndex]) {\r\n xmlState.instrumentMap[xmlState.measureIndex].keyOffset = xmlState.instrument.keyOffset;\r\n } else {\r\n const params = xmlState.instrument;\r\n xmlState.instrumentMap[xmlState.measureIndex] = new SmoInstrument(params);\r\n }\r\n }\r\n }\r\n\r\n const currentTime = xmlState.timeSignature.split('/');\r\n const timeNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['time']);\r\n if (timeNodes.length) {\r\n const timeNode = timeNodes[0];\r\n const num = XmlHelpers.getNumberFromElement(timeNode, 'beats', parseInt(currentTime[0], 10));\r\n const den = XmlHelpers.getNumberFromElement(timeNode, 'beat-type', parseInt(currentTime[1], 10));\r\n xmlState.timeSignature = '' + num + '/' + den;\r\n }\r\n\r\n const clefNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['clef']);\r\n if (clefNodes.length) {\r\n // We expect the number of clefs to equal the number of staves in each measure\r\n clefNodes.forEach((clefNode) => {\r\n let clefNum = 0;\r\n let clef = 'treble';\r\n const clefAttrs = XmlHelpers.nodeAttributes(clefNode);\r\n if (typeof (clefAttrs.number) !== 'undefined') {\r\n // staff numbers index from 1 in mxml\r\n clefNum = parseInt(clefAttrs.number, 10) - 1;\r\n }\r\n const clefType = XmlHelpers.getTextFromElement(clefNode, 'sign', 'G');\r\n const clefLine = XmlHelpers.getNumberFromElement(clefNode, 'line', 2);\r\n // mxml supports a zillion clefs, just implement the basics.\r\n if (clefType === 'F') {\r\n clef = 'bass';\r\n } else if (clefType === 'C') {\r\n if (clefLine === 4) {\r\n clef = 'alto';\r\n } else if (clefLine === 3) {\r\n clef = 'tenor';\r\n } else if (clefLine === 1) {\r\n clef = 'soprano';\r\n }\r\n } else if (clefType === 'percussion') {\r\n clef = 'percussion';\r\n }\r\n if (xmlState.clefInfo.length <= clefNum) {\r\n xmlState.clefInfo.push({ clef, staffId: clefNum });\r\n } else {\r\n xmlState.clefInfo[clefNum].clef = clef;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### wedge (hairpin)\r\n // /score-partwise/part/measure/direction/direction-type/wedge\r\n static wedge(directionElement: Element, xmlState: XmlState) {\r\n let crescInfo: XmlWedgeInfo | null = null;\r\n const wedgeNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n wedgeNodes.forEach((wedgeNode) => {\r\n crescInfo = { type: wedgeNode.getAttribute('type') as string };\r\n });\r\n // If this is a start hairpin, start it. If an end hairpin, add it to the\r\n // hairpin array with the type and start/stop ticks\r\n if (crescInfo !== null) {\r\n xmlState.processWedge(crescInfo);\r\n }\r\n }\r\n // ### direction\r\n // /score-partwise/part/measure/direction\r\n static direction(directionElement: Element, xmlState: XmlState) {\r\n const tempo = XmlToSmo.tempo(directionElement);\r\n // Only display tempo if changes.\r\n if (tempo.length) {\r\n // TODO: staff ID is with tempo, but tempo is per column in SMO\r\n if (!SmoTempoText.eq(xmlState.tempo, tempo[0].tempo)) {\r\n xmlState.tempo = tempo[0].tempo;\r\n xmlState.tempo.display = true;\r\n }\r\n }\r\n // parse dynamic node and add to xmlState\r\n XmlToSmo.dynamics(directionElement, xmlState);\r\n\r\n // parse wedge (hairpin)\r\n XmlToSmo.wedge(directionElement, xmlState);\r\n }\r\n // ### note\r\n // /score-partwise/part/measure/note\r\n static note(noteElement: Element, xmlState: XmlState) {\r\n let grIx = 0;\r\n const staffIndex: number = XmlHelpers.getStaffId(noteElement);\r\n xmlState.staffIndex = staffIndex;\r\n // We assume the clef information from attributes comes before the notes\r\n // xmlState.staffArray[staffIndex] = { clefInfo: { clef }, voices[voiceIndex]: notes[] }\r\n if (xmlState.staffArray.length <= staffIndex) {\r\n // mxml has measures for all staves in a part interleaved. In SMO they are\r\n // each in a separate stave object. Base the staves we expect based on\r\n // the number of clefs in the xml state object\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} as Record });\r\n });\r\n }\r\n const chordNode = XmlHelpers.getChildrenFromPath(noteElement, ['chord']);\r\n if (chordNode.length === 0) {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(noteElement, 0);\r\n }\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part (same with staff IDs). Update XML state if these are new\r\n // staves\r\n const voiceIndex = XmlHelpers.getVoiceId(noteElement);\r\n xmlState.voiceIndex = voiceIndex;\r\n xmlState.initializeStaff(staffIndex, voiceIndex);\r\n const voice = xmlState.staffArray[staffIndex].voices[voiceIndex];\r\n // Calculate the tick and staff index for selectors\r\n const tickIndex = chordNode.length < 1 ? voice.notes.length : voice.notes.length - 1;\r\n const smoVoiceIndex = xmlState.staffVoiceHash[staffIndex].indexOf(voiceIndex);\r\n const pitchIndex = chordNode.length ? xmlState.previousNote.pitches.length : 0;\r\n const smoStaffIndex = xmlState.smoStaves.length + staffIndex;\r\n const selector = {\r\n staff: smoStaffIndex, measure: xmlState.measureIndex, voice: smoVoiceIndex,\r\n tick: tickIndex, pitches: []\r\n };\r\n const divisions = xmlState.divisions;\r\n const printText = noteElement.getAttribute('print-object');\r\n const hideNote = typeof (printText) === 'string' && printText === 'no';\r\n const isGrace = XmlHelpers.isGrace(noteElement);\r\n const restNode = XmlHelpers.getChildrenFromPath(noteElement, ['rest']);\r\n const noteType = restNode.length ? 'r' : 'n';\r\n const durationData = XmlHelpers.ticksFromDuration(noteElement, divisions, 4096);\r\n const tickCount = durationData.tickCount;\r\n if (chordNode.length === 0) {\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed += tickCount;\r\n }\r\n xmlState.tickCursor = (xmlState.currentDuration / divisions) * 4096;\r\n const beamState = XmlHelpers.noteBeamState(noteElement);\r\n const slurInfos = XmlHelpers.getSlurData(noteElement, selector);\r\n const tieInfos = XmlHelpers.getTieData(noteElement, selector, pitchIndex);\r\n const tupletInfos = XmlHelpers.getTupletData(noteElement);\r\n const ornaments = XmlHelpers.articulationsAndOrnaments(noteElement);\r\n const lyrics = XmlHelpers.lyrics(noteElement);\r\n const flagState = XmlHelpers.getStemType(noteElement);\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const pitch: Pitch = XmlHelpers.smoPitchFromNote(noteElement,\r\n SmoMeasure.defaultPitchForClef[clefString]);\r\n if (isGrace === false) {\r\n if (chordNode.length) {\r\n // If this is a note in a chord, just add the pitch to previous note.\r\n xmlState.previousNote.pitches.push(pitch);\r\n xmlState.updateTieStates(tieInfos);\r\n } else {\r\n // Create a new note\r\n const noteData: SmoNoteParams = SmoNote.defaults;\r\n noteData.noteType = noteType;\r\n noteData.pitches = [pitch];\r\n // If this is a non-grace note, add any grace notes to the note since SMO\r\n // treats them as note modifiers\r\n noteData.ticks = { numerator: tickCount, denominator: 1, remainder: 0 };\r\n noteData.flagState = flagState;\r\n noteData.clef = clefString;\r\n xmlState.previousNote = new SmoNote(noteData);\r\n if (hideNote) {\r\n xmlState.previousNote.makeHidden(true);\r\n }\r\n xmlState.updateDynamics();\r\n ornaments.forEach((ornament) => {\r\n if (ornament.ctor === 'SmoOrnament') {\r\n xmlState.previousNote.toggleOrnament(ornament as SmoOrnament);\r\n } else if (ornament.ctor === 'SmoArticulation') {\r\n xmlState.previousNote.toggleArticulation(ornament as SmoArticulation);\r\n }\r\n });\r\n lyrics.forEach((lyric) => {\r\n xmlState.addLyric(xmlState.previousNote, lyric);\r\n });\r\n for (grIx = 0; grIx < xmlState.graceNotes.length; ++grIx) {\r\n xmlState.previousNote.addGraceNote(xmlState.graceNotes[grIx], grIx);\r\n }\r\n xmlState.graceNotes = []; // clear the grace note array\r\n // If this note starts later than the cursor due to forward, pad with rests\r\n if (xmlState.tickCursor > xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed) {\r\n const pads = SmoMusic.splitIntoValidDurations(\r\n xmlState.tickCursor - xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed);\r\n console.log(`padding ${pads.length} before ${xmlState.staffIndex}-${xmlState.measureIndex}-${xmlState.voiceIndex}-${tickIndex}`);\r\n pads.forEach((pad) => {\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const padNote = SmoMeasure.createRestNoteWithDuration(pad,\r\n clefString);\r\n padNote.makeHidden(true);\r\n voice.notes.push(padNote); \r\n });\r\n // slurs and ties use selector, so this affects them, also\r\n selector.tick += pads.length;\r\n // then reset the cursor since we are now in sync\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed = xmlState.tickCursor;\r\n }\r\n /* slurInfos.forEach((slurInfo) => {\r\n console.log(`xml slur: ${slurInfo.selector.staff}-${slurInfo.selector.measure}-${slurInfo.selector.voice}-${slurInfo.selector.tick} ${slurInfo.type} ${slurInfo.number}`);\r\n console.log(` ${slurInfo.placement}`);\r\n });*/\r\n /* tieInfos.forEach((tieInfo) => {\r\n console.log(`xml tie: ${tieInfo.selector.staff}-${tieInfo.selector.measure}-${tieInfo.selector.voice}-${tieInfo.selector.tick} ${tieInfo.type} `);\r\n console.log(` pitch ${tieInfo.pitchIndex} orient ${tieInfo.orientation} num ${tieInfo.number}`);\r\n });*/\r\n \r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n voice.notes.push(xmlState.previousNote);\r\n xmlState.updateBeamState(beamState, durationData.alteration, voice, voiceIndex);\r\n xmlState.updateTupletStates(tupletInfos, voice,\r\n staffIndex, voiceIndex);\r\n }\r\n } else {\r\n if (chordNode.length) {\r\n xmlState.graceNotes[xmlState.graceNotes.length - 1].pitches.push(pitch);\r\n } else {\r\n // grace note durations don't seem to have explicit duration, so\r\n // get it from note type\r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n xmlState.graceNotes.push(new SmoGraceNote({\r\n pitches: [pitch],\r\n ticks: { numerator: tickCount, denominator: 1, remainder: 0 }\r\n }));\r\n }\r\n }\r\n }\r\n static print(printElement: Element, xmlState: XmlState) {\r\n if (xmlState.parts[xmlState.partId]) {\r\n XmlToSmo.pageSizeFromLayout(printElement, xmlState.parts[xmlState.partId].layoutManager, xmlState);\r\n }\r\n }\r\n /**\r\n * /score-partwise/part/measure\r\n * A measure in music xml might represent several measures in SMO at the same\r\n * column in the score\r\n * @param measureElement \r\n * @param xmlState \r\n */\r\n static measure(measureElement: Element, xmlState: XmlState) {\r\n xmlState.initializeForMeasure(measureElement);\r\n const elements = [...measureElement.children];\r\n let hasNotes = false;\r\n elements.forEach((element) => { \r\n if (element.tagName === 'backup') {\r\n xmlState.currentDuration -= XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'forward') {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'attributes') {\r\n // update the running state of the XML with new information from this measure\r\n // if an XML attributes element is present\r\n XmlToSmo.attributes(measureElement, xmlState);\r\n } else if (element.tagName === 'direction') {\r\n XmlToSmo.direction(element, xmlState);\r\n } else if (element.tagName === 'note') {\r\n XmlToSmo.note(element, xmlState);\r\n hasNotes = true;\r\n } else if (element.tagName === 'barline') {\r\n xmlState.updateEndings(element);\r\n } else if (element.tagName === 'print') {\r\n XmlToSmo.print(element, xmlState);\r\n }\r\n });\r\n // If a measure has no notes, just make one with the defaults\r\n if (hasNotes === false && xmlState.staffArray.length < 1 && xmlState.clefInfo.length >= 1) {\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} });\r\n });\r\n }\r\n if (xmlState.rehearsalMark.length) {\r\n xmlState.rehearsalMarks[xmlState.measureIndex] = xmlState.rehearsalMark;\r\n }\r\n xmlState.staffArray.forEach((staffData) => {\r\n const clef = staffData.clefInfo.clef as Clef;\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n params.transposeIndex = xmlState.instrument.keyOffset;\r\n params.clef = clef;\r\n const smoMeasure = SmoMeasure.getDefaultMeasure(params);\r\n smoMeasure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n smoMeasure.format.measureIndex = xmlState.measureNumber;\r\n smoMeasure.format.systemBreak = XmlHelpers.isSystemBreak(measureElement);\r\n smoMeasure.tempo = xmlState.tempo;\r\n smoMeasure.format.proportionality = XmlToSmo.customProportionDefault;\r\n xmlState.formattingManager.updateMeasureFormat(smoMeasure.format);\r\n smoMeasure.keySignature = xmlState.keySignature;\r\n smoMeasure.timeSignature = SmoMeasure.convertLegacyTimeSignature(xmlState.timeSignature);\r\n smoMeasure.measureNumber.localIndex = xmlState.measureNumber;\r\n smoMeasure.measureNumber.measureIndex = xmlState.measureIndex;\r\n smoMeasure.measureNumber.staffId = staffData.clefInfo.staffId + xmlState.smoStaves.length;\r\n const startBarDefs = SmoBarline.defaults;\r\n startBarDefs.position = SmoBarline.positions.start;\r\n startBarDefs.barline = xmlState.startBarline;\r\n const endBarDefs = SmoBarline.defaults;\r\n endBarDefs.position = SmoBarline.positions.end;\r\n endBarDefs.barline = xmlState.endBarline;\r\n smoMeasure.setBarline(new SmoBarline(startBarDefs));\r\n smoMeasure.setBarline(new SmoBarline(endBarDefs));\r\n // voices not in array, put them in an array\r\n Object.keys(staffData.voices).forEach((voiceKey) => {\r\n const voice = staffData.voices[voiceKey];\r\n xmlState.addTupletsToMeasure(smoMeasure, staffData.clefInfo.staffId,\r\n parseInt(voiceKey, 10));\r\n voice.notes.forEach((note) => {\r\n if (!note.clef) {\r\n note.clef = smoMeasure.clef;\r\n }\r\n });\r\n smoMeasure.voices.push(voice);\r\n });\r\n if (smoMeasure.voices.length === 0) {\r\n smoMeasure.voices.push({ notes: SmoMeasure.getDefaultNotes(smoMeasure) });\r\n }\r\n staffData.measure = smoMeasure;\r\n });\r\n // Pad incomplete measures/voices with rests\r\n const maxTicks = xmlState.staffArray.map((staffData) => (staffData.measure as SmoMeasure).getMaxTicksVoice())\r\n .reduce((a, b) => a > b ? a : b);\r\n xmlState.staffArray.forEach((staffData) => {\r\n let i = 0;\r\n let j = 0;\r\n const measure = staffData.measure as SmoMeasure;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const curTicks = measure.getTicksFromVoice(i);\r\n if (curTicks < maxTicks) {\r\n const tickAr = SmoMusic.splitIntoValidDurations(maxTicks - curTicks);\r\n for (j = 0; j < tickAr.length; ++j) {\r\n measure.voices[i].notes.push(\r\n SmoMeasure.createRestNoteWithDuration(tickAr[j], measure.clef)\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoDynamicText, SmoMicrotone } from '../data/noteModifiers';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoStaffHairpin, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoTempoText, SmoBarline, SmoVolta } from '../data/measureModifiers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch } from '../data/common';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoAudioPitch } from '../data/music';\r\n\r\nexport interface SmoAudioRepeat {\r\n startRepeat: number,\r\n endRepeat?: number,\r\n voltas: SmoAudioVolta[]\r\n}\r\nexport interface SmoAudioVolta {\r\n measureIndex: number,\r\n ending: number\r\n}\r\nexport interface SmoAudioRepeatMap {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\nexport interface SmoAudioHairpin {\r\n hairpinType: number,\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n delta: number,\r\n ticks: number\r\n}\r\nexport interface SmoAudioTie {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoAudioNote {\r\n pitches: Pitch[],\r\n frequencies: number[],\r\n noteType: string,\r\n duration: number,\r\n offset: number,\r\n selector: SmoSelector,\r\n volume: number,\r\n padding?: boolean\r\n}\r\nexport interface SmoAudioTimeSignature {\r\n numerator: number,\r\n denominator: number\r\n}\r\nexport interface SmoAudioTrack {\r\n lastMeasure: number,\r\n notes: SmoAudioNote[],\r\n tempoMap: Record,\r\n measureNoteMap: Record,\r\n keyMap: Record,\r\n timeSignatureMap: Record,\r\n hairpins: SmoAudioHairpin[],\r\n volume: number,\r\n tiedNotes: SmoAudioTie[],\r\n repeats: []\r\n}\r\nexport interface AudioTracks {\r\n tracks: SmoAudioTrack[],\r\n repeats: SmoAudioRepeat[],\r\n repeatMap: SmoAudioRepeatMap[],\r\n measureBeats: number[],\r\n tempoMap: number[]\r\n}\r\n/** \r\n * Convert a score into a JSON structure that can be rendered to audio.\r\n * the return value looks like this:\r\n * ` { tracks, repeats, repeatMap} `\r\n * repeatMap is just an array of tuples with start/end measures.\r\n * each track contains:\r\n * ` { lastMeasure, notes, tempoMap, timeSignatureMap, hairpins, volume, tiedNotes } `\r\n * where each note might contain:\r\n * `{ pitches, noteType, duration, selector, volume }`\r\n * _Note_: pitches are smo pitches, durations are adjusted for beatTime\r\n * (beatTime === 4096 uses Smo/Vex ticks, 128 is midi tick default)\r\n * volume is normalized 0-1\r\n * @category SmoTransform\r\n */\r\nexport class SmoAudioScore {\r\n // ### dynamicVolumeMap\r\n // normalized dynamic\r\n static get dynamicVolumeMap(): Record {\r\n // matches SmoDynamicText.dynamics\r\n return {\r\n pp: 0.3,\r\n p: 0.4,\r\n mp: 0.5,\r\n mf: 0.6,\r\n f: 0.7,\r\n ff: 0.8\r\n };\r\n }\r\n static get emptyTrack(): SmoAudioTrack {\r\n return {\r\n lastMeasure: 0,\r\n notes: [],\r\n tempoMap: {},\r\n timeSignatureMap: {},\r\n hairpins: [],\r\n measureNoteMap: {},\r\n keyMap: {},\r\n volume: 0,\r\n tiedNotes: [],\r\n repeats: []\r\n };\r\n }\r\n timeDiv: number;\r\n score: SmoScore;\r\n beatTime: number;\r\n volume: number = 0;\r\n constructor(score: SmoScore, beatTime: number) {\r\n this.timeDiv = 4096 / beatTime;\r\n this.score = score;\r\n this.beatTime = beatTime;\r\n }\r\n // ### volumeFromNote\r\n // Return a normalized volume from the dynamic setting of the note\r\n // or supplied default if none exists\r\n static volumeFromNote(smoNote: SmoNote, def?: number): number {\r\n if (typeof (def) === 'undefined' || def === 0) {\r\n def = SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.PP];\r\n }\r\n const dynamic: SmoDynamicText[] = smoNote.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n if (dynamic.length < 1) {\r\n return def;\r\n }\r\n if (dynamic[0].text === SmoDynamicText.dynamics.SFZ) {\r\n return SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.F];\r\n }\r\n if (typeof (SmoAudioScore.dynamicVolumeMap[dynamic[0].text]) === 'undefined') {\r\n return def;\r\n }\r\n return SmoAudioScore.dynamicVolumeMap[dynamic[0].text];\r\n }\r\n getVoltas(repeat: SmoAudioRepeat, measureIndex: number): SmoAudioVolta[] {\r\n let v1 = measureIndex;\r\n let endings = null;\r\n let currentEnding = -1;\r\n const rv: SmoAudioVolta[] = [];\r\n const staff = this.score.staves[0];\r\n while (v1 > repeat.startRepeat) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (endings.length && endings[0].endSelector) {\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = endings[0].endSelector.measure + 1;\r\n break;\r\n }\r\n v1--;\r\n }\r\n if (currentEnding < 0 || !staff?.measures) {\r\n return rv;\r\n }\r\n while (endings?.length && v1 < staff.measures.length) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (!endings.length) {\r\n break;\r\n }\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = (endings[0].endSelector as SmoSelector).measure + 1;\r\n }\r\n rv.sort((a: SmoAudioVolta, b: SmoAudioVolta) => a.ending - b.ending);\r\n return rv;\r\n }\r\n // ### ticksFromSelection\r\n // return the count of ticks between the selectors, adjusted for\r\n // beatTime\r\n ticksFromSelection(startSelector: SmoSelector, endSelector: SmoSelector): number {\r\n const selection = SmoSelection.selectionFromSelector(this.score, startSelector);\r\n const note = selection?.note as SmoNote;\r\n let ticks: number = note.tickCount;\r\n let nextSelection: SmoSelection | null = SmoSelection.nextNoteSelectionFromSelector(this.score, startSelector);\r\n while (nextSelection && nextSelection.note && !SmoSelector.gt(nextSelection.selector, endSelector)) {\r\n ticks += nextSelection.note.tickCount;\r\n nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, nextSelection.selector);\r\n }\r\n return ticks / this.timeDiv;\r\n }\r\n // ### getHairpinInfo\r\n // Get any hairpin starting at this selection, and calculate its\r\n // effect on the overall volume\r\n getHairpinInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const staff: SmoSystemStaff = selection.staff;\r\n const selector: SmoSelector = selection.selector;\r\n const cp = (x: SmoSelector) => JSON.parse(JSON.stringify(x));\r\n const hps: StaffModifierBase[] = staff.getModifiersAt(selector)\r\n .filter((hairpin) => hairpin.ctor === 'SmoStaffHairpin' &&\r\n SmoSelector.eq(hairpin.startSelector, selector));\r\n const rv: SmoAudioHairpin[] = [];\r\n // clear out old hairpins.\r\n // usually there will only be a single hairpin per voice, except\r\n // in the case of overlapping.\r\n track.hairpins.forEach((hairpin: SmoAudioHairpin) => {\r\n if (SmoSelector.gteq(selection.selector, hairpin.startSelector) &&\r\n SmoSelector.lteq(selection.selector, hairpin.endSelector)) {\r\n rv.push(hairpin);\r\n }\r\n });\r\n track.hairpins = rv;\r\n\r\n hps.forEach((hairpin) => {\r\n const ch = hairpin as SmoStaffHairpin;\r\n let endDynamic = 0;\r\n const trackHairpin: SmoAudioHairpin = {\r\n hairpinType: ch.hairpinType,\r\n startSelector: cp(hairpin.startSelector),\r\n endSelector: cp(hairpin.endSelector),\r\n delta: 0,\r\n ticks: 0\r\n };\r\n // For a hairpin, try to calculate the volume difference from start to end,\r\n // as a function of ticks\r\n const endSelection: SmoSelection | null = SmoSelection.selectionFromSelector(this.score, hairpin.endSelector);\r\n if (endSelection !== null && typeof (endSelection.note) !== 'undefined') {\r\n const endNote = endSelection.note as SmoNote;\r\n const curNote = selection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(endNote);\r\n const startDynamic = SmoAudioScore.volumeFromNote(curNote, track.volume);\r\n if (startDynamic === endDynamic) {\r\n const nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, hairpin.endSelector);\r\n if (nextSelection) {\r\n const nextNote = nextSelection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(nextNote);\r\n }\r\n }\r\n if (startDynamic === endDynamic) {\r\n const offset = (hairpin as SmoStaffHairpin).hairpinType === SmoStaffHairpin.types.CRESCENDO ? 0.1 : -0.1;\r\n endDynamic = Math.max(endDynamic + offset, 0.1);\r\n endDynamic = Math.min(endDynamic, 1.0);\r\n }\r\n trackHairpin.delta = endDynamic - startDynamic;\r\n trackHairpin.ticks = this.ticksFromSelection(hairpin.startSelector, hairpin.endSelector);\r\n track.hairpins.push(trackHairpin);\r\n }\r\n });\r\n }\r\n // ### computeVolume\r\n // come up with a current normalized volume based on dynamics\r\n // that appear in the music\r\n computeVolume(track: SmoAudioTrack, selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n if (track.volume === 0) {\r\n track.volume = SmoAudioScore.volumeFromNote(note,\r\n SmoAudioScore.dynamicVolumeMap.p);\r\n return;\r\n }\r\n if (track.hairpins.length) {\r\n const hp = track.hairpins[0];\r\n const coff = (note.tickCount / this.timeDiv) / hp.ticks;\r\n track.volume += hp.delta * coff;\r\n } else {\r\n track.volume = SmoAudioScore.volumeFromNote(note, track.volume);\r\n }\r\n }\r\n getSlurInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const tn: SmoAudioTie[] = [];\r\n const cp = (x: any) => JSON.parse(JSON.stringify(x));\r\n track.tiedNotes.forEach((tie) => {\r\n if (SmoSelector.gteq(selection.selector, tie.startSelector) && SmoSelector.lteq(selection.selector, tie.endSelector)) { \r\n tn.push(tie);\r\n }\r\n });\r\n track.tiedNotes = tn;\r\n const tieStart = selection.staff.getTiesStartingAt(selection.selector);\r\n tieStart.forEach((tie) => {\r\n tn.push({\r\n startSelector: cp(tie.startSelector),\r\n endSelector: cp(tie.endSelector)\r\n });\r\n });\r\n }\r\n isTiedPitch(track: SmoAudioTrack, selection: SmoSelection, noteIx: number): boolean {\r\n if (noteIx < 1) {\r\n return false;\r\n }\r\n if (!track.tiedNotes.length) {\r\n return false;\r\n }\r\n if (track.notes[noteIx - 1].noteType !== 'n') {\r\n return false;\r\n }\r\n // Don't do this for first note of nth endings, because it will mess up\r\n // other endings.\r\n if (selection.selector.tick === 0) {\r\n const endings = selection.measure.getNthEndings();\r\n if (endings.length) {\r\n return false;\r\n }\r\n }\r\n // the first note should be played, not tied\r\n if (SmoSelector.eq(track.tiedNotes[0].startSelector, selection.selector)) {\r\n return false;\r\n }\r\n return SmoMusic.pitchArraysMatch(track.notes[noteIx - 1].pitches, (selection.note as SmoNote).pitches);\r\n }\r\n static updateMeasureIndexMap(note: SmoAudioNote, measureIndexMap: Record>) {\r\n if (note.noteType !== 'n') {\r\n return;\r\n }\r\n const selector = note.selector;\r\n if (typeof (measureIndexMap[selector.measure]) === 'undefined') {\r\n measureIndexMap[selector.measure] = {} as Record;\r\n }\r\n const measureIndex = measureIndexMap[selector.measure];\r\n if (typeof (measureIndex[selector.tick]) === 'undefined') {\r\n measureIndex[selector.tick] = [];\r\n }\r\n if (note.noteType === 'n') {\r\n measureIndex[selector.tick].push(note);\r\n }\r\n }\r\n updateMeasureNoteMap(track: SmoAudioTrack, measureIndex: number, note: SmoAudioNote) {\r\n if (!track.measureNoteMap[measureIndex]) {\r\n track.measureNoteMap[measureIndex] = [];\r\n }\r\n track.measureNoteMap[measureIndex].push(note)\r\n }\r\n createTrackNote(track: SmoAudioTrack, selection: SmoSelection, duration: number, runningDuration: number, measureIndexMap: Record>) {\r\n const noteIx = track.notes.length;\r\n if (this.isTiedPitch(track, selection, noteIx)) {\r\n track.notes[noteIx - 1].duration += duration;\r\n const restPad = this.createTrackRest(track, duration, runningDuration, selection.selector, measureIndexMap);\r\n // Indicate this rest is just padding for a previous tied note. Midi and audio render this\r\n // differently\r\n restPad.padding = true;\r\n track.notes.push(restPad);\r\n return;\r\n }\r\n const tpitches: Pitch[] = [];\r\n const frequencies: number[] = [];\r\n const xpose = selection.measure.transposeIndex;\r\n const smoNote = selection.note as SmoNote;\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n tpitches.push(SmoMusic.smoIntToPitch(\r\n SmoMusic.smoPitchToInt(pitch) - xpose));\r\n const mtone: SmoMicrotone | null = smoNote.getMicrotone(pitchIx) ?? null;\r\n frequencies.push(SmoAudioPitch.smoPitchToFrequency(pitch, -1 * xpose, mtone));\r\n });\r\n const pitchArray = JSON.parse(JSON.stringify(tpitches));\r\n const note: SmoAudioNote = {\r\n pitches: pitchArray,\r\n noteType: 'n',\r\n duration,\r\n offset: runningDuration,\r\n selector: selection.selector,\r\n volume: track.volume,\r\n frequencies\r\n };\r\n this.updateMeasureNoteMap(track, selection.selector.measure, note);\r\n track.notes.push(note);\r\n SmoAudioScore.updateMeasureIndexMap(note, measureIndexMap);\r\n }\r\n createTrackRest(track: SmoAudioTrack, duration: number, runningDuration: number, selector: SmoSelector, \r\n measureIndexMap: Record>): SmoAudioNote {\r\n const rest: SmoAudioNote = {\r\n duration,\r\n offset: runningDuration,\r\n noteType: 'r',\r\n selector,\r\n volume: 0,\r\n pitches: [],\r\n frequencies: []\r\n };\r\n SmoAudioScore.updateMeasureIndexMap(rest, measureIndexMap);\r\n this.updateMeasureNoteMap(track, selector.measure, rest); \r\n return rest;\r\n }\r\n createRepeatMap(repeats: SmoAudioRepeat[]): SmoAudioRepeatMap[] {\r\n let startm = 0;\r\n let j = 0;\r\n const staff = this.score.staves[0];\r\n const repeatMap: SmoAudioRepeatMap[] = [];\r\n const endm = staff.measures.length - 1;\r\n repeats.forEach((repeat) => {\r\n // Include the current start to start of repeat, unless there is no start repeat\r\n if (repeat.startRepeat > 0) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: repeat.startRepeat - 1 });\r\n }\r\n // Include first time through\r\n if (repeat.endRepeat) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n }\r\n startm = repeat.startRepeat;\r\n // nth time through, go to the start of volta 0, then to the start of volta n\r\n if (repeat.endRepeat && repeat.voltas.length < 1) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n startm = repeat.endRepeat + 1;\r\n }\r\n for (j = 1; j < repeat.voltas.length; ++j) {\r\n const volta = repeat.voltas[j];\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.voltas[0].measureIndex - 1 });\r\n // If there are more endings, repeat to first volta\r\n if (j + 1 < repeat.voltas.length) {\r\n repeatMap.push({ startMeasure: volta.measureIndex, endMeasure: repeat.voltas[j + 1].measureIndex - 1 });\r\n } else {\r\n startm = volta.measureIndex;\r\n }\r\n }\r\n });\r\n if (startm <= endm) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: endm });\r\n }\r\n return repeatMap;\r\n }\r\n normalizeVolume(measureIndexMap: Record>) {\r\n let i = 0;\r\n let j = 0;\r\n let runningSum = -1;\r\n const measureKeys = Object.keys(measureIndexMap);\r\n for (i = 0; i < measureKeys.length; ++i) {\r\n const measureNotes = measureIndexMap[i];\r\n if (typeof (measureNotes) === 'undefined') {\r\n continue;\r\n }\r\n const tickKeys = Object.keys(measureNotes);\r\n for (j = 0; j < tickKeys.length; ++j) {\r\n let volumeSum = 0;\r\n let normalize = 1.0;\r\n const tickNotes = measureNotes[parseInt(tickKeys[j], 10)];\r\n if (typeof (tickNotes) === 'undefined') {\r\n continue;\r\n }\r\n volumeSum = tickNotes.map((nn) => nn.volume).reduce((a, b) => a + b);\r\n if (volumeSum > 1.0) {\r\n normalize = 1.0 / volumeSum;\r\n volumeSum = 1.0;\r\n }\r\n if (runningSum < 0) {\r\n runningSum = volumeSum;\r\n }\r\n const diff = Math.abs(runningSum - volumeSum);\r\n if (diff > 0.6) {\r\n const avg = (volumeSum * 3 + runningSum) / 4;\r\n normalize = normalize * avg;\r\n }\r\n runningSum = volumeSum * normalize;\r\n tickNotes.forEach((nn) => {\r\n nn.volume *= normalize;\r\n });\r\n runningSum = volumeSum;\r\n }\r\n }\r\n }\r\n convert(): AudioTracks {\r\n let measureIx = 0;\r\n const trackHash: Record = {};\r\n const measureBeats: number[] = [];\r\n const measureIndexMap = {};\r\n const repeats: SmoAudioRepeat[] = [];\r\n let startRepeat = 0;\r\n const tempoMap: number[] = [];\r\n this.score.staves.forEach((staff, staffIx) => {\r\n let runningKey = staff.measures[0].keySignature;\r\n this.volume = 0;\r\n for (measureIx = 0; measureIx < staff.measures.length; ++measureIx) {\r\n const measure = staff.measures[measureIx];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let duration = 0;\r\n const trackKey = (this.score.staves.length * voiceIx) + staffIx;\r\n if (typeof (trackHash[trackKey]) === 'undefined') {\r\n trackHash[trackKey] = SmoAudioScore.emptyTrack;\r\n }\r\n const measureSelector = SmoSelector.default;\r\n measureSelector.staff = staffIx;\r\n measureSelector.measure = measureIx;\r\n const track: SmoAudioTrack = trackHash[trackKey];\r\n if (!measure.tempo) {\r\n measure.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n const tempo = measure.tempo.bpm * (measure.tempo.beatDuration / 4096);\r\n // staff 0/voice 0, set track values for the measure\r\n if (voiceIx === 0) {\r\n if (staffIx === 0) {\r\n track.keyMap[0] = runningKey;\r\n measureBeats.push(measure.getMaxTicksVoice() / this.timeDiv);\r\n const startBar = measure.getStartBarline();\r\n const endBar = measure.getEndBarline();\r\n if (startBar.barline === SmoBarline.barlines.startRepeat) {\r\n startRepeat = measureIx;\r\n }\r\n if (endBar.barline === SmoBarline.barlines.endRepeat) {\r\n const repeat: SmoAudioRepeat = { startRepeat, endRepeat: measureIx, voltas: [] };\r\n repeat.voltas = this.getVoltas(repeat, measureIx);\r\n repeats.push(repeat);\r\n }\r\n tempoMap.push(tempo);\r\n }\r\n\r\n const selectorKey = SmoSelector.getMeasureKey(measureSelector);\r\n track.tempoMap[selectorKey] = Math.round(tempo);\r\n if (measure.keySignature !== runningKey) {\r\n runningKey = measure.keySignature;\r\n track.keyMap[measureIx] = runningKey;\r\n }\r\n track.timeSignatureMap[selectorKey] = {\r\n numerator: measure.timeSignature.actualBeats,\r\n denominator: measure.timeSignature.beatDuration\r\n };\r\n }\r\n // If this voice is not in every measure, fill in the space\r\n // in its own channel.\r\n while (track.lastMeasure < measureIx) {\r\n track.notes.push(this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff: staffIx, measure: track.lastMeasure, voice: voiceIx, tick: 0, pitches: [] },\r\n measureIndexMap,\r\n ));\r\n track.lastMeasure += 1;\r\n }\r\n let tupletTicks = 0;\r\n let runningDuration = 0;\r\n voice.notes.forEach((note, noteIx) => {\r\n const selector = {\r\n staff: staffIx, measure: measureIx, voice: voiceIx, tick: noteIx, pitches: []\r\n };\r\n const selection = SmoSelection.selectionFromSelector(this.score, selector) as SmoSelection;\r\n // update staff features of slur/tie/cresc.\r\n this.getSlurInfo(track, selection);\r\n this.getHairpinInfo(track, selection);\r\n const tuplet = measure.getTupletForNote(note);\r\n if (tuplet && tuplet.getIndexOfNote(note) === 0) {\r\n tupletTicks = tuplet.tickCount / this.timeDiv;\r\n }\r\n if (tupletTicks) {\r\n // tuplet likely won't fit evenly in ticks, so\r\n // use remainder in last tuplet note.\r\n if (tuplet && tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) {\r\n duration = tupletTicks;\r\n tupletTicks = 0;\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n tupletTicks -= duration;\r\n }\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n }\r\n if (note.isRest() || note.isSlash()) {\r\n track.notes.push(this.createTrackRest(track, duration, runningDuration, selector, measureIndexMap));\r\n } else {\r\n this.computeVolume(track, selection);\r\n this.createTrackNote(track, selection, duration, runningDuration, measureIndexMap);\r\n }\r\n runningDuration += duration;\r\n });\r\n track.lastMeasure += 1;\r\n });\r\n }\r\n });\r\n // For voices that don't fill out the full piece, fill them in with rests\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key]);\r\n const maxMeasure = tracks[0].lastMeasure;\r\n tracks.forEach((track) => {\r\n while (track.lastMeasure < maxMeasure) {\r\n const staff = track.notes[0].selector.staff;\r\n const voice = track.notes[0].selector.voice;\r\n const rest: SmoAudioNote = this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff, measure: track.lastMeasure, voice, tick: 0, pitches: [] }, measureIndexMap\r\n );\r\n track.notes.push(rest);\r\n track.lastMeasure += 1;\r\n }\r\n });\r\n const repeatMap = this.createRepeatMap(repeats);\r\n this.normalizeVolume(measureIndexMap);\r\n return { tracks, repeats, repeatMap, measureBeats, tempoMap };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoAttrs, getId } from '../data/common';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../data/measure';\r\nimport { TickMap } from './tickMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n\r\nexport interface SmoBeamGroupParams {\r\n notes: SmoNote[],\r\n voice: number\r\n}\r\n\r\n/**\r\n * Contain a group of {@link SmoNote} used for beaming.\r\n * @internal\r\n */\r\nclass SmoBeamGroup implements ISmoBeamGroup {\r\n notes: SmoNote[];\r\n attrs: SmoAttrs;\r\n voice: number = 0;\r\n constructor(params: SmoBeamGroupParams) {\r\n let i = 0;\r\n this.voice = params.voice;\r\n this.notes = params.notes;\r\n smoSerialize.vexMerge(this, params);\r\n\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoBeamGroup'\r\n };\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (note.tickCount < 4096) {\r\n note.beam_group = this.attrs;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply the beam policy set up in node and measure to group the notes into beam groups\r\n * @category SmoTransform\r\n */\r\nexport class SmoBeamer {\r\n static applyBeams(measure: SmoMeasure) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const beamer = new SmoBeamer(measure, i);\r\n const tickmap = measure.tickmapForVoice(i);\r\n for (j = 0; j < tickmap.durationMap.length; ++j) {\r\n beamer.beamNote(tickmap, j, measure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n measure: SmoMeasure;\r\n duration: number;\r\n meterNumbers: number[];\r\n beamBeats: number;\r\n skipNext: number;\r\n currentGroup: SmoNote[];\r\n constructor(measure: SmoMeasure, voice: number) {\r\n this.measure = measure;\r\n this._removeVoiceBeam(measure, voice);\r\n this.duration = 0;\r\n this.meterNumbers = [measure.timeSignature.actualBeats, measure.timeSignature.beatDuration];\r\n // beam on 1/4 notes in most meter, triple time dotted quarter\r\n this.beamBeats = 2 * 2048;\r\n if (this.meterNumbers[0] % 3 === 0) {\r\n this.beamBeats = 3 * 2048;\r\n }\r\n this.skipNext = 0;\r\n this.currentGroup = [];\r\n }\r\n\r\n get beamGroups() {\r\n return this.measure.beamGroups;\r\n }\r\n _removeVoiceBeam(measure: SmoMeasure, voice: number) {\r\n const beamGroups: ISmoBeamGroup[] = [];\r\n measure.beamGroups.forEach((gr: ISmoBeamGroup) => {\r\n if (gr.voice !== voice) {\r\n beamGroups.push(gr);\r\n }\r\n });\r\n measure.beamGroups = beamGroups;\r\n }\r\n\r\n _completeGroup(voice: number) {\r\n const nrCount: SmoNote[] = this.currentGroup.filter((nn: SmoNote) =>\r\n nn.isRest() === false\r\n );\r\n // don't beam groups of 1\r\n if (nrCount.length > 1) {\r\n this.measure.beamGroups.push(new SmoBeamGroup({\r\n notes: this.currentGroup,\r\n voice\r\n }));\r\n }\r\n }\r\n\r\n _advanceGroup() {\r\n this.currentGroup = [];\r\n this.duration = 0;\r\n }\r\n\r\n // ### _isRemainingTicksBeamable\r\n // look ahead, and see if we need to beam the tuplet now or if we\r\n // can combine current beam with future notes.\r\n _isRemainingTicksBeamable(tickmap: TickMap, index: number) {\r\n let acc = 0;\r\n let i = 0;\r\n if (this.duration >= this.beamBeats) {\r\n return false;\r\n }\r\n acc = this.duration;\r\n for (i = index + 1; i < tickmap.deltaMap.length; ++i) {\r\n acc += tickmap.deltaMap[i];\r\n if (acc === this.beamBeats) {\r\n return true;\r\n }\r\n if (acc > this.beamBeats) {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n beamNote(tickmap: TickMap, index: number, note: SmoNote) {\r\n this.beamBeats = note.beamBeats;\r\n this.duration += tickmap.deltaMap[index];\r\n if (note.noteType === '/') {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // beam tuplets\r\n if (note.isTuplet) {\r\n const tuplet = this.measure.getTupletForNote(note);\r\n // The underlying notes must have been deleted.\r\n if (!tuplet) {\r\n return;\r\n }\r\n const ult = tuplet.notes[tuplet.notes.length - 1];\r\n const first = tuplet.notes[0];\r\n\r\n if (first.endBeam) {\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // is this beamable length-wise\r\n const stemTicks = SmoMusic.closestDurationTickLtEq(note.tickCount);\r\n if (note.noteType === 'n' && stemTicks < 4096) {\r\n this.currentGroup.push(note);\r\n }\r\n // Ultimate note in tuplet\r\n if (ult.attrs.id === note.attrs.id && !this._isRemainingTicksBeamable(tickmap, index)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n return;\r\n }\r\n\r\n // don't beam > 1/4 note in 4/4 time. Don't beam rests.\r\n if (tickmap.deltaMap[index] >= 4096 || (note.isRest() && this.currentGroup.length === 0)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n this.currentGroup.push(note);\r\n if (note.endBeam) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n\r\n if (this.duration === this.beamBeats) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // If this does not align on a beat, don't beam it\r\n if (this.duration > this.beamBeats) {\r\n this._advanceGroup();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from './selections';\r\nimport { SmoNote, TupletInfo } from '../data/note';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { TickMap } from './tickMap';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { getId } from '../data/common';\r\n\r\ninterface PasteNote {\r\n note: SmoNote,\r\n selector: SmoSelector,\r\n originalKey: string\r\n}\r\ninterface ModifierPlacement {\r\n modifier: StaffModifierBase,\r\n ticksToStart: number\r\n}\r\n/**\r\n * PasteBuffer holds copied music, and handles the action of pasting the music to\r\n * a different point in the score. It does this by serializing the measure(s) from the source\r\n * and then creating handling the overlap with existing music when deserializaing it.\r\n * @category SmoTransform\r\n */\r\nexport class PasteBuffer {\r\n notes: PasteNote[];\r\n noteIndex: number;\r\n measures: SmoMeasure[];\r\n measureIndex: number;\r\n remainder: number;\r\n replacementMeasures: SmoSelection[];\r\n score: SmoScore | null = null;\r\n tupletNoteMap: Record = { };\r\n modifiers: StaffModifierBase[] = [];\r\n modifiersToPlace: ModifierPlacement[] = [];\r\n destination: SmoSelector = SmoSelector.default;\r\n staffSelectors: SmoSelector[] = [];\r\n constructor() {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.measures = [];\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n this.replacementMeasures = [];\r\n }\r\n\r\n setScore(score: SmoScore) {\r\n this.score = score;\r\n }\r\n setSelections(score: SmoScore, selections: SmoSelection[]) {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.score = score;\r\n if (selections.length < 1) {\r\n return;\r\n }\r\n this.tupletNoteMap = {};\r\n const first = selections[0];\r\n const last = selections[selections.length - 1];\r\n if (!first.note || !last.note) {\r\n return;\r\n }\r\n\r\n const startTuplet: SmoTuplet | null = first.measure.getTupletForNote(first.note);\r\n if (startTuplet) {\r\n if (startTuplet.getIndexOfNote(first.note) !== 0) {\r\n return; // can't paste from the middle of a tuplet\r\n }\r\n }\r\n const endTuplet: SmoTuplet | null = last.measure.getTupletForNote(last.note);\r\n if (endTuplet) {\r\n if (endTuplet.getIndexOfNote(last.note) !== endTuplet.notes.length - 1) {\r\n return; // can't paste part of a tuplet.\r\n }\r\n }\r\n this._populateSelectArray(selections);\r\n }\r\n // ### _populateSelectArray\r\n // copy the selected notes into the paste buffer with their original locations.\r\n _populateSelectArray(selections: SmoSelection[]) {\r\n let selector: SmoSelector = SmoSelector.default;\r\n this.modifiers = [];\r\n selections.forEach((selection) => {\r\n selector = JSON.parse(JSON.stringify(selection.selector));\r\n const mod: StaffModifierBase[] = selection.staff.getModifiersAt(selector);\r\n if (mod.length) {\r\n mod.forEach((modifier: StaffModifierBase) => {\r\n const cp: StaffModifierBase = StaffModifierBase.deserialize(modifier.serialize());\r\n cp.attrs.id = getId().toString();\r\n this.modifiers.push(cp);\r\n });\r\n }\r\n const isTuplet: boolean = selection?.note?.isTuplet ?? false;\r\n // We store copy in concert pitch. The originalKey is the original key of the copy.\r\n // the destKey is the originalKey in concert pitch.\r\n const originalKey = selection.measure.keySignature;\r\n const keyOffset = -1 * selection.measure.transposeIndex;\r\n const destKey = SmoMusic.vexKeySignatureTranspose(originalKey, keyOffset).toLocaleLowerCase();\r\n if (isTuplet) {\r\n const tuplet = (selection.measure.getTupletForNote(selection.note) as SmoTuplet);\r\n const index = tuplet.getIndexOfNote(selection.note);\r\n if (index === 0) {\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet);\r\n this.tupletNoteMap[ntuplet.attrs.id] = ntuplet;\r\n ntuplet.notes.forEach((nnote) => {\r\n const xposeNote = SmoNote.transpose(SmoNote.clone(nnote),\r\n [], -1 * selection.measure.transposeIndex, selection.measure.keySignature, destKey) as SmoNote;\r\n this.notes.push({ selector, note: xposeNote, originalKey: destKey });\r\n selector = JSON.parse(JSON.stringify(selector));\r\n selector.tick += 1;\r\n });\r\n }\r\n } else if (selection.note) {\r\n const note = SmoNote.transpose(SmoNote.clone(selection.note),\r\n [], keyOffset, selection.measure.keySignature, destKey) as SmoNote;\r\n this.notes.push({ selector, note, originalKey: destKey });\r\n }\r\n });\r\n this.notes.sort((a, b) =>\r\n SmoSelector.gt(a.selector, b.selector) ? 1 : -1\r\n );\r\n }\r\n\r\n clearSelections() {\r\n this.notes = [];\r\n }\r\n\r\n _findModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.startSelector));\r\n return (rv && rv.length) ? rv[0] : null;\r\n }\r\n _findPlacedModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.endSelector));\r\n return (typeof(rv) !== 'undefined' && rv.length) ? rv[0] : null;\r\n }\r\n\r\n // ### _populateMeasureArray\r\n // Before pasting, populate an array of existing measures from the paste destination\r\n // so we know how to place the notes.\r\n _populateMeasureArray() {\r\n if (!this.score || !this.destination) {\r\n return;\r\n }\r\n let measureSelection = SmoSelection.measureSelection(this.score, this.destination.staff, this.destination.measure);\r\n if (!measureSelection) {\r\n return;\r\n }\r\n const measure = measureSelection.measure;\r\n while (measure.voices.length <= this.destination.voice) {\r\n measure.populateVoice(measure.voices.length);\r\n }\r\n const tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let currentDuration = tickmap.durationMap[this.destination.tick];\r\n this.measures = [];\r\n this.staffSelectors = [];\r\n this.measures.push(measure);\r\n this.notes.forEach((selection: PasteNote) => {\r\n if (currentDuration + selection.note.tickCount > tickmap.totalDuration && measureSelection !== null) {\r\n // If this note will overlap the measure boundary, the note will be split in 2 with the\r\n // remainder going to the next measure. If they line up exactly, the remainder is 0.\r\n const remainder = (currentDuration + selection.note.tickCount) - tickmap.totalDuration;\r\n currentDuration = remainder;\r\n\r\n measureSelection = SmoSelection.measureSelection(this.score as SmoScore,\r\n measureSelection.selector.staff,\r\n measureSelection.selector.measure + 1);\r\n\r\n // If the paste buffer overlaps the end of the score, we can't paste (TODO: add a measure in this case)\r\n if (measureSelection != null) {\r\n this.measures.push(measureSelection.measure);\r\n }\r\n } else if (measureSelection != null) {\r\n currentDuration += selection.note.tickCount;\r\n }\r\n });\r\n }\r\n\r\n // ### _populatePre\r\n // When we paste, we replace entire measures. Populate the first measure up until the start of pasting.\r\n _populatePre(voiceIndex: number, measure: SmoMeasure, startTick: number, tickmap: TickMap) {\r\n const voice: SmoVoice = {\r\n notes: []\r\n };\r\n let i = 0;\r\n let j = 0;\r\n let ticksToFill = tickmap.durationMap[startTick];\r\n // TODO: bug here, need to handle tuplets in pre-part, create new tuplet\r\n for (i = 0; i < measure.voices[voiceIndex].notes.length; ++i) {\r\n const note = measure.voices[voiceIndex].notes[i];\r\n // If this is a tuplet, clone all the notes at once.\r\n if (note.isTuplet && ticksToFill >= note.tickCount) {\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n continue; // we remove the tuplet after first iteration\r\n }\r\n const ntuplet: SmoTuplet = SmoTuplet.cloneTuplet(tuplet);\r\n voice.notes = voice.notes.concat(ntuplet.notes as SmoNote[]);\r\n measure.removeTupletForNote(note);\r\n measure.tuplets.push(ntuplet);\r\n ticksToFill -= tuplet.tickCount;\r\n } else if (ticksToFill >= note.tickCount) {\r\n ticksToFill -= note.tickCount;\r\n voice.notes.push(SmoNote.clone(note));\r\n } else {\r\n const duration = note.tickCount - ticksToFill;\r\n const durMap = SmoMusic.gcdMap(duration);\r\n for (j = 0; j < durMap.length; ++j) {\r\n const dd = durMap[j];\r\n SmoNote.cloneWithDuration(note, {\r\n numerator: dd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n }\r\n ticksToFill = 0;\r\n }\r\n if (ticksToFill < 1) {\r\n break;\r\n }\r\n }\r\n return voice;\r\n }\r\n\r\n // ### _populateVoice\r\n // ### Description:\r\n // Create a new voice for a new measure in the paste destination\r\n _populateVoice(voiceIndex: number): SmoVoice[] {\r\n this._populateMeasureArray();\r\n const measures = this.measures;\r\n let measure = measures[0];\r\n let tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let voice = this._populatePre(voiceIndex, measure, this.destination.tick, tickmap);\r\n let startSelector = JSON.parse(JSON.stringify(this.destination));\r\n this.measureIndex = 0;\r\n const measureVoices = [];\r\n measureVoices.push(voice);\r\n while (this.measureIndex < measures.length) {\r\n measure = measures[this.measureIndex];\r\n while (measure.voices.length <= this.destination.voice) {\r\n const nvoice = { notes : SmoMeasure.getDefaultNotes(measure) };\r\n measure.voices.push(nvoice);\r\n }\r\n tickmap = measure.tickmapForVoice(this.destination.voice);\r\n this._populateNew(voice, measure, tickmap, startSelector);\r\n if (this.noteIndex < this.notes.length && this.measureIndex < measures.length) {\r\n voice = {\r\n notes: []\r\n };\r\n measureVoices.push(voice);\r\n startSelector = {\r\n staff: startSelector.staff,\r\n measure: startSelector.measure,\r\n voice: voiceIndex,\r\n tick: 0\r\n };\r\n this.measureIndex += 1;\r\n startSelector.measure += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n this._populatePost(voice, voiceIndex, measure, tickmap);\r\n return measureVoices;\r\n }\r\n\r\n static _countTicks(voice: SmoVoice): number {\r\n let voiceTicks = 0;\r\n voice.notes.forEach((note) => {\r\n voiceTicks += note.tickCount;\r\n });\r\n return voiceTicks;\r\n }\r\n\r\n /**\r\n * If the source contains a staff modifier that ends on the source selection, copy the modifier\r\n * @param srcSelector \r\n * @param destSelector \r\n * @param staff \r\n * @returns \r\n */\r\n _populateModifier(srcSelector: SmoSelector, destSelector: SmoSelector, staff: SmoSystemStaff) {\r\n const mod = this._findPlacedModifier(srcSelector);\r\n if (mod && this.score) {\r\n // Don't copy modifiers that cross staff boundaries outside the source staff b/c it's not clear what\r\n // the dest staff should be\r\n if (mod.startSelector.staff !== mod.endSelector.staff && srcSelector.staff !== destSelector.staff) {\r\n return;\r\n }\r\n const repl = StaffModifierBase.deserialize(mod.serialize());\r\n repl.endSelector = JSON.parse(JSON.stringify(destSelector));\r\n const tickOffset = SmoSelection.countTicks(this.score, mod.startSelector, mod.endSelector);\r\n this.modifiersToPlace.push({\r\n modifier: repl,\r\n ticksToStart: tickOffset\r\n });\r\n }\r\n }\r\n /**\r\n * Figure out if the tuplet overlaps an existing tuplet in the target measure\r\n * @param t1 \r\n * @param measure \r\n * @returns \r\n */\r\n static tupletOverlapIndex(t1: SmoTuplet, measure: SmoMeasure) {\r\n for (var i = 0; i < measure.tuplets.length; ++i) {\r\n const tt = measure.tuplets[i];\r\n // TODO: what about other kinds of overlap?\r\n if (tt.startIndex === t1.startIndex) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n /**\r\n * Start copying the paste buffer into the destination by copying the notes and working out\r\n * the measure overlap\r\n * \r\n * @param voice \r\n * @param measure \r\n * @param tickmap \r\n * @param startSelector \r\n * @returns \r\n */\r\n _populateNew(voice: SmoVoice, measure: SmoMeasure, tickmap: TickMap, startSelector: SmoSelector) {\r\n let currentDuration = tickmap.durationMap[startSelector.tick];\r\n let i = 0;\r\n let j = 0;\r\n let tupletsPushed = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (currentDuration < totalDuration && this.noteIndex < this.notes.length) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const selection = this.notes[this.noteIndex];\r\n const note = selection.note;\r\n if (note.noteType === 'n') {\r\n const pitchAr: number[] = [];\r\n note.pitches.forEach((pitch, ix) => {\r\n pitchAr.push(ix);\r\n });\r\n SmoNote.transpose(note, pitchAr, measure.transposeIndex, selection.originalKey, measure.keySignature);\r\n }\r\n this._populateModifier(selection.selector, startSelector, this.score.staves[selection.selector.staff]);\r\n if (note.isTuplet) {\r\n const tuplet = this.tupletNoteMap[(note.tuplet as TupletInfo).id];\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet);\r\n ntuplet.startIndex = voice.notes.length;\r\n this.noteIndex += ntuplet.notes.length;\r\n startSelector.tick += ntuplet.notes.length;\r\n currentDuration += tuplet.tickCount;\r\n for (i = 0; i < ntuplet.notes.length; ++i) {\r\n const tn = ntuplet.notes[i];\r\n tn.clef = measure.clef;\r\n voice.notes.push(tn);\r\n }\r\n const tix = PasteBuffer.tupletOverlapIndex(ntuplet, measure);\r\n // If this is overlapping an existing tuplet in the target measure, replace it\r\n if (tix >= 0) {\r\n measure.tuplets[tix] = ntuplet;\r\n } else {\r\n measure.tuplets.push(ntuplet);\r\n }\r\n } else if (currentDuration + note.tickCount <= totalDuration && this.remainder === 0) {\r\n // The whole note fits in the measure, paste it.\r\n const nnote = SmoNote.clone(note);\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += note.tickCount;\r\n this.noteIndex += 1;\r\n startSelector.tick += 1;\r\n } else if (this.remainder > 0) {\r\n // This is a note that spilled over the last measure\r\n const nnote = SmoNote.cloneWithDuration(note, {\r\n numerator: this.remainder,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += this.remainder;\r\n this.remainder = 0;\r\n } else {\r\n // The note won't fit, so we split it in 2 and paste the remainder in the next measure.\r\n // TODO: tie the last note to this one.\r\n const partial = totalDuration - currentDuration;\r\n const dar = SmoMusic.gcdMap(partial);\r\n for (j = 0; j < dar.length; ++j) {\r\n const ddd = dar[j];\r\n const vnote = SmoNote.cloneWithDuration(note, {\r\n numerator: ddd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n voice.notes.push(vnote);\r\n }\r\n currentDuration += partial;\r\n\r\n // Set the remaining length of the current note, this will be added to the\r\n // next measure with the previous note's pitches\r\n this.remainder = note.tickCount - partial;\r\n }\r\n }\r\n }\r\n\r\n // ### _populatePost\r\n // When we paste, we replace entire measures. Populate the last measure from the end of paste to the\r\n // end of the measure with notes in the existing measure.\r\n _populatePost(voice: SmoVoice, voiceIndex: number, measure: SmoMeasure, tickmap: TickMap) {\r\n let startTicks = PasteBuffer._countTicks(voice);\r\n let existingIndex = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (startTicks < totalDuration) {\r\n // Find the point in the music where the paste area runs out, or as close as we can get.\r\n existingIndex = tickmap.durationMap.indexOf(startTicks);\r\n existingIndex = (existingIndex < 0) ? measure.voices[voiceIndex].notes.length - 1 : existingIndex;\r\n const note = measure.voices[voiceIndex].notes[existingIndex];\r\n if (note.isTuplet) {\r\n const tuplet = measure.getTupletForNote(note) as SmoTuplet;\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet);\r\n startTicks += tuplet.tickCount;\r\n voice.notes = voice.notes.concat(ntuplet.notes);\r\n measure.tuplets.push(ntuplet);\r\n measure.removeTupletForNote(note);\r\n } else {\r\n const ticksLeft = totalDuration - startTicks;\r\n if (ticksLeft >= note.tickCount) {\r\n startTicks += note.tickCount;\r\n voice.notes.push(SmoNote.clone(note));\r\n } else {\r\n const remainder = totalDuration - startTicks;\r\n voice.notes.push(SmoNote.cloneWithDuration(note, {\r\n numerator: remainder,\r\n denominator: 1,\r\n remainder: 0\r\n }));\r\n startTicks = totalDuration;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _pasteVoiceSer(ser: any, vobj: any, voiceIx: number) {\r\n const voices: any[] = [];\r\n let ix = 0; \r\n ser.voices.forEach((vc: any) => {\r\n if (ix !== voiceIx) {\r\n voices.push(vc);\r\n } else {\r\n voices.push(vobj);\r\n }\r\n ix += 1;\r\n });\r\n // If we are pasting into a measure that doesn't contain this voice, add the voice\r\n if (ser.voices.length <= voiceIx) {\r\n voices.push(vobj);\r\n }\r\n ser.voices = voices;\r\n }\r\n\r\n pasteSelections(selector: SmoSelector) {\r\n let i = 0;\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n const maxCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const minCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const backupNotes: PasteNote[] = [];\r\n this.notes.forEach((bb) => {\r\n const note = (SmoNote.deserialize(bb.note.serialize()));\r\n const selector = JSON.parse(JSON.stringify(bb.selector));\r\n backupNotes.push({ note, selector, originalKey: bb.originalKey });\r\n });\r\n this.destination = selector;\r\n if (minCutVoice === maxCutVoice && minCutVoice > this.destination.voice) {\r\n this.destination.voice = minCutVoice;\r\n \r\n }\r\n this.modifiersToPlace = [];\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n if (!this.score) {\r\n return;\r\n }\r\n this.noteIndex = 0;\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n const voices = this._populateVoice(this.destination.voice);\r\n const measureSel = JSON.parse(JSON.stringify(this.destination));\r\n const selectors: SmoSelector[] = [];\r\n for (i = 0; i < this.measures.length && i < voices.length; ++i) {\r\n const measure: SmoMeasure = this.measures[i];\r\n const nvoice: SmoVoice = voices[i];\r\n const ser: any = measure.serialize();\r\n // Make sure the key is concert pitch, it is what measure constructor expects\r\n ser.transposeIndex = measure.transposeIndex; // default values are undefined, make sure the transpose is valid\r\n ser.keySignature = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n ser.timeSignature = measure.timeSignature.serialize();\r\n ser.tempo = measure.tempo.serialize();\r\n const vobj: any = {\r\n notes: []\r\n };\r\n nvoice.notes.forEach((note: SmoNote) => {\r\n vobj.notes.push(note.serialize());\r\n });\r\n\r\n // TODO: figure out how to do this with multiple voices\r\n this._pasteVoiceSer(ser, vobj, this.destination.voice);\r\n const nmeasure = SmoMeasure.deserialize(ser);\r\n // If this is the non-display buffer, don't try to reset the display rectangles.\r\n // Q: Is this even required since we are going to re-render?\r\n // A: yes, because until we do, the replaced measure needs the formatting info\r\n if (measure.svg.logicalBox && measure.svg.logicalBox.width > 0) {\r\n nmeasure.setBox(SvgHelpers.smoBox(measure.svg.logicalBox), 'copypaste');\r\n nmeasure.setX(measure.svg.logicalBox.x, 'copyPaste');\r\n nmeasure.setWidth(measure.svg.logicalBox.width, 'copypaste');\r\n nmeasure.setY(measure.svg.logicalBox.y, 'copypaste');\r\n nmeasure.svg.element = measure.svg.element;\r\n }\r\n ['forceClef', 'forceKeySignature', 'forceTimeSignature', 'forceTempo'].forEach((flag) => {\r\n (nmeasure as any)[flag] = (measure.svg as any)[flag];\r\n });\r\n this.score.replaceMeasure(measureSel, nmeasure);\r\n measureSel.measure += 1;\r\n selectors.push(\r\n { staff: selector.staff, measure: nmeasure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] }\r\n );\r\n }\r\n this.replacementMeasures = [];\r\n selectors.forEach((selector: SmoSelector) => {\r\n const nsel: SmoSelection | null = SmoSelection.measureSelection(this.score as SmoScore, selector.staff, selector.measure);\r\n if (nsel) {\r\n this.replacementMeasures.push(nsel);\r\n }\r\n });\r\n this.modifiersToPlace.forEach((mod) => {\r\n let selection = SmoSelection.selectionFromSelector(this.score!, mod.modifier.endSelector);\r\n while (selection && mod.ticksToStart !== 0) {\r\n if (mod.ticksToStart < 0) {\r\n selection = SmoSelection.nextNoteSelectionFromSelector(this.score!, selection.selector);\r\n } else {\r\n selection = SmoSelection.lastNoteSelectionFromSelector(this.score!, selection.selector);\r\n }\r\n mod.ticksToStart -= 1 * Math.sign(mod.ticksToStart);\r\n }\r\n if (selection) {\r\n mod.modifier.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n selection.staff.addStaffModifier(mod.modifier);\r\n }\r\n });\r\n this.notes = backupNotes;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Pitch, PitchLetter, Clef, getId } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasureParams, SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff, SmoSystemStaffParams } from '../data/systemStaff';\r\nimport { SmoArticulation, SmoGraceNote, SmoLyric, SmoMicrotone, SmoOrnament,\r\n SmoDynamicText } from '../data/noteModifiers';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureText, SmoVolta, SmoMeasureFormat, SmoTempoText, SmoBarline,\r\n TimeSignature, SmoRepeatSymbol\r\n} from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie, StaffModifierBase, SmoTieParams, SmoInstrument, SmoStaffHairpinParams,\r\n SmoSlurParams, SmoInstrumentMeasure, SmoStaffTextBracket, SmoStaffTextBracketParams } from '../data/staffModifiers';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from './selections';\r\nimport {\r\n SmoDuration, SmoContractNoteActor, SmoStretchNoteActor, SmoMakeTupletActor,\r\n SmoUnmakeTupletActor, SmoContractTupletActor\r\n} from './tickDuration';\r\nimport { SmoBeamer } from './beamers';\r\n/**\r\n * supported operations for {@link SmoOperation.batchSelectionOperation} to change a note's duration\r\n */\r\nexport type BatchSelectionOperation = 'dotDuration' | 'undotDuration' | 'doubleDuration' | 'halveDuration' |\r\n 'doubleGraceNoteDuration' | 'halveGraceNoteDuration';\r\n\r\n/**\r\n * SmoOperation is a collection of static methods that operate on/change/transform the music. Most methods\r\n * take the score, a selection or selection array, and the parameters of the operation.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoOperation {\r\n static setMeasureFormat(score: SmoScore, selection: SmoSelection, value: SmoMeasureFormat) {\r\n if (!score.formattingManager) {\r\n return;\r\n }\r\n score.staves.forEach((staff: SmoSystemStaff) => {\r\n value.formatMeasure(staff.measures[selection.selector.measure]);\r\n });\r\n score.formattingManager.updateMeasureFormat(value);\r\n }\r\n\r\n static addKeySignature(score: SmoScore, selection: SmoSelection, keySignature: string) {\r\n score.addKeySignature(selection.selector.measure, keySignature);\r\n }\r\n static addConnectorDown(score: SmoScore, selections: SmoSelection[], parameters: SmoSystemGroup) {\r\n const msel = SmoSelection.getMeasureList(selections);\r\n const len = msel.length - 1;\r\n if (score.staves.length <= msel[len].selector.staff) {\r\n return;\r\n }\r\n const existing = score.getSystemGroupForStaff(msel[0]);\r\n if (existing && existing.endSelector.staff < selections[len].selector.staff) {\r\n existing.endSelector.staff = msel[len].selector.staff + 1;\r\n } else {\r\n parameters.startSelector = SmoSelector.default;\r\n parameters.startSelector.staff = msel[0].selector.staff;\r\n parameters.startSelector.measure = msel[0].selector.measure;\r\n parameters.endSelector = SmoSelector.default;\r\n parameters.endSelector.staff = msel[len].selector.staff + 1;\r\n parameters.endSelector.measure = msel[len].selector.measure;\r\n score.addOrReplaceSystemGroup(new SmoSystemGroup(parameters));\r\n }\r\n }\r\n static toggleBeamGroup(noteSelection: SmoSelection) {\r\n if (!noteSelection.note) {\r\n return;\r\n }\r\n noteSelection.note.endBeam = !(noteSelection.note.endBeam);\r\n }\r\n static setActiveVoice(score: SmoScore, voiceIx: number) {\r\n score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n measure.setActiveVoice(voiceIx);\r\n });\r\n });\r\n }\r\n\r\n static addRemoveMicrotone(ignore: any, selections: SmoSelection[], tone: SmoMicrotone) {\r\n selections.forEach((sel) => {\r\n const note = sel.note;\r\n if (note) {\r\n const oldTone = note.getMicrotone(tone.pitchIndex);\r\n if (oldTone) {\r\n note.removeMicrotone(oldTone);\r\n } else {\r\n note.addMicrotone(tone);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static moveStaffUpDown(score: SmoScore, selection: SmoSelection, index: number) {\r\n const index1 = selection.selector.staff;\r\n const index2 = selection.selector.staff + index;\r\n if (index2 < score.staves.length && index2 >= 0) {\r\n score.swapStaves(index1, index2);\r\n }\r\n }\r\n\r\n static depopulateVoice(selection: SmoSelection, voiceIx: number) {\r\n let ix = 0;\r\n const voices: SmoVoice[] = [];\r\n const measure = selection.measure;\r\n measure.voices.forEach((voice) => {\r\n if (measure.voices.length < 2 || ix !== voiceIx) {\r\n voices.push(voice);\r\n }\r\n ix += 1;\r\n });\r\n measure.voices = voices;\r\n\r\n if (measure.getActiveVoice() >= measure.voices.length) {\r\n measure.setActiveVoice(0);\r\n }\r\n }\r\n\r\n static populateVoice(selection: SmoSelection, voiceIx: number) {\r\n selection.measure.populateVoice(voiceIx);\r\n }\r\n\r\n static setTimeSignature(score: SmoScore, selections: SmoSelection[], timeSignature: TimeSignature) {\r\n const selectors: SmoSelector[] = [];\r\n let i = 0;\r\n // change the time signature for each stave in the score\r\n selections.forEach((selection) => {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measureSel: SmoSelector = SmoSelector.measureSelector(i, selection.selector.measure);\r\n selectors.push(measureSel);\r\n }\r\n });\r\n selectors.forEach((selector: SmoSelector) => {\r\n const rowSelection: SmoSelection = (SmoSelection.measureSelection(score, selector.staff, selector.measure) as SmoSelection);\r\n rowSelection.measure.timeSignature = new TimeSignature(timeSignature);\r\n rowSelection.measure.alignNotesWithTimeSignature();\r\n });\r\n }\r\n\r\n static batchSelectionOperation(score: SmoScore, selections: SmoSelection[], operation: BatchSelectionOperation) {\r\n var measureTicks: { selector: SmoSelector, tickOffset: number }[] = [];\r\n selections.forEach((selection) => {\r\n const tm = selection.measure.tickmapForVoice(selection.selector.voice);\r\n const tickOffset = tm.durationMap[selection.selector.tick];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n measureTicks.push({\r\n selector,\r\n tickOffset\r\n });\r\n });\r\n measureTicks.forEach((measureTick) => {\r\n const selection = SmoSelection.measureSelection(score, measureTick.selector.staff, measureTick.selector.measure) as SmoSelection;\r\n const tickmap = selection.measure.tickmapForVoice(measureTick.selector.voice);\r\n const ix = tickmap.durationMap.indexOf(measureTick.tickOffset);\r\n if (ix >= 0) {\r\n const nsel = SmoSelection.noteSelection(score, measureTick.selector.staff, measureTick.selector.measure,\r\n measureTick.selector.voice, ix);\r\n (SmoOperation as any)[operation](nsel);\r\n }\r\n });\r\n }\r\n // ## doubleDuration\r\n // ## Description\r\n // double the duration of a note in a measure, at the expense of the following\r\n // note, if possible. Works on tuplets also.\r\n static doubleDuration(selection: SmoSelection) {\r\n const note = selection.note;\r\n const measure = selection.measure;\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n SmoDuration.doubleDurationNonTuplet(selection);\r\n } else {\r\n SmoDuration.doubleDurationTuplet(selection);\r\n }\r\n return true;\r\n }\r\n\r\n // ## halveDuration\r\n // ## Description\r\n // Replace the note with 2 notes of 1/2 duration, if possible\r\n // Works on tuplets also.\r\n static halveDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n let divisor = 2;\r\n const measure = selection.measure;\r\n const tuplet = measure.getTupletForNote(note);\r\n if (measure.timeSignature.actualBeats % 3 === 0 && note.tickCount === 6144) {\r\n // special behavior, if this is dotted 1/4 in 6/8, split to 3\r\n divisor = 3;\r\n }\r\n if (!tuplet) {\r\n const nticks = note.tickCount / divisor;\r\n if (!SmoMusic.validDurations[nticks]) {\r\n return;\r\n }\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: selection.measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n SmoBeamer.applyBeams(measure);\r\n } else {\r\n const startIndex = measure.tupletIndex(tuplet) + tuplet.getIndexOfNote(note);\r\n SmoContractTupletActor.apply({\r\n changeIndex: startIndex,\r\n measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n }\r\n\r\n // ## makeTuplet\r\n // ## Description\r\n // Makes a non-tuplet into a tuplet of equal value.\r\n static makeTuplet(selection: SmoSelection, numNotes: number) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n if (measure.getTupletForNote(note)) {\r\n return;\r\n }\r\n const nticks = note.tickCount;\r\n SmoMakeTupletActor.apply({\r\n index: selection.selector.tick,\r\n totalTicks: nticks,\r\n numNotes,\r\n measure: selection.measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n static addStaffModifier(selection: SmoSelection, modifier: StaffModifierBase) {\r\n selection.staff.addStaffModifier(modifier);\r\n }\r\n static toggleRest(selection: SmoSelection) {\r\n selection.note?.toggleRest();\r\n }\r\n static toggleSlash(selection: SmoSelection) {\r\n selection.note?.toggleSlash();\r\n }\r\n\r\n static makeRest(selection: SmoSelection) {\r\n selection.note?.makeRest();\r\n }\r\n static makeNote(selection: SmoSelection) {\r\n selection.note?.makeNote();\r\n }\r\n static setNoteHead(selections: SmoSelection[], noteHead: string) {\r\n selections.forEach((selection: SmoSelection) => {\r\n selection.note?.setNoteHead(noteHead);\r\n });\r\n }\r\n\r\n static addGraceNote(selection: SmoSelection, g: SmoGraceNote, offset: number) {\r\n selection.note?.addGraceNote(g, offset);\r\n }\r\n\r\n static removeGraceNote(selection: SmoSelection, offset: number) {\r\n selection.note?.removeGraceNote(offset);\r\n }\r\n\r\n static doubleGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator * 2;\r\n });\r\n }\r\n static halveGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator / 2;\r\n });\r\n }\r\n\r\n static toggleGraceNoteCourtesy(selection: any, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n mm.pitches.forEach((pitch: Pitch) => {\r\n // eslint-disable-next-line\r\n pitch.cautionary = pitch.cautionary ? false : true;\r\n });\r\n });\r\n }\r\n static toggleGraceNoteEnharmonic(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.pitches.forEach((pitch) => {\r\n SmoNote.toggleEnharmonic(pitch);\r\n });\r\n });\r\n }\r\n\r\n static transposeGraceNotes(selection: SmoSelection, modifiers: SmoGraceNote[], offset: number) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n const par: Pitch[] = [];\r\n if (!mm) {\r\n console.warn('bad modifier grace note');\r\n return;\r\n }\r\n mm.pitches.forEach((pitch) => {\r\n par.push(SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset));\r\n });\r\n mm.pitches = par;\r\n });\r\n }\r\n\r\n static slashGraceNotes(selections: ModifierTab[] | ModifierTab) {\r\n if (!Array.isArray(selections)) {\r\n selections = [selections];\r\n }\r\n // TODO: modifiers on artifacts should be typed\r\n selections.forEach((mm: any) => {\r\n if (mm.modifier && mm.modifier.ctor === 'SmoGraceNote') {\r\n mm.modifier.slash = !mm.modifier.slash;\r\n }\r\n });\r\n }\r\n\r\n // ## unmakeTuplet\r\n // ## Description\r\n // Makes a tuplet into a single with the duration of the whole tuplet\r\n static unmakeTuplet(selection: SmoSelection) {\r\n const note = selection.note;\r\n const measure = selection.measure;\r\n if (!measure.getTupletForNote(note)) {\r\n return;\r\n }\r\n const tuplet = measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return;\r\n }\r\n const startIndex = measure.tupletIndex(tuplet);\r\n const endIndex = tuplet.notes.length + startIndex - 1;\r\n\r\n SmoUnmakeTupletActor.apply({\r\n startIndex,\r\n endIndex,\r\n measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n\r\n // ## dotDuration\r\n // ## Description\r\n // Add a dot to a note, if possible, and make the note ahead of it shorter\r\n // to compensate.\r\n static dotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const nticks = SmoMusic.getNextDottedLevel(note.tickCount);\r\n if (nticks === note.tickCount) {\r\n return;\r\n }\r\n // Don't dot if the thing on the right of the . is too small\r\n const dotCount = SmoMusic.smoTicksToVexDots(nticks);\r\n const multiplier = Math.pow(2, dotCount);\r\n const baseDot = SmoMusic.closestDurationTickLtEq(nticks) / (multiplier * 2);\r\n if (baseDot <= 128) {\r\n return;\r\n }\r\n // If this is the ultimate note in the measure, we can't increase the length\r\n if (selection.selector.tick + 1 === selection.measure.voices[selection.selector.voice].notes.length) {\r\n return;\r\n }\r\n if (selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount > note.tickCount) {\r\n console.log('too long');\r\n return;\r\n }\r\n // is dot too short?\r\n if (!SmoMusic.validDurations[selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount / 2]) {\r\n return;\r\n }\r\n SmoStretchNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n }\r\n\r\n // ## undotDuration\r\n // ## Description\r\n // Add the value of the last dot to the note, increasing length and\r\n // reducing the number of dots.\r\n static undotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const nticks = SmoMusic.getPreviousDottedLevel(note.tickCount);\r\n if (nticks === note.tickCount) {\r\n return;\r\n }\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n }\r\n\r\n static transposeScore(score: SmoScore, offset: number) {\r\n score.staves.forEach((staff, staffIx) => {\r\n staff.measures.forEach((measure, measureIx) => {\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note, tickIx) => {\r\n const selection = SmoSelection.noteSelection(\r\n score,staffIx, measureIx, voiceIx, tickIx);\r\n if (selection) {\r\n this.transpose(selection, offset);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n // ## transpose\r\n // ## Description\r\n // Transpose the selected note, trying to find a key-signature friendly value\r\n static transpose(selection: SmoSelection, offset: number) {\r\n let trans: Pitch;\r\n let transInt: number = 0;\r\n let i: number = 0;\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n selection.selector.pitches = [];\r\n }\r\n const measure = selection.measure;\r\n const note = selection.note;\r\n if (measure && note) {\r\n const pitchar: Pitch[] = [];\r\n note.pitches.forEach((opitch, pitchIx) => {\r\n // Only translate selected pitches\r\n const shouldXpose = selection.selector.pitches.length === 0 ||\r\n selection.selector.pitches.indexOf(pitchIx) >= 0;\r\n\r\n // Translate the pitch, ignoring enharmonic\r\n trans = shouldXpose ? SmoMusic.getKeyOffset(opitch, offset)\r\n : JSON.parse(JSON.stringify(opitch));\r\n if (shouldXpose) {\r\n trans = SmoMusic.getEnharmonicInKey(trans, measure.keySignature);\r\n if (!trans.accidental) {\r\n trans.accidental = 'n';\r\n }\r\n transInt = SmoMusic.smoPitchToInt(trans);\r\n\r\n // Look through the earlier notes in the measure and try\r\n // to find an equivalent note, and convert it if it exists.\r\n measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n // eslint-disable-next-line\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n const prevInt = SmoMusic.smoPitchToInt(prevPitch);\r\n if (prevInt === transInt) {\r\n trans = JSON.parse(JSON.stringify(prevPitch));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n pitchar.push(trans as Pitch);\r\n });\r\n note.pitches = pitchar;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // ## setPitch\r\n // ## Description:\r\n // pitches can be either an array, a single pitch, or a letter. In the latter case,\r\n // the letter value appropriate for the key signature is used, e.g. c in A major becomes\r\n // c#\r\n static setPitch(selection: SmoSelection, pitches: Pitch[]) {\r\n let i = 0;\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n if (typeof (note) === 'undefined') {\r\n console.warn('set Pitch on invalid note');\r\n return;\r\n }\r\n note.makeNote();\r\n // TODO allow hint for octave\r\n const octave = note.pitches[0].octave;\r\n note.pitches = [];\r\n if (!Array.isArray(pitches)) {\r\n pitches = [pitches];\r\n }\r\n const earlierAccidental = (pitch: Pitch) => {\r\n selection.measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n if (prevNote === null || prevNote.pitches === null) {\r\n console.log('this will die null');\r\n }\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n if (prevNote.noteType === 'n' && prevPitch.letter === pitch.letter) {\r\n pitch.accidental = prevPitch.accidental;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n pitches.forEach((pitch) => {\r\n if (typeof (pitch) === 'string') {\r\n const letter = SmoMusic.getKeySignatureKey(pitch[0], measure.keySignature);\r\n pitch = {\r\n letter: letter[0] as PitchLetter,\r\n accidental: letter.length > 1 ? letter.substring(1) : '',\r\n octave\r\n };\r\n }\r\n earlierAccidental(pitch);\r\n note.pitches.push(pitch);\r\n });\r\n }\r\n\r\n static toggleCourtesyAccidental(selection: SmoSelection) {\r\n let toBe: boolean = false;\r\n const note = selection.note as SmoNote;\r\n if (!selection.selector.pitches || selection.selector.pitches.length === 0) {\r\n const ps: Pitch[] = [];\r\n note.pitches.forEach((pitch) => {\r\n const p = JSON.parse(JSON.stringify(pitch));\r\n ps.push(p);\r\n p.cautionary = !(pitch.cautionary);\r\n });\r\n note.pitches = ps;\r\n } else {\r\n toBe = !(note.pitches[selection.selector.pitches[0]].cautionary);\r\n }\r\n SmoOperation.courtesyAccidental(selection, toBe);\r\n }\r\n\r\n static courtesyAccidental(pitchSelection: SmoSelection, toBe: boolean) {\r\n pitchSelection.selector.pitches.forEach((pitchIx) => {\r\n (pitchSelection.note as SmoNote).pitches[pitchIx].cautionary = toBe;\r\n });\r\n }\r\n\r\n static toggleEnharmonic(pitchSelection: SmoSelection) {\r\n if (pitchSelection.selector.pitches.length === 0) {\r\n pitchSelection.selector.pitches.push(0);\r\n }\r\n const pitch = (pitchSelection.note as SmoNote).pitches[pitchSelection.selector.pitches[0]];\r\n SmoNote.toggleEnharmonic(pitch);\r\n }\r\n\r\n static addDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).addDynamic(dynamic);\r\n }\r\n\r\n static removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).removeDynamic(dynamic);\r\n }\r\n\r\n static beamSelections(score: SmoScore, selections: SmoSelection[]) {\r\n const start = selections[0].selector;\r\n let cur = selections[0].selector;\r\n const beamGroup: SmoNote[] = [];\r\n let ticks = 0;\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n if (SmoSelector.sameNote(start, selection.selector) ||\r\n (SmoSelector.sameMeasure(selection.selector, cur) &&\r\n cur.tick === selection.selector.tick - 1)) {\r\n ticks += note.tickCount;\r\n cur = selection.selector;\r\n beamGroup.push(note);\r\n }\r\n });\r\n if (beamGroup.length) {\r\n beamGroup.forEach((note) => {\r\n note.beamBeats = ticks;\r\n note.endBeam = false;\r\n });\r\n beamGroup[beamGroup.length - 1].endBeam = true;\r\n // Make sure the last note of the previous beam is the end of this beam group.\r\n if (selections[0].selector.tick > 0) {\r\n const ps = JSON.parse(JSON.stringify(selections[0].selector));\r\n ps.tick -= 1;\r\n const previous: SmoSelection | null = SmoSelection.noteFromSelector(score, ps);\r\n if (previous?.note && previous.note.tickCount < 4096) {\r\n previous.note.endBeam = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static toggleBeamDirection(selections: SmoSelection[]) {\r\n const note0 = selections[0].note as SmoNote;\r\n note0.toggleFlagState();\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n note.flagState = note0.flagState;\r\n });\r\n }\r\n\r\n static toggleOrnament(selection: SmoSelection, ornament: SmoOrnament) {\r\n (selection.note as SmoNote).toggleOrnament(ornament);\r\n }\r\n\r\n static toggleArticulation(selection: SmoSelection, articulation: SmoArticulation) {\r\n (selection.note as SmoNote).toggleArticulation(articulation);\r\n }\r\n\r\n static addEnding(score: SmoScore, parameters: SmoVolta) {\r\n let m = 0;\r\n let s = 0;\r\n const startMeasure = parameters.startBar;\r\n const endMeasure = parameters.endBar;\r\n\r\n // Ending ID ties all the instances of an ending across staves\r\n parameters.endingId = getId().toString();\r\n score.staves.forEach((staff) => {\r\n m = 0;\r\n staff.measures.forEach((measure) => {\r\n if (m === startMeasure) {\r\n const pp = JSON.parse(JSON.stringify(parameters));\r\n pp.startSelector = {\r\n staff: s,\r\n measure: startMeasure\r\n };\r\n pp.endSelector = {\r\n staff: s,\r\n measure: endMeasure\r\n };\r\n const ending = new SmoVolta(pp);\r\n measure.addNthEnding(ending);\r\n }\r\n m += 1;\r\n });\r\n s += 1;\r\n });\r\n }\r\n\r\n static removeEnding(score: SmoScore, ending: SmoVolta) {\r\n let i = 0;\r\n score.staves.forEach((staff) => {\r\n // bug\r\n // Due to deleted measures, volta might not match up so look through all measures.\r\n for (i = 0; i < staff.measures.length; ++i) {\r\n staff.measures[i].removeNthEnding(ending);\r\n }\r\n });\r\n }\r\n\r\n static addTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.addTextGroup(textGroup);\r\n }\r\n\r\n static removeTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.removeTextGroup(textGroup);\r\n }\r\n\r\n static addMeasureText(score: SmoScore, selection: SmoSelection, measureText: SmoMeasureText) {\r\n const current = selection.measure.getMeasureText();\r\n // TODO: should we allow multiples per position\r\n current.forEach((mod) => {\r\n selection.measure.removeMeasureText(mod.attrs.id);\r\n });\r\n selection.measure.addMeasureText(measureText);\r\n }\r\n\r\n static removeMeasureText(score: SmoScore, selection: SmoSelection, mt: SmoMeasureText) {\r\n selection.measure.removeMeasureText(mt.attrs.id);\r\n }\r\n\r\n static removeRehearsalMark(score: SmoScore, selection: SmoSelection) {\r\n score.staves.forEach((staff) => {\r\n staff.removeRehearsalMark(selection.selector.measure);\r\n });\r\n }\r\n\r\n static addRehearsalMark(score: SmoScore, selection: SmoSelection, rehearsalMark: SmoRehearsalMark) {\r\n score.staves.forEach((staff) => {\r\n const mt = new SmoRehearsalMark(rehearsalMark.serialize());\r\n staff.addRehearsalMark(selection.selector.measure, mt);\r\n });\r\n }\r\n\r\n static addTempo(score: SmoScore, selection: SmoSelection, tempo: SmoTempoText) {\r\n score.staves.forEach((staff) => {\r\n staff.addTempo(tempo, selection.selector.measure);\r\n });\r\n }\r\n\r\n static setMeasureBarline(score: SmoScore, selection: SmoSelection, barline: SmoBarline) {\r\n const mm = selection.selector.measure;\r\n let ix = 0;\r\n score.staves.forEach(() => {\r\n const s2: SmoSelection | null = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setBarline(barline);\r\n ix += 1;\r\n });\r\n }\r\n\r\n static setRepeatSymbol(score: SmoScore, selection: SmoSelection, sym: SmoRepeatSymbol) {\r\n let ix = 0;\r\n const mm = selection.selector.measure;\r\n score.staves.forEach(() => {\r\n const s2 = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setRepeatSymbol(sym);\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ## interval\r\n // Add a pitch at the specified interval to the chord in the selection.\r\n static interval(selection: SmoSelection, interval: number) {\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n let pitch: Pitch = {} as Pitch;\r\n\r\n // TODO: figure out which pitch is selected\r\n pitch = note.pitches[0];\r\n if (interval > 0) {\r\n pitch = note.pitches[note.pitches.length - 1];\r\n }\r\n pitch = SmoMusic.getIntervalInKey(pitch, measure.keySignature, interval);\r\n if (pitch) {\r\n note.pitches.push(pitch);\r\n note.pitches.sort((x, y) =>\r\n SmoMusic.smoPitchToInt(x) - SmoMusic.smoPitchToInt(y)\r\n );\r\n return true;\r\n }\r\n return false;\r\n }\r\n static addOrReplaceBracket(modifier: SmoStaffTextBracket, fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n fromSelection.staff.addTextBracket(modifier);\r\n }\r\n static ritard(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.RITARD;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static accelerando(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.ACCEL;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static crescendoBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static dimenuendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static crescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.CRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n\r\n static decrescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.DECRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n static tie(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n // By default, just tie all the pitches to all the other pitches in order\r\n const lines = SmoTie.createLines(fromSelection.note as SmoNote, toSelection.note as SmoNote);\r\n const params: SmoTieParams = SmoTie.defaults;\r\n params.startSelector = fromSelection.selector;\r\n params.endSelector = toSelection.selector;\r\n params.lines = lines;\r\n const modifier = new SmoTie(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n\r\n static getSlurDefaultParameters(selections: SmoSelection[]) {\r\n const lastIndex = selections.length - 1;\r\n const note1 = selections[0].note;\r\n const note2 = selections[lastIndex].note;\r\n const inners = [];\r\n let minLine = -1;\r\n let maxLine = 0;\r\n if (selections.length > 2) {\r\n for (var i = 1; i < selections.length - 1; ++i) {\r\n inners.push(selections[i]);\r\n }\r\n }\r\n if (note1 === null || note2 === null) {\r\n throw('no note in slur selections');\r\n } \r\n }\r\n /**\r\n * Heuristically determine how a slur should be formatted based on the notes. Determine control points,\r\n * offset, and alignment\r\n * \r\n * ## Note: Vexflow slurs consider `top` to mean the furthest point from the note head, which could be the top\r\n * or the bottom of the note. It also considers yoffset to be negative if inverted is set. Head means close to the\r\n * note head.\r\n * @param score \r\n * @param fromSelection \r\n * @param toSelection \r\n * @returns \r\n */\r\n static getDefaultSlurDirection(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector, \r\n forcePosition: number, forceOrientation: number):SmoSlurParams {\r\n const params: SmoSlurParams = SmoSlur.defaults;\r\n const sels = SmoSelector.order(fromSelector, toSelector);\r\n params.startSelector = JSON.parse(JSON.stringify(sels[0]));\r\n params.endSelector = JSON.parse(JSON.stringify(sels[1]));\r\n const fromSelection = SmoSelection.noteFromSelector(score, fromSelector);\r\n if (!fromSelection) {\r\n return params;\r\n }\r\n // Get all selections within the slur\r\n const selections = SmoSelection.innerSelections(score, sels[0], sels[1]).filter((ff) => ff.selector.voice === fromSelection.selector.voice);\r\n const dirs: Record = {};\r\n const beamGroups: Record = {};\r\n let startDir = SmoNote.flagStates.up;\r\n let mixed = false;\r\n let endDir = SmoNote.flagStates.up;\r\n let firstGap = 0;\r\n let lastGap = 0;\r\n if (selections.length < 1) {\r\n return new SmoSlur(params);\r\n }\r\n \r\n selections.forEach((selection, selectionIx) => {\r\n const note = selection.note!;\r\n if (note.beam_group) {\r\n beamGroups[note.beam_group.id] = true;\r\n } else {\r\n beamGroups[note.attrs.id] = true;\r\n }\r\n // Find the gap between the first and second note, and also between last 2. If they are far apart,\r\n // increase the control points so the slurs don't run into the notes\r\n if (selectionIx === 1) {\r\n const lastNote = selections[0].note!;\r\n firstGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(lastNote.clef as Clef, lastNote.pitches[0]));\r\n }\r\n if (selectionIx === selections.length - 2 && selections.length > 2) {\r\n const nextNote = selections[selectionIx + 1].note!;\r\n lastGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(nextNote.clef as Clef, nextNote.pitches[0]));\r\n }\r\n const fstate = SmoMusic.flagStateFromNote(note.clef as Clef, note);\r\n // Keep track of the number of stem directions, so we can determine if the flags are mixed direction\r\n // the rules are a little different for mixed - we always try to put the slur on (the real) top of the staff.\r\n dirs[fstate] = true;\r\n if (selectionIx === 0) {\r\n startDir = fstate;\r\n }\r\n if (selectionIx === selections.length - 1) {\r\n endDir = fstate;\r\n }\r\n });\r\n params.invert = false;\r\n mixed = Object.keys(dirs).length > 1;\r\n // If the notes are beamed together, we assume the beams point in the same direction\r\n if (Object.keys(beamGroups).length < 2) {\r\n mixed = false;\r\n }\r\n if (forcePosition === SmoSlur.positions.ABOVE) {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n if (startDir === SmoNote.flagStates.up && forceOrientation !== SmoSlur.orientations.DOWN) {\r\n params.invert = true;\r\n }\r\n } else if (forcePosition === SmoSlur.positions.BELOW) {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.HEAD : SmoSlur.positions.TOP;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.HEAD : SmoSlur.positions.TOP;\r\n if (startDir === SmoNote.flagStates.down && forceOrientation !== SmoSlur.orientations.UP) {\r\n params.invert = true;\r\n }\r\n } else {\r\n if (mixed) {\r\n // special case: slur 2 notes, note heads close, connect the note heads\r\n // to keep a flat arc\r\n if (selections.length === 2 && firstGap < 3) {\r\n params.position = SmoSlur.positions.HEAD;\r\n params.position_end = SmoSlur.positions.HEAD;\r\n params.xOffset = 5;\r\n } else {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n if (firstGap >= 3 || lastGap >= 3) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n }\r\n }\r\n params.invert = endDir === SmoNote.flagStates.up;\r\n } \r\n if (!mixed) {\r\n params.position = SmoSlur.positions.HEAD;\r\n params.position_end = SmoSlur.positions.HEAD;\r\n if (firstGap >= 2 || lastGap >= 2) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n params.yOffset += 10;\r\n } else {\r\n params.yOffset += 10;\r\n }\r\n }\r\n }\r\n if (selections.length === 2) {\r\n params.xOffset = 0;\r\n }\r\n return params;\r\n }\r\n static slur(score: SmoScore, fromSelection: SmoSelection, toSelection: SmoSelection): SmoSlurParams {\r\n const params = SmoOperation.getDefaultSlurDirection(score, fromSelection.selector, toSelection.selector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n const modifier: SmoSlur = new SmoSlur(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n static addStaff(score: SmoScore, parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n return score.addStaff(parameters);\r\n }\r\n static removeStaff(score: SmoScore, index: number) {\r\n score.removeStaff(index);\r\n }\r\n\r\n static transposeChords(smoNote: SmoNote, offset: number, key: string) {\r\n const chords = smoNote.getModifiers('SmoLyric');\r\n chords.forEach((ll) => {\r\n const lyric = ll as SmoLyric;\r\n if (lyric.parser === SmoLyric.parsers.chord) {\r\n const tx = lyric.getText();\r\n // Look for something that looks like a key name\r\n if (tx.length >= 1 && (tx[0].toUpperCase() >= 'A'\r\n && tx[0].toUpperCase() <= 'G')) {\r\n // toffset is 2 if the key has b or # in it\r\n let toffset = 1;\r\n let newText = tx[0];\r\n if (tx.length > 0 && tx[1] === 'b' || tx[1] === '#') {\r\n newText += tx[1];\r\n toffset = 2;\r\n }\r\n // Transpose the key, as if it were a key signature (octave has no meaning)\r\n let nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(\r\n SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(newText))) + offset);\r\n nkey = JSON.parse(JSON.stringify(SmoMusic.getEnharmonicInKey(nkey, key)));\r\n newText = nkey.letter.toUpperCase();\r\n\r\n // new key may have different length, e.g. Bb to B natural\r\n if (nkey.accidental !== 'n') {\r\n newText += nkey.accidental;\r\n }\r\n newText += tx.substr(toffset, tx.length - toffset);\r\n lyric.setText(newText);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Compute new map based on current instrument selections, adjusting existing instruments as required\r\n * @param instrument\r\n * @param selections\r\n */\r\n static changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]) {\r\n const measureSel = SmoSelection.getMeasureList(selections);\r\n const measureIndex = measureSel[0].selector.measure;\r\n const measureEnd = measureIndex + (measureSel.length - 1);\r\n instrument.startSelector = JSON.parse(JSON.stringify(measureSel[0].selector));\r\n instrument.endSelector = JSON.parse(JSON.stringify(measureSel[measureSel.length - 1].selector));\r\n const instMap: Record = {};\r\n const staffArray: SmoInstrumentMeasure[] = SmoSystemStaff.getStaffInstrumentArray(measureSel[0].staff.measureInstrumentMap);\r\n instMap[measureIndex] = instrument;\r\n staffArray.forEach((ar) => {\r\n if (ar.instrument.endSelector.measure < measureIndex || ar.instrument.startSelector.measure > measureEnd) {\r\n // No overlap, juse use the original instrument\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.startSelector.measure < measureIndex) {\r\n // overlap on left\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = ar.instrument.startSelector.measure;\r\n instMap[split1.startSelector.measure] = split1;\r\n split1.endSelector.measure = measureIndex - 1;\r\n if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on left and right\r\n const split2 = new SmoInstrument(ar.instrument);\r\n split2.startSelector.measure = measureEnd + 1;\r\n split2.endSelector.measure = ar.instrument.endSelector.measure;\r\n instMap[split2.startSelector.measure] = split2;\r\n }\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on right only\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = measureEnd + 1;\r\n instMap[split1.startSelector.measure] = split1;\r\n }\r\n });\r\n selections[0].staff.measureInstrumentMap = instMap;\r\n selections[0].staff.updateInstrumentOffsets();\r\n }\r\n static computeMultipartRest(score: SmoScore) {\r\n let i = 0;\r\n let j = 0;\r\n const measureRanges: Record = {};\r\n const measureCount = score.staves[0].measures.length;\r\n if (score.staves[0].partInfo.expandMultimeasureRests === true) {\r\n return;\r\n }\r\n while (i < measureCount) {\r\n let forceRest = score.staves[0].measures[i].format.forceRest;\r\n if (score.isMultimeasureRest(i, true, forceRest)) {\r\n for (j = i + 1; j < measureCount; ++j) {\r\n const restBreak = score.staves[0].measures[j].format.restBreak;\r\n forceRest = score.staves[0].measures[j].format.forceRest; \r\n if (!score.isMultimeasureRest(j, false, forceRest) || restBreak) {\r\n break; \r\n }\r\n }\r\n if (j - i >= 2) {\r\n measureRanges[i] = j;\r\n }\r\n i = j;\r\n } else {\r\n const startMeasure = i;\r\n score.staves.forEach((staff) => {\r\n staff.measures[startMeasure].svg.hideMultimeasure = false;\r\n });\r\n i += 1;\r\n }\r\n }\r\n const multiKeys = Object.keys(measureRanges).map((x) => parseInt(x, 10));\r\n multiKeys.forEach((key) => {\r\n const endMeasure = measureRanges[key];\r\n score.staves.forEach((staff) => {\r\n const mmLength = endMeasure - key;\r\n const svg = staff.measures[key].svg;\r\n svg.multimeasureLength = mmLength;\r\n if (svg.multimeasureLength > 1) {\r\n svg.multimeasureEndBarline = staff.measures[endMeasure - 1].getEndBarline().barline;\r\n }\r\n staff.measures[key].svg.hideMultimeasure = false;\r\n for (i = key + 1; i < endMeasure; ++i) {\r\n staff.measures[i].svg.hideMultimeasure = true;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Editing operations are performed on selections. A selection can be different things, from a single pitch\r\n * to many notes. These classes standardize some standard selection operations.\r\n * SmoSelector\r\n * @module /smo/xform/selections\r\n */\r\nimport { SmoScore, SmoModifier } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SvgBox, SvgPoint } from '../data/common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n/**\r\n * Modifier tab is a modifier and its bounding box, that can be tabbed to with the keyboard\r\n */\r\n export interface ModifierTab {\r\n modifier: SmoModifier,\r\n selection: SmoSelection | null,\r\n box: SvgBox,\r\n index: number\r\n}\r\n\r\n/**\r\n * There are 2 parts to a selection: the actual musical bits that are selected, and the\r\n * indices that define what was selected. This is the latter. The actual object does not\r\n * have any methods so there is no constructor.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelector {\r\n static get default(): SmoSelector {\r\n return {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n }\r\n staff: number = 0;\r\n measure: number = 0;\r\n voice: number = 0;\r\n tick: number = -1;\r\n pitches: number[] = [];\r\n\r\n static measureSelector(staff: number, measure: number): SmoSelector {\r\n return { staff, measure, voice: 0, tick: 0, pitches: [] };\r\n }\r\n\r\n // TODO: tick in selector s/b tickIndex\r\n static sameNote(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice\r\n && sel1.tick === sel2.tick);\r\n }\r\n static sameMeasure(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure);\r\n }\r\n\r\n static sameStaff(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return sel1.staff === sel2.staff;\r\n }\r\n /**\r\n * Return gt, not considering the voice (e.g. gt in time)\r\n * @param sel1 \r\n * @param sel2 \r\n */\r\n static gtInTime(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.measure > sel2.measure) ||\r\n (sel1.measure === sel2.measure && sel1.tick > sel2.tick);\r\n }\r\n\r\n // ## return true if sel1 > sel2.\r\n static gt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n // Note: voice is not considered b/c it's more of a vertical component\r\n // Note further: sometimes we need to consider voice\r\n return (sel1.staff > sel2.staff) ||\r\n (sel1.staff === sel2.staff && sel1.measure > sel2.measure) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice > sel2.voice) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice && sel1.tick > sel2.tick);\r\n }\r\n\r\n static eq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.voice === sel2.voice && sel1.measure === sel2.measure && sel1.tick === sel2.tick);\r\n }\r\n static neq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return !(SmoSelector.eq(sel1, sel2));\r\n }\r\n\r\n static lt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel2, sel1);\r\n }\r\n\r\n static gteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n static lteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.lt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n // Return 2 selectors in score order, rv[0] is first in time.\r\n static order(a: SmoSelector, b: SmoSelector): SmoSelector[] {\r\n if (SmoSelector.gtInTime(a, b)) {\r\n return [b, a];\r\n }\r\n return [a, b];\r\n }\r\n\r\n // ### getNoteKey\r\n // Get a key useful for a hash map of notes.\r\n static getNoteKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure + '-' + selector.voice + '-' + selector.tick;\r\n }\r\n\r\n static getMeasureKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure;\r\n }\r\n\r\n // return true if testSel is contained in the selStart to selEnd range.\r\n static contains(testSel: SmoSelector, selStart: SmoSelector, selEnd: SmoSelector) {\r\n const geStart =\r\n selStart.measure < testSel.measure ||\r\n (selStart.measure === testSel.measure && selStart.tick <= testSel.tick);\r\n const leEnd =\r\n selEnd.measure > testSel.measure ||\r\n (selEnd.measure === testSel.measure && testSel.tick <= selEnd.tick);\r\n\r\n return geStart && leEnd;\r\n }\r\n\r\n // create a hashmap key for a single note, used to organize modifiers\r\n static selectorNoteKey(selector: SmoSelector) {\r\n return 'staff-' + selector.staff + '-measure-' + selector.measure + '-voice-' + selector.voice + '-tick-' + selector.tick;\r\n }\r\n}\r\n/**\r\n * The fields in a selection. We have the 5 musical cardinal directions of staff, measure, note, pitches, \r\n * and a selector. The pitches are indices\r\n * */\r\nexport interface SmoSelectionParams {\r\n selector: SmoSelector,\r\n _staff: SmoSystemStaff,\r\n _measure: SmoMeasure,\r\n _note?: SmoNote,\r\n _pitches?: number[],\r\n type?: string,\r\n box?: SvgBox\r\n}\r\n\r\n/**\r\n * A selection is a {@link SmoSelector} and a set of references to musical elements, like measure etc.\r\n * The staff and measure are always a part of the selection, and possible a voice and note,\r\n * and one or more pitches. Selections can also be made from the UI by clicking on an element\r\n * or navigating to an element with the keyboard.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelection {\r\n selector: SmoSelector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n _staff: SmoSystemStaff;\r\n _measure: SmoMeasure;\r\n _note: SmoNote | null;\r\n _pitches: number[] = [];\r\n box: SvgBox | null = null;\r\n scrollBox: SvgPoint | null = null;\r\n // ### measureSelection\r\n // A selection that does not contain a specific note\r\n static measureSelection(score: SmoScore, staffIndex: number, measureIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n if (score.staves.length <= staffIndex) {\r\n return null;\r\n }\r\n const staff = score.staves[staffIndex];\r\n if (staff.measures.length <= measureIndex) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n type: 'measure'\r\n });\r\n }\r\n\r\n static measuresInColumn(score: SmoScore, staffIndex: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const sel = SmoSelection.measureSelection(score, i, staffIndex);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### noteSelection\r\n // a selection that specifies a note in the score\r\n static noteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex != null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n if (!staff) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n if (!measure) {\r\n return null;\r\n }\r\n if (measure.voices.length <= voiceIndex) {\r\n return null;\r\n }\r\n if (measure.voices[voiceIndex].notes.length <= tickIndex) {\r\n return null;\r\n }\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n const selector: SmoSelector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches: []\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n type: 'note'\r\n });\r\n }\r\n\r\n // ### noteFromSelector\r\n // return a selection based on the passed-in selector\r\n static noteFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection| null {\r\n return SmoSelection.noteSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n // ### selectionsToEnd\r\n // Select all the measures from startMeasure to the end of the score in the given staff.\r\n static selectionsToEnd(score: SmoScore, staff: number, startMeasure: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = startMeasure; i < score.staves[staff].measures.length; ++i) {\r\n const selection = SmoSelection.measureSelection(score, staff, i);\r\n if (selection) {\r\n rv.push(selection);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### renderedNoteSelection\r\n // return the appropriate type of selection from the selector, based on the selector.\r\n static selectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n if (typeof (selector.pitches) !== 'undefined' && selector.pitches.length) {\r\n return SmoSelection.pitchSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick, selector.pitches);\r\n }\r\n if (typeof (selector.tick) === 'number') {\r\n return SmoSelection.noteFromSelector(score, selector);\r\n }\r\n return SmoSelection.measureSelection(score, selector.staff, selector.measure);\r\n }\r\n\r\n static pitchSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number, pitches: number[]) {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n pitches = typeof (pitches) !== 'undefined' ? pitches : [];\r\n const pa: number[] = [];\r\n pitches.forEach((ix) => {\r\n pa.push(JSON.parse(JSON.stringify(note.pitches[ix])));\r\n });\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: pa,\r\n type: 'pitches'\r\n });\r\n }\r\n /**\r\n * Return the selection that is tickCount ticks after the current selection.\r\n * @param score \r\n * @param selection \r\n * @param tickCount \r\n * @returns \r\n */\r\n static advanceTicks(score: SmoScore, selection: SmoSelection, tickCount: number): SmoSelection | null {\r\n let rv: SmoSelection | null = null;\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n const staff = selection.staff;\r\n rv = SmoSelection.noteFromSelector(score, selection.selector);\r\n while (rv !== null && rv.note !== null && tickCount > 0) {\r\n const prevSelector = JSON.parse(JSON.stringify(rv.selector));\r\n const measureTicks = rv.measure.getMaxTicksVoice();\r\n const tickIx = rv.selector.tick;\r\n const voiceId = rv.measure.voices.length > rv.selector.voice ? rv.selector.voice : 0;\r\n // If the destination is more than a measure away, increment measure\r\n if (tickIx === 0 && tickCount >= measureTicks) {\r\n tickCount -= measureTicks;\r\n if (staff.measures.length > rv.selector.measure + 1) {\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n } else if (selection.measure.voices[voiceId].notes.length > tickIx + 1) {\r\n // else count the tick and advance to next tick\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.tick += 1;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n } else if (staff.measures.length > rv.selector.measure + 1) {\r\n // else advance to next measure and start counting ticks there\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n if (rv !== null && SmoSelector.eq(prevSelector, rv.selector)) {\r\n // No progress, start and end the same\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Count the number of tick indices between selector 1 and selector 2;\r\n * @param score \r\n * @param sel1 \r\n * @param sel2 \r\n * @returns \r\n */\r\n static countTicks(score: SmoScore, sel1: SmoSelector, sel2: SmoSelector): number {\r\n if (SmoSelector.eq(sel1, sel2)) {\r\n return 0;\r\n }\r\n const backwards = SmoSelector.gt(sel1, sel2);\r\n let ticks = 0;\r\n const startSelection = SmoSelection.selectionFromSelector(score, sel1);\r\n let endSelection = SmoSelection.selectionFromSelector(score, sel2);\r\n while (endSelection !== null && startSelection !== null) {\r\n if (SmoSelector.eq(startSelection.selector, endSelection.selector)) {\r\n break;\r\n }\r\n if (backwards) {\r\n endSelection = SmoSelection.nextNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks -= 1;\r\n } else {\r\n endSelection = SmoSelection.lastNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks += 1;\r\n }\r\n }\r\n return ticks;\r\n }\r\n\r\n // ## nextNoteSelection\r\n // ## Description:\r\n // Return the next note in this measure, or the first note of the next measure, if it exists.\r\n static nextNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const nextTick = tickIndex + 1;\r\n const nextMeasure = measureIndex + 1;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n if (measure.voices[voiceIndex].notes.length > nextTick) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, nextTick);\r\n }\r\n if (staff.measures.length > nextMeasure) {\r\n return SmoSelection.noteSelection(score, staffIndex, nextMeasure, voiceIndex, 0);\r\n }\r\n return null;\r\n }\r\n /**\r\n * \r\n * @param score \r\n * @param selector \r\n * @returns \r\n */\r\n static innerSelections(score: SmoScore, startSelector: SmoSelector, endSelector: SmoSelector) {\r\n const sels = SmoSelector.order(startSelector, endSelector);\r\n let start = JSON.parse(JSON.stringify(sels[0]));\r\n const rv: SmoSelection[] = [];\r\n let cur = SmoSelection.selectionFromSelector(score, start);\r\n if (cur) {\r\n rv.push(cur);\r\n }\r\n while (cur && SmoSelector.lt(start, sels[1])) {\r\n cur = SmoSelection.nextNoteSelection(score, start.staff, start.measure, start.voice, start.tick);\r\n if (cur) {\r\n start = JSON.parse(JSON.stringify(cur.selector));\r\n rv.push(cur);\r\n }\r\n }\r\n return rv;\r\n }\r\n static nextNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.nextNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n static lastNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.lastNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n static lastNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const lastTick = tickIndex - 1;\r\n const lastMeasure = measureIndex - 1;\r\n const staff = score.staves[staffIndex];\r\n let measure = staff.measures[measureIndex];\r\n if (tickIndex > 0) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, lastTick);\r\n }\r\n if (lastMeasure >= 0) {\r\n measure = staff.measures[lastMeasure];\r\n if (voiceIndex >= measure.voices.length) {\r\n return null;\r\n }\r\n const noteIndex = measure.voices[voiceIndex].notes.length - 1;\r\n return SmoSelection.noteSelection(score, staffIndex, lastMeasure, voiceIndex, noteIndex);\r\n }\r\n if (measureIndex === 0 && voiceIndex === 0 && tickIndex === 0) {\r\n return null;\r\n }\r\n return SmoSelection.noteSelection(score, staffIndex, 0, 0, 0);\r\n }\r\n // ### getMeasureList\r\n // Gets the list of measures in an array from the selections\r\n static getMeasureList(selections: SmoSelection[]): SmoSelection[] {\r\n let i = 0;\r\n let cur = {};\r\n const rv: SmoSelection[] = [];\r\n if (!selections.length) {\r\n return rv;\r\n }\r\n cur = selections[0].selector.measure;\r\n for (i = 0; i < selections.length; ++i) {\r\n const sel: SmoSelection = selections[i];\r\n if (i === 0 || (sel.selector.measure !== cur)) {\r\n const _staff: SmoSystemStaff = sel._staff;\r\n const _measure: SmoMeasure = sel._measure;\r\n rv.push(\r\n new SmoSelection({\r\n selector: {\r\n staff: sel.selector.staff,\r\n measure: sel.selector.measure,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n },\r\n _staff,\r\n _measure\r\n }));\r\n }\r\n cur = sel.selector.measure;\r\n }\r\n return rv;\r\n }\r\n static getMeasuresBetween(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n if (fromSelector.staff !== toSelector.staff) {\r\n return rv;\r\n }\r\n for (i = fromSelector.measure; i <= toSelector.measure; ++i) {\r\n const sel = SmoSelection.measureSelection(score, fromSelector.staff, i);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n // ### selectionsSameMeasure\r\n // Return true if the selections are all in the same measure. Used to determine what\r\n // type of undo we need.\r\n static selectionsSameMeasure(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameMeasure(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static selectionsSameStaff(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameStaff(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n constructor(params: SmoSelectionParams) {\r\n this.selector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n this._staff = params._staff;\r\n this._measure = params._measure;\r\n this._note = null;\r\n this._pitches = [];\r\n smoSerialize.vexMerge(this, params);\r\n }\r\n\r\n get staff() {\r\n return this._staff;\r\n }\r\n get measure() {\r\n return this._measure;\r\n }\r\n\r\n get note() {\r\n return this._note;\r\n }\r\n get pitches() {\r\n return this.selector.pitches;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote, TupletInfo } from '../data/note';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { Ticks } from '../data/common';\r\nimport { TickMap } from './tickMap';\r\n\r\n/**\r\n * Abstract class for classes that modifiy duration.\r\n * @param note the note we're iterating over\r\n * @param tickmap the tickmap for the measure\r\n * @param index the index into the tickmap\r\n * @returns the note or notes that replace this one. Null if this note is no longer in the measure\r\n */\r\nexport abstract class TickIteratorBase {\r\n // es\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n return null;\r\n }\r\n}\r\n/**\r\n * SmoDuration: change the duration of a note, maybe at the expense of some\r\n * other note.\r\n * @category SmoTransform\r\n */\r\nexport class SmoDuration {\r\n /**\r\n * doubleDurationNonTuplet\r\n * double the duration of the selection, consuming the next note or\r\n * possibly split it in half and consume that. Simple operation so\r\n * do it inline\r\n * @param selection\r\n * @returns\r\n */\r\n static doubleDurationNonTuplet(selection: SmoSelection) {\r\n const note: SmoNote | null = selection?.note;\r\n const measure: SmoMeasure = selection.measure;\r\n if (note === null) {\r\n return;\r\n }\r\n const selector: SmoSelector = selection.selector;\r\n const voices: SmoVoice[] | undefined = measure?.voices;\r\n const voice: SmoVoice = voices[selector.voice];\r\n const notes: SmoNote[] = voice?.notes;\r\n let i = 0;\r\n const nticks: Ticks = { numerator: note.tickCount * 2, denominator: 1, remainder: 0 };\r\n const replNote = SmoNote.cloneWithDuration(note, nticks);\r\n let ticksUsed = note.tickCount;\r\n const newNotes = [];\r\n for (i = 0; i < selector.tick; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n for (i = selector.tick + 1; i < notes.length; ++i) {\r\n const nnote = notes[i];\r\n ticksUsed += nnote.tickCount;\r\n if (ticksUsed >= nticks.numerator) {\r\n break;\r\n }\r\n }\r\n const remainder = ticksUsed - nticks.numerator;\r\n if (remainder < 0) {\r\n return;\r\n }\r\n newNotes.push(replNote);\r\n if (remainder > 0) {\r\n const lmap = SmoMusic.gcdMap(remainder);\r\n lmap.forEach((duration) => {\r\n newNotes.push(SmoNote.cloneWithDuration(note, duration));\r\n });\r\n }\r\n\r\n for (i = i + 1; i < notes.length; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n // If any tuplets got removed while extending the notes,\r\n voice.notes = newNotes;\r\n const measureTuplets: SmoTuplet[] = [];\r\n const allTuplets: SmoTuplet[] | undefined = measure?.tuplets;\r\n allTuplets?.forEach((tuplet: SmoTuplet) => {\r\n const testNotes = measure?.tupletNotes(tuplet);\r\n if (testNotes?.length === tuplet.notes.length) {\r\n measureTuplets.push(tuplet);\r\n }\r\n });\r\n measure.tuplets = measureTuplets;\r\n }\r\n\r\n /**\r\n * double duration, tuplet form. Increase the first selection and consume the\r\n * following note. Also a simple operation\r\n * @param selection\r\n * @returns\r\n */\r\n static doubleDurationTuplet(selection: SmoSelection) {\r\n let i: number = 0;\r\n const measure: SmoMeasure = selection.measure;\r\n const note: SmoNote | null = selection?.note;\r\n if (note === null) {\r\n return;\r\n }\r\n const notes = measure.voices[selection.selector.voice].notes;\r\n const tuplet: SmoTuplet | null = measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return;\r\n }\r\n const startIndex = selection.selector.tick - tuplet.startIndex;\r\n\r\n const startLength: number = tuplet.notes.length;\r\n tuplet.combine(startIndex, startIndex + 1);\r\n if (tuplet.notes.length >= startLength) {\r\n return;\r\n }\r\n const newNotes = [];\r\n\r\n for (i = 0; i < tuplet.startIndex; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n tuplet.notes.forEach((note) => {\r\n newNotes.push(note);\r\n });\r\n for (i = i + tuplet.notes.length + 1; i < notes.length; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n measure.voices[selection.selector.voice].notes = newNotes;\r\n }\r\n}\r\n/**\r\n * SmoTickIterator\r\n * this is a local helper class that follows a pattern of iterating of the notes. Most of the\r\n * duration changers iterate over a selection, and return:\r\n * - A note, if the duration changes\r\n * - An array of notes, if the notes split\r\n * - null if the note stays the same\r\n * - empty array, remove the note from the group\r\n * @category SmoTransform\r\n */\r\nexport class SmoTickIterator {\r\n notes: SmoNote[] = [];\r\n newNotes: SmoNote[] = [];\r\n actor: TickIteratorBase;\r\n measure: SmoMeasure;\r\n voice: number = 0;\r\n keySignature: string;\r\n constructor(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n this.notes = measure.voices[voiceIndex].notes;\r\n this.measure = measure;\r\n this.voice = typeof (voiceIndex) === 'number' ? voiceIndex : 0;\r\n this.newNotes = [];\r\n // eslint-disable-next-line\r\n this.actor = actor;\r\n this.keySignature = 'C';\r\n }\r\n static nullActor(note: SmoNote) {\r\n return note;\r\n }\r\n /**\r\n *\r\n * @param measure {SmoMeasure}\r\n * @param actor {}\r\n * @param voiceIndex\r\n */\r\n static iterateOverTicks(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n measure.clearBeamGroups();\r\n const transformer = new SmoTickIterator(measure, actor, voiceIndex);\r\n transformer.run();\r\n measure.voices[voiceIndex].notes = transformer.notes;\r\n }\r\n // ### transformNote\r\n // call the actors for each note, and put the result in the note array.\r\n // The note from the original array is copied and sent to each actor.\r\n //\r\n // Because the resulting array can have a different number of notes than the existing\r\n // array, the actors communicate with the transformer in the following, jquery-ish\r\n // but somewhat unintuitive way:\r\n //\r\n // 1. if the actor returns null, the next actor is called and the results of that actor are used\r\n // 2. if all the actors return null, the copy is used.\r\n // 3. if a note object is returned, that is used for the current tick and no more actors are called.\r\n // 4. if an array of notes is returned, it is concatenated to the existing note array and no more actors are called.\r\n // Note that *return note;* and *return [note];* produce the same result.\r\n // 5. if an empty array [] is returned, that copy is not added to the result. The note is effectively deleted.\r\n iterateOverTick(tickmap: TickMap, index: number, note: SmoNote) {\r\n const actor: TickIteratorBase = this.actor;\r\n const newNote: SmoNote[] | SmoNote | null = actor.iterateOverTick(note, tickmap, index);\r\n if (newNote === null) {\r\n this.newNotes.push(note); // no change\r\n return note;\r\n }\r\n if (Array.isArray(newNote)) {\r\n if (newNote.length === 0) {\r\n return null;\r\n }\r\n this.newNotes = this.newNotes.concat(newNote);\r\n return null;\r\n }\r\n this.newNotes.push(newNote as SmoNote);\r\n return null;\r\n }\r\n\r\n run() {\r\n let i = 0;\r\n const tickmap = this.measure.tickmapForVoice(this.voice);\r\n for (i = 0; i < tickmap.durationMap.length; ++i) {\r\n this.iterateOverTick(tickmap, i, this.measure.voices[this.voice].notes[i]);\r\n }\r\n this.notes = this.newNotes;\r\n return this.newNotes;\r\n }\r\n}\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractNoteActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newTicks: number\r\n}\r\n/**\r\n * Contract the duration of a note, filling in the space with another note\r\n * or rest.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoContractNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n tickmap: TickMap;\r\n newTicks: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoContractNoteParams) {\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tickmap = this.measure.tickmapForVoice(this.voice);\r\n this.newTicks = params.newTicks;\r\n }\r\n static apply(params: SmoContractNoteParams) {\r\n const actor = new SmoContractNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure,\r\n actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n let i = 0;\r\n if (index === this.startIndex) {\r\n const notes: SmoNote[] = [];\r\n const noteCount = Math.floor(note.ticks.numerator / this.newTicks);\r\n let remainder = note.ticks.numerator;\r\n /**\r\n * Replace 1 note with noteCOunt notes of newTIcks duration\r\n * old map:\r\n * d . d . .\r\n * new map:\r\n * d d d . .\r\n */\r\n for (i = 0; i < noteCount; ++i) {\r\n // first note, retain modifiers so clone. Otherwise just\r\n // retain pitches\r\n if (i === 0) {\r\n const nn = SmoNote.clone(note);\r\n nn.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 };\r\n notes.push(nn);\r\n } else {\r\n const nnote = new SmoNote(SmoNote.defaults);\r\n nnote.clef = note.clef;\r\n nnote.pitches = JSON.parse(JSON.stringify(note.pitches));\r\n nnote.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 };\r\n nnote.beamBeats = note.beamBeats;\r\n notes.push(nnote);\r\n }\r\n remainder = remainder - this.newTicks;\r\n }\r\n\r\n // make sure remnainder is not too short\r\n if (remainder > 0) {\r\n if (remainder < 128) {\r\n return null;\r\n }\r\n const nnote = new SmoNote(SmoNote.defaults);\r\n nnote.clef = note.clef;\r\n nnote.pitches = JSON.parse(JSON.stringify(note.pitches));\r\n nnote.ticks = { numerator: remainder, denominator: 1, remainder: 0 };\r\n nnote.beamBeats = note.beamBeats;\r\n notes.push(nnote);\r\n }\r\n return notes;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractTupletParams {\r\n changeIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Shrink the duration of a note in a tuplet by creating additional notes\r\n * @category SmoTransform\r\n */\r\nexport class SmoContractTupletActor extends TickIteratorBase {\r\n changeIndex: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n tuplet: SmoTuplet | null;\r\n oldLength: number = 0;\r\n tupletIndex: number = 0;\r\n splitIndex: number = 0;\r\n constructor(params: SmoContractTupletParams) {\r\n super();\r\n this.changeIndex = params.changeIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tuplet = this.measure.getTupletForNote(this.measure.voices[this.voice].notes[this.changeIndex]);\r\n if (this.tuplet === null) {\r\n return;\r\n }\r\n this.oldLength = this.tuplet.notes.length;\r\n this.tupletIndex = this.measure.tupletIndex(this.tuplet);\r\n this.splitIndex = this.changeIndex - this.tupletIndex;\r\n this.tuplet.split(this.splitIndex);\r\n }\r\n static apply(params: SmoContractTupletParams) {\r\n const actor = new SmoContractTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.tuplet === null) {\r\n return null;\r\n }\r\n if (index < this.tupletIndex) {\r\n return note;\r\n }\r\n if (index >= this.tupletIndex + this.oldLength) {\r\n return note;\r\n }\r\n if (index === this.changeIndex) {\r\n return this.tuplet.notes;\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Constructor params for {@link SmoUnmakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoUnmakeTupletParams {\r\n startIndex: number,\r\n endIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Convert a tuplet into a single note that takes up the whole duration\r\n * @category SmoTransform\r\n */\r\nexport class SmoUnmakeTupletActor extends TickIteratorBase {\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(parameters: SmoUnmakeTupletParams) {\r\n super();\r\n this.startIndex = parameters.startIndex;\r\n this.endIndex = parameters.endIndex;\r\n this.measure = parameters.measure;\r\n this.voice = parameters.voice;\r\n }\r\n static apply(params: SmoUnmakeTupletParams) {\r\n const actor = new SmoUnmakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (index < this.startIndex || index > this.endIndex) {\r\n return null;\r\n }\r\n if (index === this.startIndex) {\r\n const tuplet = this.measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return [];\r\n }\r\n const ticks = tuplet.totalTicks;\r\n const nn: SmoNote = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n nn.tuplet = {} as TupletInfo;\r\n this.measure.removeTupletForNote(note);\r\n return [nn];\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * constructor parameters for {@link SmoMakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoMakeTupletParams {\r\n index: number,\r\n totalTicks: number,\r\n numNotes: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Turn a tuplet into a non-tuplet of the same length\r\n * @category SmoTransform\r\n * \r\n * */\r\nexport class SmoMakeTupletActor extends TickIteratorBase {\r\n measure: SmoMeasure;\r\n durationMap: number[];\r\n numNotes: number;\r\n stemTicks: number;\r\n totalTicks: number;\r\n rangeToSkip: number[];\r\n tuplet: SmoNote[];\r\n voice: number;\r\n index: number;\r\n constructor(params: SmoMakeTupletParams) {\r\n let i = 0;\r\n super();\r\n this.measure = params.measure;\r\n this.numNotes = params.numNotes;\r\n this.durationMap = [];\r\n this.totalTicks = params.totalTicks;\r\n this.voice = params.voice;\r\n this.index = params.index;\r\n for (i = 0; i < this.numNotes; ++i) {\r\n this.durationMap.push(1.0);\r\n }\r\n this.stemTicks = SmoTuplet.calculateStemTicks(this.totalTicks, this.numNotes);\r\n this.rangeToSkip = this._rangeToSkip();\r\n this.tuplet = [];\r\n }\r\n static apply(params: SmoMakeTupletParams) {\r\n const actor = new SmoMakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n _rangeToSkip(): number[] {\r\n let i = 0;\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n const ticks = this.measure.tickmapForVoice(this.voice);\r\n let accum = 0;\r\n const rv = [];\r\n rv.push(this.index);\r\n for (i = 0; i < ticks.deltaMap.length; ++i) {\r\n if (i >= this.index) {\r\n accum += ticks.deltaMap[i];\r\n }\r\n if (accum >= this.totalTicks) {\r\n rv.push(i);\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n let i = 0;\r\n // if our tuplet replaces this note, make sure we make it go away.\r\n if (index > this.index && index <= this.rangeToSkip[1]) {\r\n return [];\r\n }\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n if (index !== this.index) {\r\n return null;\r\n }\r\n for (i = 0; i < this.numNotes; ++i) {\r\n note = SmoNote.cloneWithDuration(note, { numerator: this.stemTicks, denominator: 1, remainder: 0 });\r\n // Don't clone modifiers, except for first one.\r\n note.textModifiers = i === 0 ? note.textModifiers : [];\r\n this.tuplet.push(note);\r\n }\r\n const tuplet = new SmoTuplet({\r\n notes: this.tuplet,\r\n stemTicks: this.stemTicks,\r\n totalTicks: this.totalTicks,\r\n ratioed: false,\r\n bracketed: true,\r\n startIndex: index,\r\n durationMap: this.durationMap,\r\n voice: tickmap.voice,\r\n numNotes: this.numNotes\r\n });\r\n this.measure.tuplets.push(tuplet);\r\n return this.tuplet;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor when we want to double or dot the duration of a note (stretch)\r\n * for {@link SmoStretchNoteActor}\r\n * @param startIndex tick index into the measure\r\n * @param measure the container measure\r\n * @param voice the voice index\r\n * @param newTicks the ticks the new note will take up\r\n * @category SmoTransform\r\n */\r\nexport interface SmoStretchNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newTicks: number\r\n}\r\n/**\r\n * increase the length of a note, removing future notes in the measure as required\r\n * @category SmoTransform\r\n */\r\nexport class SmoStretchNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n tickmap: TickMap;\r\n newTicks: number;\r\n startTick: number;\r\n divisor: number;\r\n durationMap: number[];\r\n skipFromStart: number;\r\n skipFromEnd: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoStretchNoteParams) {\r\n let mapIx = 0;\r\n let i = 0;\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tickmap = this.measure.tickmapForVoice(this.voice);\r\n this.newTicks = params.newTicks;\r\n this.startTick = this.tickmap.durationMap[this.startIndex];\r\n const currentTicks = this.tickmap.deltaMap[this.startIndex];\r\n const endTick = this.tickmap.durationMap[this.startIndex] + this.newTicks;\r\n this.divisor = -1;\r\n this.durationMap = [];\r\n this.skipFromStart = this.startIndex + 1;\r\n this.skipFromEnd = this.startIndex + 1;\r\n this.durationMap.push(this.newTicks);\r\n\r\n mapIx = this.tickmap.durationMap.indexOf(endTick);\r\n\r\n const remaining = this.tickmap.deltaMap.slice(this.startIndex, this.tickmap.durationMap.length).reduce((accum, x) => x + accum);\r\n if (remaining === this.newTicks) {\r\n mapIx = this.tickmap.deltaMap.length;\r\n }\r\n\r\n // If there is no tickable at the end point, try to split the next note\r\n /**\r\n * old map:\r\n * d . d .\r\n * split map:\r\n * d . d d\r\n * new map:\r\n * d . . d\r\n */\r\n if (mapIx < 0) {\r\n const ndelta = this.tickmap.deltaMap[this.startIndex + 1];\r\n const needed = this.newTicks - currentTicks;\r\n const exp = ndelta / needed;\r\n // Next tick does not divide evenly into this, or next tick is shorter than this\r\n if (Math.round(ndelta / exp) - ndelta / exp !== 0 || ndelta < 256) {\r\n this.durationMap = [];\r\n } else if (ndelta / exp + this.startTick + this.newTicks <= this.tickmap.totalDuration) {\r\n this.durationMap.push(ndelta - (ndelta / exp));\r\n } else {\r\n // there is no way to do this...\r\n this.durationMap = [];\r\n }\r\n } else {\r\n // If this note now takes up the space of other notes, remove those notes\r\n for (i = this.startIndex + 1; i < mapIx; ++i) {\r\n this.durationMap.push(0);\r\n }\r\n }\r\n }\r\n static apply(params: SmoStretchNoteParams) {\r\n const actor = new SmoStretchNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.durationMap.length === 0) {\r\n return null;\r\n }\r\n if (index >= this.startIndex && index < this.startIndex + this.durationMap.length) {\r\n const mapIndex = index - this.startIndex;\r\n const ticks = this.durationMap[mapIndex];\r\n if (ticks === 0) {\r\n return [];\r\n }\r\n note = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n return [note];\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { TickMappable } from '../data/measure';\r\nimport { Pitch, IsPitchLetter, TickAccidental } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\n\r\n/**\r\n * create a map note durations at each index into the voice, including the accidentals at each duration.\r\n * return format:\r\n * ```\r\n tickmap = {\r\n totalDuration: 16384,\r\n durationMap:[2048,4096,..], // A running total per tick\r\n deltaMap:[2048,2048...], a map of deltas\r\n ```\r\n * @category SmoTransform\r\n */ \r\nexport class TickMap {\r\n keySignature: string;\r\n voice: number;\r\n notes: SmoNote[] = [];\r\n index: number = 0;\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n // duration is the accumulated duraition over all the notes\r\n totalDuration: number = 0;\r\n // delta is the tick contribution of this note\r\n delta: number = 0;\r\n // the absolute tick start location of notes[x]\r\n durationMap: number[] = [];\r\n // the relative duration if each tick slot\r\n deltaMap: number[] = [];\r\n // An array of active accidentals for each tick index\r\n accidentalMap: Record[] = [];\r\n // a map of active accidentals, indexed by duration index\r\n durationAccidentalMap: Record> = {};\r\n constructor(measure: TickMappable, voiceIndex: number) {\r\n this.keySignature = measure.keySignature;\r\n this.voice = voiceIndex;\r\n if (measure.voices.length <= this.voice) {\r\n console.warn('tickmap for invalid voice');\r\n return;\r\n }\r\n this.notes = measure.voices[this.voice].notes;\r\n this.endIndex = this.notes.length;\r\n this.createMap();\r\n }\r\n // ### _getAccidentalsForKey\r\n // Update `map` with the correct accidental based on the key signature.\r\n _getAccidentalsForKey(map: Record) {\r\n const keys = SmoMusic.getScaleTonesForKey(this.keySignature);\r\n const keyKeys = Object.keys(keys);\r\n keyKeys.forEach((keyKey) => {\r\n const vexKey = keys[keyKey];\r\n if (vexKey.length > 1 && (vexKey[1] === 'b' || vexKey[1] === '#')) {\r\n if (IsPitchLetter(vexKey[0])) {\r\n const pitch = {\r\n letter: vexKey[0],\r\n accidental: vexKey[1],\r\n octave: 4\r\n };\r\n map[vexKey[0]] = {\r\n duration: 0,\r\n pitch\r\n };\r\n }\r\n }\r\n });\r\n }\r\n\r\n // ### updateAccidentalMap\r\n // Keep a running tally of the accidentals for this voice\r\n // based on the key and previous accidentals.\r\n updateAccidentalMap(note: SmoNote) {\r\n let i = 0;\r\n let sigObj: Record = {};\r\n const newObj: Record = {};\r\n if (this.index === 0) {\r\n this._getAccidentalsForKey(newObj);\r\n sigObj = newObj;\r\n } else {\r\n sigObj = this.accidentalMap[this.index - 1];\r\n }\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n const pitch: Pitch = note.pitches[i];\r\n const pitchOctave = pitch.letter.toLowerCase() + '-' + pitch.octave;\r\n const sigLetter: string = pitchOctave + pitch.accidental;\r\n const sigKey = SmoMusic.getKeySignatureKey(pitch.letter, this.keySignature);\r\n if (sigObj && sigObj[pitchOctave]) {\r\n const curObj = sigObj[pitchOctave];\r\n const currentVal = curObj.pitch.letter.toLowerCase() + '-' + curObj.pitch.octave + curObj.pitch.accidental;\r\n if (sigLetter !== currentVal) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n } else {\r\n if (sigLetter !== sigKey) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n }\r\n }\r\n this.accidentalMap.push(newObj);\r\n // Mark the accidental with the start of this note.\r\n this.durationAccidentalMap[this.durationMap[this.index]] = newObj;\r\n }\r\n\r\n // ### getActiveAccidental\r\n // return the active accidental for the given note\r\n getActiveAccidental(pitch: Pitch, iteratorIndex: number, keySignature: string) {\r\n let defaultAccidental: string = SmoMusic.getKeySignatureKey(pitch.letter, keySignature);\r\n let i = 0;\r\n let j = 0;\r\n defaultAccidental = defaultAccidental.length > 1 ? defaultAccidental[1] : 'n';\r\n if (iteratorIndex === 0) {\r\n return defaultAccidental;\r\n }\r\n // Back up the accidental map until we have a match, or until we run out\r\n for (i = iteratorIndex; i > 0; --i) {\r\n const map: Record = this.accidentalMap[i - 1];\r\n const mapKeys = Object.keys(map);\r\n for (j = 0; j < mapKeys.length; ++j) {\r\n const mapKey: string = mapKeys[j];\r\n // The letter name + accidental in the map\r\n const mapPitch: Pitch = map[mapKey].pitch;\r\n const mapAcc = mapPitch.accidental ? mapPitch.accidental : 'n';\r\n\r\n // if the letters match and the accidental...\r\n if (mapPitch.letter.toLowerCase() === pitch.letter) {\r\n return mapAcc;\r\n }\r\n }\r\n }\r\n return defaultAccidental;\r\n }\r\n get duration() {\r\n return this.totalDuration;\r\n }\r\n createMap() {\r\n for (this.index = this.startIndex; this.index < this.endIndex; ++this.index) {\r\n const note = this.notes[this.index];\r\n // save the starting point, tickwise\r\n this.durationMap.push(this.totalDuration);\r\n // the number of ticks for this note\r\n this.delta = (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n this.deltaMap.push(this.delta);\r\n // update the tick count for the whole array/measure\r\n this.totalDuration += this.delta;\r\n this.updateAccidentalMap(note);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoStaffTextBracket, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoOperation } from './operations';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelector } from './selections';\r\n\r\nexport interface UndoEntry {\r\n title: string,\r\n type: number,\r\n selector: SmoSelector,\r\n subtype: number,\r\n grouped: boolean,\r\n firstInGroup: boolean,\r\n json?: any\r\n}\r\nexport function copyUndo(entry: UndoEntry): UndoEntry {\r\n const obj = { \r\n title: entry.title,\r\n type: entry.type,\r\n selector: entry.selector,\r\n subtype: entry.subtype,\r\n grouped: entry.grouped,\r\n firstInGroup: entry.firstInGroup,\r\n json: undefined\r\n };\r\n if (entry.json) {\r\n obj.json = JSON.parse(JSON.stringify(entry.json));\r\n }\r\n return obj;\r\n}\r\n/**\r\n * manage a set of undo or redo operations on a score. The objects passed into\r\n * undo must implement serialize()/deserialize()\r\n * \r\n * ## Buffer format:\r\n * A buffer is one of 7 things:\r\n * * A single measure,\r\n * * A single staff\r\n * * the whole score\r\n * * a score modifier (text)\r\n * * score attributes (layout, etc)\r\n * * column - all the measures at one index\r\n * * rectangle - a rectangle of measures\r\n * @category SmoTransform\r\n * */\r\nexport class UndoBuffer {\r\n static groupCount = 0;\r\n static get bufferMax() {\r\n return 100;\r\n }\r\n\r\n static get bufferTypes() {\r\n return {\r\n FIRST: 1,\r\n MEASURE: 1, STAFF: 2, SCORE: 3, SCORE_MODIFIER: 4, COLUMN: 5, RECTANGLE: 6,\r\n SCORE_ATTRIBUTES: 7, STAFF_MODIFIER: 8, LAST: 8\r\n };\r\n }\r\n static get bufferSubtypes() {\r\n return {\r\n NONE: 0, ADD: 1, REMOVE: 2, UPDATE: 3\r\n };\r\n }\r\n static get bufferTypeLabel() {\r\n return ['INVALID', 'MEASURE', 'STAFF', 'SCORE', 'SCORE_MODIFIER', 'COLUMN', 'RECTANGLE',\r\n 'SCORE_ATTRIBUTES', 'STAFF_MODIFIER'];\r\n }\r\n // ### serializeMeasure\r\n // serialize a measure, preserving the column-mapped bits which aren't serialized on a full score save.\r\n static serializeMeasure(measure: SmoMeasure) {\r\n const json: any = measure.serialize();\r\n const columnMapped : any = measure.serializeColumnMapped();\r\n Object.keys(columnMapped).forEach((key) => {\r\n json[key] = columnMapped[key];\r\n });\r\n return json;\r\n }\r\n buffer: UndoEntry[] = [];\r\n reconcile: number = -1;\r\n opCount: number;\r\n _grouping: boolean;\r\n constructor() {\r\n this.buffer = [];\r\n this.opCount = 0;\r\n this._grouping = false;\r\n }\r\n get grouping() {\r\n return this._grouping;\r\n }\r\n // Allows a set of operations to be bunched into a single group\r\n set grouping(val) {\r\n if (this._grouping === true && val === false) {\r\n const buf = this.peek();\r\n // If we have been grouping, indicate that the last buffer is the\r\n // fist part of a group\r\n if (buf) {\r\n buf.firstInGroup = true;\r\n }\r\n }\r\n this._grouping = val;\r\n }\r\n reset() {\r\n this.buffer = [];\r\n }\r\n // ### addBuffer\r\n // Description:\r\n // Add the current state of the score required to undo the next operation we\r\n // are about to perform. For instance, if we are adding a crescendo, we back up the\r\n // staff the crescendo will go on.\r\n addBuffer(title: string, type: number, selector: SmoSelector, obj: any, subtype: number) {\r\n let i = 0;\r\n let j = 0;\r\n if (typeof(type) !== 'number' || type < UndoBuffer.bufferTypes.FIRST || type > UndoBuffer.bufferTypes.LAST) {\r\n throw 'Undo failure: illegal buffer type ' + type;\r\n }\r\n const undoObj: UndoEntry = {\r\n title,\r\n type,\r\n selector,\r\n subtype,\r\n grouped: this._grouping,\r\n firstInGroup: false\r\n };\r\n if (type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n // RECTANGLE obj is {score, topLeft, bottomRight}\r\n // where the last 2 are selectors\r\n const measures = [];\r\n for (i = obj.topLeft.staff; i <= obj.bottomRight.staff; ++i) {\r\n for (j = obj.topLeft.measure; j <= obj.bottomRight.measure; ++j) {\r\n measures.push(UndoBuffer.serializeMeasure(obj.score.staves[i].measures[j]));\r\n }\r\n }\r\n undoObj.json = { topLeft: JSON.parse(JSON.stringify(obj.topLeft)),\r\n bottomRight: JSON.parse(JSON.stringify(obj.bottomRight)),\r\n measures };\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n undoObj.json = {};\r\n smoSerialize.serializedMerge(SmoScore.preferences, obj, undoObj.json);\r\n } else if (type === UndoBuffer.bufferTypes.COLUMN) {\r\n // COLUMN obj is { score, measureIndex }\r\n const ix = obj.measureIndex;\r\n const measures: SmoMeasure[] = [];\r\n obj.score.staves.forEach((staff: SmoSystemStaff) => {\r\n measures.push(UndoBuffer.serializeMeasure(staff.measures[ix]));\r\n });\r\n undoObj.json = { measureIndex: ix, measures };\r\n } else if (type === UndoBuffer.bufferTypes.MEASURE) {\r\n // If this is a measure, preserve the column-mapped attributes\r\n undoObj.json = UndoBuffer.serializeMeasure(obj);\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_MODIFIER ||\r\n type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n // score modifier, already serialized\r\n undoObj.json = obj;\r\n } else {\r\n // staff or score or staffModifier\r\n undoObj.json = obj.serialize();\r\n }\r\n if (this.buffer.length >= UndoBuffer.bufferMax) {\r\n this.buffer.splice(0, 1);\r\n }\r\n this.opCount += 1;\r\n this.buffer.push(undoObj);\r\n }\r\n\r\n // ### _pop\r\n // ### Description:\r\n // Internal method to pop the top buffer off the stack.\r\n _pop(): UndoEntry | null {\r\n if (this.buffer.length < 1) {\r\n return null;\r\n }\r\n const buf: UndoEntry = this.buffer.pop() as UndoEntry;\r\n return buf;\r\n }\r\n\r\n // ## Before undoing, peek at the top action in the q\r\n // so it can be re-rendered\r\n peek(): UndoEntry | null {\r\n if (this.buffer.length < 1) {\r\n return null;\r\n }\r\n return this.buffer[this.buffer.length - 1];\r\n }\r\n peekIndex(index: number) {\r\n if (this.buffer.length - index < 1) {\r\n return null;\r\n }\r\n return this.buffer[this.buffer.length - (1 + index)];\r\n }\r\n\r\n // ## undo\r\n // ## Description:\r\n // Undo the operation at the top of the undo stack. This is done by replacing\r\n // the music as it existed before the change was made.\r\n undo(score: SmoScore, staffMap: Record, pop: boolean): SmoScore {\r\n let i = 0;\r\n let j = 0;\r\n let mix = 0;\r\n let buf: UndoEntry | null = null;\r\n let peekIndex = 0;\r\n if (pop) {\r\n buf = this._pop();\r\n } else {\r\n buf = this.peekIndex(peekIndex);\r\n if (buf) {\r\n buf = copyUndo(buf);\r\n }\r\n }\r\n if (!buf) {\r\n return score;\r\n }\r\n const grouping = buf.firstInGroup;\r\n while (buf) {\r\n if (buf.type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n for (i = buf.json.topLeft.staff; i <= buf.json.bottomRight.staff; ++i) {\r\n for (j = buf.json.topLeft.measure; j <= buf.json.bottomRight.measure; ++j) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[mix]);\r\n mix += 1;\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[i]) === 'number') {\r\n selector.staff = staffMap[i];\r\n measure.measureNumber.staffId = staffMap[i];\r\n selector.measure = j;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n const modifier: StaffModifierBase = StaffModifierBase.deserialize(buf.json);\r\n if (typeof(staffMap[modifier.startSelector.staff]) === 'number') {\r\n const staff: SmoSystemStaff = score.staves[staffMap[modifier.startSelector.staff]];\r\n const existing: StaffModifierBase | undefined = staff.getModifier(modifier);\r\n if (existing) {\r\n staff.removeStaffModifier(existing);\r\n }\r\n // If we undo an add, we just remove it.\r\n if (buf.subtype !== UndoBuffer.bufferSubtypes.ADD) {\r\n if (modifier.ctor === 'SmoStaffTextBracket') {\r\n staff.addTextBracket(modifier as SmoStaffTextBracket);\r\n } else {\r\n staff.addStaffModifier(modifier);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n smoSerialize.serializedMerge(SmoScore.preferences, buf.json, score);\r\n } else if (buf.type === UndoBuffer.bufferTypes.COLUMN) {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[i]);\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[i]) === 'number') {\r\n selector.staff = staffMap[i];\r\n measure.measureNumber.staffId = staffMap[i];\r\n selector.measure = buf.json.measureIndex;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.MEASURE) {\r\n // measure expects key signature to be in concert key.\r\n if (typeof(staffMap[buf.selector.staff]) === 'number' ) {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const xpose = buf.json.transposeIndex ?? 0;\r\n const concertKey = SmoMusic.vexKeySigWithOffset(buf.json.keySignature, -1 * xpose);\r\n buf.json.keySignature = concertKey;\r\n const measure = SmoMeasure.deserialize(buf.json);\r\n measure.measureNumber.staffId = buf.selector.staff;\r\n score.replaceMeasure(buf.selector, measure);\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE) {\r\n // Score expects string, as deserialized score is how saving is done.\r\n score = SmoScore.deserialize(JSON.stringify(buf.json));\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER) {\r\n // Currently only one type like this: SmoTextGroup\r\n if (buf.json && buf.json.ctor === 'SmoTextGroup') {\r\n const obj = SmoTextGroup.deserializePreserveId(buf.json);\r\n obj.attrs.id = buf.json.attrs.id;\r\n // undo of add is remove, undo of remove is add. Undo of update is remove and add older version\r\n if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n score.removeTextGroup(obj);\r\n } if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n score.addTextGroup(obj);\r\n }\r\n }\r\n } else {\r\n if (typeof(staffMap[buf.selector.staff]) === 'number') {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const staff = SmoSystemStaff.deserialize(buf.json);\r\n score.replaceStaff(buf.selector.staff, staff);\r\n }\r\n }\r\n const peekBuf = this.peekIndex(peekIndex + 1);\r\n // If buf is grouped and not the first in the group, also undo the next buffer\r\n if (grouping && peekBuf !== null && peekBuf.grouped && buf.firstInGroup === false) {\r\n // For the backup/full score, we actually pop the buffer. For the visible score, we \r\n // just use copies of the buffer.\r\n if (pop) {\r\n buf = this._pop();\r\n } else {\r\n peekIndex += 1;\r\n buf = this.peekIndex(peekIndex);\r\n if (buf) {\r\n buf = copyUndo(buf);\r\n }\r\n }\r\n } else {\r\n buf = null;\r\n }\r\n }\r\n return score;\r\n }\r\n}\r\n\r\n// ## SmoUndoable\r\n// Convenience functions to save the score state before operations so we can undo the operation.\r\n// Each undo-able knows which set of parameters the undo operation requires (measure, staff, score).\r\nexport class SmoUndoable {\r\n // ### undoScoreObject\r\n // Called when a score object is being modified. There is no need to update the score as it contains a\r\n // reference to the object\r\n static changeTextGroup(score: SmoScore, undoBuffer: UndoBuffer, object: any, subtype: number) {\r\n undoBuffer.addBuffer('modify text',\r\n UndoBuffer.bufferTypes.SCORE_MODIFIER, SmoSelector.default, object, subtype);\r\n if (subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n SmoOperation.removeTextGroup(score, object);\r\n } else if (subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n SmoOperation.addTextGroup(score, object);\r\n }\r\n // Update operation, there is nothing to do since the text is already\r\n // part of the score\r\n }\r\n}\r\n","export const Commissioner_MediumFont = {\r\n smufl: false,\r\n name: \"CommissionerMedium\",\r\n spacing: 50,\r\n fontFamily: \"Commisioner\",\r\n description: \"Commisioner, a sans-serif font similar to Arial\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1212,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1314\r\n },\r\n \"1\": {\r\n \"xMin\": 56,\r\n \"xMax\": 676,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 874\r\n },\r\n \"2\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1020,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1120\r\n },\r\n \"3\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1056,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1150\r\n },\r\n \"4\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1209\r\n },\r\n \"5\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1061,\r\n \"yMin\": -23,\r\n \"yMax\": 1373,\r\n \"ha\": 1396,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1155\r\n },\r\n \"6\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1127,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1221\r\n },\r\n \"7\": {\r\n \"xMin\": 50,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1072\r\n },\r\n \"8\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1128,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1222\r\n },\r\n \"9\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1119,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1221\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 382\r\n },\r\n \"!\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1472,\r\n \"ha\": 1496,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 78,\r\n \"xMax\": 674,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 790\r\n },\r\n \"#\": {\r\n \"xMin\": 32,\r\n \"xMax\": 1344,\r\n \"yMin\": 0,\r\n \"yMax\": 1322,\r\n \"ha\": 1322,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 1376\r\n },\r\n \"$\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1060,\r\n \"yMin\": -274,\r\n \"yMax\": 1606,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1133\r\n },\r\n \"%\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1732,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1804\r\n },\r\n \"&\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1465,\r\n \"yMin\": -21,\r\n \"yMax\": 1453,\r\n \"ha\": 1474,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1490\r\n },\r\n \"'\": {\r\n \"xMin\": 78,\r\n \"xMax\": 305,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 421\r\n },\r\n \"(\": {\r\n \"xMin\": 108,\r\n \"xMax\": 718,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 790\r\n },\r\n \")\": {\r\n \"xMin\": 72,\r\n \"xMax\": 682,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 790\r\n },\r\n \"*\": {\r\n \"xMin\": 52,\r\n \"xMax\": 908,\r\n \"yMin\": 578,\r\n \"yMax\": 1492,\r\n \"ha\": 914,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 960\r\n },\r\n \"+\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1068,\r\n \"yMin\": 113,\r\n \"yMax\": 1089,\r\n \"ha\": 976,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1184\r\n },\r\n \",\": {\r\n \"xMin\": 49,\r\n \"xMax\": 379,\r\n \"yMin\": -314,\r\n \"yMax\": 279,\r\n \"ha\": 593,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 474\r\n },\r\n \"-\": {\r\n \"xMin\": 116,\r\n \"xMax\": 732,\r\n \"yMin\": 503,\r\n \"yMax\": 691,\r\n \"ha\": 188,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 848\r\n },\r\n \".\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 272,\r\n \"ha\": 296,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"/\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \":\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \";\": {\r\n \"xMin\": 67,\r\n \"xMax\": 398,\r\n \"yMin\": -314,\r\n \"yMax\": 1019,\r\n \"ha\": 1333,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 493\r\n },\r\n \"<\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"=\": {\r\n \"xMin\": 124,\r\n \"xMax\": 1020,\r\n \"yMin\": 277,\r\n \"yMax\": 925,\r\n \"ha\": 648,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 1144\r\n },\r\n \">\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"?\": {\r\n \"xMin\": 76,\r\n \"xMax\": 782,\r\n \"yMin\": -24,\r\n \"yMax\": 1498,\r\n \"ha\": 1522,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 872\r\n },\r\n \"@\": {\r\n \"xMin\": 91.72000000000001,\r\n \"xMax\": 1680.1678341637535,\r\n \"yMin\": -272,\r\n \"yMax\": 1366,\r\n \"ha\": 1638,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1772\r\n },\r\n \"A\": {\r\n \"xMin\": 53,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1401\r\n },\r\n \"B\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1303\r\n },\r\n \"C\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1272,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1369\r\n },\r\n \"D\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1380,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1471\r\n },\r\n \"E\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1081,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1189\r\n },\r\n \"F\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1061,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"G\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1333,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1463\r\n },\r\n \"H\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1331,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1500\r\n },\r\n \"I\": {\r\n \"xMin\": 173,\r\n \"xMax\": 412,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 173,\r\n \"advanceWidth\": 585\r\n },\r\n \"J\": {\r\n \"xMin\": 21,\r\n \"xMax\": 430,\r\n \"yMin\": -314,\r\n \"yMax\": 1426,\r\n \"ha\": 1740,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 603\r\n },\r\n \"K\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1310,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1362\r\n },\r\n \"L\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1086,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"M\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1798,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1920\r\n },\r\n \"N\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1336,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1505\r\n },\r\n \"O\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"P\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1194,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1271\r\n },\r\n \"Q\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -341,\r\n \"yMax\": 1453,\r\n \"ha\": 1794,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"R\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1304,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1356\r\n },\r\n \"S\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1110,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1183\r\n },\r\n \"T\": {\r\n \"xMin\": 58,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1285\r\n },\r\n \"U\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1306,\r\n \"yMin\": -24,\r\n \"yMax\": 1426,\r\n \"ha\": 1450,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1459\r\n },\r\n \"V\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1338,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1390\r\n },\r\n \"W\": {\r\n \"xMin\": 50,\r\n \"xMax\": 2010,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 2060\r\n },\r\n \"X\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1316,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1380\r\n },\r\n \"Y\": {\r\n \"xMin\": 50,\r\n \"xMax\": 1278,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1325\r\n },\r\n \"Z\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1258,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1354\r\n },\r\n \"[\": {\r\n \"xMin\": 177,\r\n \"xMax\": 733,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 770\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \"]\": {\r\n \"xMin\": 37,\r\n \"xMax\": 593,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 770\r\n },\r\n \"^\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1122,\r\n \"yMin\": 744,\r\n \"yMax\": 1373,\r\n \"ha\": 629,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1234\r\n },\r\n \"_\": {\r\n \"xMin\": -20,\r\n \"xMax\": 844,\r\n \"yMin\": -272,\r\n \"yMax\": -96,\r\n \"ha\": 176,\r\n \"leftSideBearing\": -20,\r\n \"advanceWidth\": 824\r\n },\r\n \"`\": {\r\n \"xMin\": 272,\r\n \"xMax\": 765,\r\n \"yMin\": 1146,\r\n \"yMax\": 1556,\r\n \"ha\": 410,\r\n \"leftSideBearing\": 272,\r\n \"advanceWidth\": 1200\r\n },\r\n \"a\": {\r\n \"xMin\": 94,\r\n \"xMax\": 922,\r\n \"yMin\": -21,\r\n \"yMax\": 1018,\r\n \"ha\": 1039,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1053\r\n },\r\n \"b\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"c\": {\r\n \"xMin\": 89,\r\n \"xMax\": 900,\r\n \"yMin\": -20,\r\n \"yMax\": 1018,\r\n \"ha\": 1038,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 982\r\n },\r\n \"d\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1161\r\n },\r\n \"e\": {\r\n \"xMin\": 89,\r\n \"xMax\": 972,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1054\r\n },\r\n \"f\": {\r\n \"xMin\": 44,\r\n \"xMax\": 794,\r\n \"yMin\": 0,\r\n \"yMax\": 1492,\r\n \"ha\": 1492,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 801\r\n },\r\n \"g\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1050,\r\n \"yMin\": -407,\r\n \"yMax\": 1018,\r\n \"ha\": 1425,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1089\r\n },\r\n \"h\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"i\": {\r\n \"xMin\": 119,\r\n \"xMax\": 408,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 530\r\n },\r\n \"j\": {\r\n \"xMin\": 0,\r\n \"xMax\": 409,\r\n \"yMin\": -391,\r\n \"yMax\": 1472,\r\n \"ha\": 1863,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 526\r\n },\r\n \"k\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1075,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1108\r\n },\r\n \"l\": {\r\n \"xMin\": 154,\r\n \"xMax\": 368,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 522\r\n },\r\n \"m\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1613,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1745\r\n },\r\n \"n\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"o\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1106,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1195\r\n },\r\n \"p\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"q\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1172\r\n },\r\n \"r\": {\r\n \"xMin\": 154,\r\n \"xMax\": 766,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 808\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 839,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 918\r\n },\r\n \"t\": {\r\n \"xMin\": 44,\r\n \"xMax\": 774,\r\n \"yMin\": -24,\r\n \"yMax\": 1359,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 829\r\n },\r\n \"u\": {\r\n \"xMin\": 132,\r\n \"xMax\": 990,\r\n \"yMin\": -24,\r\n \"yMax\": 1002,\r\n \"ha\": 1026,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1126\r\n },\r\n \"v\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1006,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1048\r\n },\r\n \"w\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1581,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1623\r\n },\r\n \"x\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1043,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1090\r\n },\r\n \"y\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1016,\r\n \"yMin\": -391,\r\n \"yMax\": 1002,\r\n \"ha\": 1393,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1058\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 940,\r\n \"yMin\": 0,\r\n \"yMax\": 994,\r\n \"ha\": 994,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1007\r\n },\r\n \"{\": {\r\n \"xMin\": 28,\r\n \"xMax\": 802,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 838\r\n },\r\n \"|\": {\r\n \"xMin\": 177,\r\n \"xMax\": 365,\r\n \"yMin\": -316,\r\n \"yMax\": 1564,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 542\r\n },\r\n \"}\": {\r\n \"xMin\": 36,\r\n \"xMax\": 810,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 838\r\n },\r\n \"~\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 431,\r\n \"yMax\": 774,\r\n \"ha\": 343,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n }\r\n },\r\n \"resolution\": 2000,\r\n \"generatedOn\": \"2020-10-16T17:54:48.712Z\"\r\n};","export const Concert_OneFont = {\r\n smufl: false,\r\n name: \"ConcertOne\",\r\n spacing: 50,\r\n fontFamily: \"ConcertOne\",\r\n description: \"Concert One, a sans-serif rounded title font\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1016,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1118\r\n },\r\n \"1\": {\r\n \"xMin\": 58,\r\n \"xMax\": 664,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 786\r\n },\r\n \"2\": {\r\n \"xMin\": 100,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 1060\r\n },\r\n \"3\": {\r\n \"xMin\": 54,\r\n \"xMax\": 946,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 1026\r\n },\r\n \"4\": {\r\n \"xMin\": 74,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1002\r\n },\r\n \"5\": {\r\n \"xMin\": 76,\r\n \"xMax\": 968,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 1026\r\n },\r\n \"6\": {\r\n \"xMin\": 122,\r\n \"xMax\": 948,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 992\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1012\r\n },\r\n \"8\": {\r\n \"xMin\": 90,\r\n \"xMax\": 930,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1020\r\n },\r\n \"9\": {\r\n \"xMin\": 46,\r\n \"xMax\": 870,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 992\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 798\r\n },\r\n \"!\": {\r\n \"xMin\": 226,\r\n \"xMax\": 556,\r\n \"yMin\": -2,\r\n \"yMax\": 1398,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 226,\r\n \"advanceWidth\": 808\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 110,\r\n \"xMax\": 766,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 898\r\n },\r\n \"#\": {\r\n \"xMin\": 118,\r\n \"xMax\": 1170,\r\n \"yMin\": 160,\r\n \"yMax\": 1222,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1268\r\n },\r\n \"$\": {\r\n \"xMin\": 142,\r\n \"xMax\": 904,\r\n \"yMin\": 6,\r\n \"yMax\": 1384,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1052\r\n },\r\n \"%\": {\r\n \"xMin\": 98,\r\n \"xMax\": 1384,\r\n \"yMin\": -6,\r\n \"yMax\": 1400,\r\n \"ha\": 1406,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 1484\r\n },\r\n \"&\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1178,\r\n \"yMin\": -2,\r\n \"yMax\": 1408,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1296\r\n },\r\n \"'\": {\r\n \"xMin\": 130,\r\n \"xMax\": 374,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 130,\r\n \"advanceWidth\": 522\r\n },\r\n \"(\": {\r\n \"xMin\": 240,\r\n \"xMax\": 814,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 888\r\n },\r\n \")\": {\r\n \"xMin\": 74,\r\n \"xMax\": 648,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 888\r\n },\r\n \"*\": {\r\n \"xMin\": 110,\r\n \"xMax\": 1084,\r\n \"yMin\": 164,\r\n \"yMax\": 1260,\r\n \"ha\": 1096,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 1194\r\n },\r\n \"+\": {\r\n \"xMin\": 190,\r\n \"xMax\": 920,\r\n \"yMin\": 356,\r\n \"yMax\": 1086,\r\n \"ha\": 730,\r\n \"leftSideBearing\": 190,\r\n \"advanceWidth\": 1102\r\n },\r\n \",\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": -164,\r\n \"yMax\": 330,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"-\": {\r\n \"xMin\": 108,\r\n \"xMax\": 838,\r\n \"yMin\": 480,\r\n \"yMax\": 724,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 966\r\n },\r\n \".\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 330,\r\n \"ha\": 330,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"/\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \":\": {\r\n \"xMin\": 122,\r\n \"xMax\": 454,\r\n \"yMin\": 0,\r\n \"yMax\": 854,\r\n \"ha\": 854,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 572\r\n },\r\n \";\": {\r\n \"xMin\": 120,\r\n \"xMax\": 452,\r\n \"yMin\": -166,\r\n \"yMax\": 852,\r\n \"ha\": 1018,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 596\r\n },\r\n \"<\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"=\": {\r\n \"xMin\": 180,\r\n \"xMax\": 914,\r\n \"yMin\": 290,\r\n \"yMax\": 926,\r\n \"ha\": 636,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 1102\r\n },\r\n \">\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"?\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1012,\r\n \"yMin\": 0,\r\n \"yMax\": 1420,\r\n \"ha\": 1420,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1122\r\n },\r\n \"@\": {\r\n \"xMin\": 132,\r\n \"xMax\": 1306,\r\n \"yMin\": -96,\r\n \"yMax\": 1078,\r\n \"ha\": 1174,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1494\r\n },\r\n \"A\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1030,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1104\r\n },\r\n \"B\": {\r\n \"xMin\": 120,\r\n \"xMax\": 1042,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1104\r\n },\r\n \"C\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1046,\r\n \"yMin\": -6,\r\n \"yMax\": 1408,\r\n \"ha\": 1414,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1110\r\n },\r\n \"D\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1008,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1094\r\n },\r\n \"E\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 986\r\n },\r\n \"F\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 938\r\n },\r\n \"G\": {\r\n \"xMin\": 106,\r\n \"xMax\": 1072,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 106,\r\n \"advanceWidth\": 1156\r\n },\r\n \"H\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1028,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1166\r\n },\r\n \"I\": {\r\n \"xMin\": 168,\r\n \"xMax\": 500,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 666\r\n },\r\n \"J\": {\r\n \"xMin\": 46,\r\n \"xMax\": 980,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 1126\r\n },\r\n \"K\": {\r\n \"xMin\": 140,\r\n \"xMax\": 1064,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 1142\r\n },\r\n \"L\": {\r\n \"xMin\": 178,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 178,\r\n \"advanceWidth\": 968\r\n },\r\n \"M\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1430,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1594\r\n },\r\n \"N\": {\r\n \"xMin\": 148,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 148,\r\n \"advanceWidth\": 1360\r\n },\r\n \"O\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1026,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1128\r\n },\r\n \"P\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1082\r\n },\r\n \"Q\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1114,\r\n \"yMin\": -110,\r\n \"yMax\": 1408,\r\n \"ha\": 1518,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1156\r\n },\r\n \"R\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1062,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1142\r\n },\r\n \"S\": {\r\n \"xMin\": 88,\r\n \"xMax\": 950,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1014\r\n },\r\n \"T\": {\r\n \"xMin\": 10,\r\n \"xMax\": 974,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 982\r\n },\r\n \"U\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1070,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1208\r\n },\r\n \"V\": {\r\n \"xMin\": 16,\r\n \"xMax\": 992,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 16,\r\n \"advanceWidth\": 1000\r\n },\r\n \"W\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1658,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1666\r\n },\r\n \"X\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1094,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1146\r\n },\r\n \"Y\": {\r\n \"xMin\": -14,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": -14,\r\n \"advanceWidth\": 1000\r\n },\r\n \"Z\": {\r\n \"xMin\": 70,\r\n \"xMax\": 982,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1042\r\n },\r\n \"[\": {\r\n \"xMin\": 240,\r\n \"xMax\": 736,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 836\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \"]\": {\r\n \"xMin\": 140,\r\n \"xMax\": 636,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 836\r\n },\r\n \"^\": {\r\n \"xMin\": 174,\r\n \"xMax\": 782,\r\n \"yMin\": 762,\r\n \"yMax\": 1156,\r\n \"ha\": 394,\r\n \"leftSideBearing\": 174,\r\n \"advanceWidth\": 976\r\n },\r\n \"_\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1254,\r\n \"yMin\": 2,\r\n \"yMax\": 246,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1408\r\n },\r\n \"`\": {\r\n \"xMin\": 132,\r\n \"xMax\": 578,\r\n \"yMin\": 1102,\r\n \"yMax\": 1452,\r\n \"ha\": 350,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 698\r\n },\r\n \"a\": {\r\n \"xMin\": 84,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1020\r\n },\r\n \"b\": {\r\n \"xMin\": 120,\r\n \"xMax\": 948,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1042\r\n },\r\n \"c\": {\r\n \"xMin\": 84,\r\n \"xMax\": 930,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1000\r\n },\r\n \"d\": {\r\n \"xMin\": 82,\r\n \"xMax\": 910,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1020\r\n },\r\n \"e\": {\r\n \"xMin\": 92,\r\n \"xMax\": 936,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1020\r\n },\r\n \"f\": {\r\n \"xMin\": 0,\r\n \"xMax\": 724,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 750\r\n },\r\n \"g\": {\r\n \"xMin\": 92,\r\n \"xMax\": 922,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1042\r\n },\r\n \"h\": {\r\n \"xMin\": 122,\r\n \"xMax\": 956,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1042\r\n },\r\n \"i\": {\r\n \"xMin\": 154,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 626\r\n },\r\n \"j\": {\r\n \"xMin\": -44,\r\n \"xMax\": 480,\r\n \"yMin\": -400,\r\n \"yMax\": 1402,\r\n \"ha\": 1802,\r\n \"leftSideBearing\": -44,\r\n \"advanceWidth\": 626\r\n },\r\n \"k\": {\r\n \"xMin\": 150,\r\n \"xMax\": 920,\r\n \"yMin\": -2,\r\n \"yMax\": 1400,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1014\r\n },\r\n \"l\": {\r\n \"xMin\": 140,\r\n \"xMax\": 444,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 586\r\n },\r\n \"m\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1486,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1604\r\n },\r\n \"n\": {\r\n \"xMin\": 132,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1082\r\n },\r\n \"o\": {\r\n \"xMin\": 78,\r\n \"xMax\": 912,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 990\r\n },\r\n \"p\": {\r\n \"xMin\": 132,\r\n \"xMax\": 960,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1062\r\n },\r\n \"q\": {\r\n \"xMin\": 104,\r\n \"xMax\": 932,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1062\r\n },\r\n \"r\": {\r\n \"xMin\": 132,\r\n \"xMax\": 770,\r\n \"yMin\": 0,\r\n \"yMax\": 998,\r\n \"ha\": 998,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 792\r\n },\r\n \"s\": {\r\n \"xMin\": 86,\r\n \"xMax\": 836,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 910\r\n },\r\n \"t\": {\r\n \"xMin\": 60,\r\n \"xMax\": 786,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 870\r\n },\r\n \"u\": {\r\n \"xMin\": 118,\r\n \"xMax\": 952,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1076\r\n },\r\n \"v\": {\r\n \"xMin\": 36,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 876\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1372,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1396\r\n },\r\n \"x\": {\r\n \"xMin\": 84,\r\n \"xMax\": 860,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 938\r\n },\r\n \"y\": {\r\n \"xMin\": 20,\r\n \"xMax\": 892,\r\n \"yMin\": -400,\r\n \"yMax\": 1004,\r\n \"ha\": 1404,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 916\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 916\r\n },\r\n \"{\": {\r\n \"xMin\": 188,\r\n \"xMax\": 932,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 1012\r\n },\r\n \"|\": {\r\n \"xMin\": 180,\r\n \"xMax\": 424,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 604\r\n },\r\n \"}\": {\r\n \"xMin\": 80,\r\n \"xMax\": 824,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1012\r\n },\r\n \"~\": {\r\n \"xMin\": 112,\r\n \"xMax\": 802,\r\n \"yMin\": 84,\r\n \"yMax\": 398,\r\n \"ha\": 314,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 918\r\n }\r\n },\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-16T18:00:03.708Z\"\r\n};","export const MerriweatherFont = {\r\n name: \"Merriweather-Regular\",\r\n smufl: false,\r\n spacing: 50,\r\n fontFamily: \"Merriweather\",\r\n description: \"Merriweather, a serif web font by Sorkin Type\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 62,\r\n \"xMax\": 582,\r\n \"yMin\": -9,\r\n \"yMax\": 631,\r\n \"ha\": 640,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 643\r\n },\r\n \"1\": {\r\n \"xMin\": 39,\r\n \"xMax\": 419,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 440\r\n },\r\n \"2\": {\r\n \"xMin\": 47,\r\n \"xMax\": 565,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 598\r\n },\r\n \"3\": {\r\n \"xMin\": 57,\r\n \"xMax\": 512,\r\n \"yMin\": -161,\r\n \"yMax\": 632,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 560\r\n },\r\n \"4\": {\r\n \"xMin\": 37,\r\n \"xMax\": 625,\r\n \"yMin\": -161,\r\n \"yMax\": 680,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 644\r\n },\r\n \"5\": {\r\n \"xMin\": 91,\r\n \"xMax\": 527,\r\n \"yMin\": -161,\r\n \"yMax\": 643,\r\n \"ha\": 804,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 594\r\n },\r\n \"6\": {\r\n \"xMin\": 76,\r\n \"xMax\": 592,\r\n \"yMin\": -11,\r\n \"yMax\": 786,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 664\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 546,\r\n \"yMin\": -173,\r\n \"yMax\": 624,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 588\r\n },\r\n \"8\": {\r\n \"xMin\": 65,\r\n \"xMax\": 572,\r\n \"yMin\": -10,\r\n \"yMax\": 752,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 633\r\n },\r\n \"9\": {\r\n \"xMin\": 70,\r\n \"xMax\": 588,\r\n \"yMin\": -167,\r\n \"yMax\": 632,\r\n \"ha\": 799,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 660\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 237\r\n },\r\n \"!\": {\r\n \"xMin\": 107,\r\n \"xMax\": 248,\r\n \"yMin\": -10,\r\n \"yMax\": 883,\r\n \"ha\": 893,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 354\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 124,\r\n \"xMax\": 489,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 612\r\n },\r\n \"#\": {\r\n \"xMin\": 81,\r\n \"xMax\": 677,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 81,\r\n \"advanceWidth\": 744\r\n },\r\n \"$\": {\r\n \"xMin\": 94,\r\n \"xMax\": 575,\r\n \"yMin\": -126,\r\n \"yMax\": 860,\r\n \"ha\": 986,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 659\r\n },\r\n \"%\": {\r\n \"xMin\": 53,\r\n \"xMax\": 981,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1037\r\n },\r\n \"&\": {\r\n \"xMin\": 60,\r\n \"xMax\": 739,\r\n \"yMin\": -9,\r\n \"yMax\": 752,\r\n \"ha\": 761,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 756\r\n },\r\n \"'\": {\r\n \"xMin\": 124,\r\n \"xMax\": 230,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 353\r\n },\r\n \"(\": {\r\n \"xMin\": 67,\r\n \"xMax\": 360,\r\n \"yMin\": -184,\r\n \"yMax\": 828,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 430\r\n },\r\n \")\": {\r\n \"xMin\": 70,\r\n \"xMax\": 363,\r\n \"yMin\": -183,\r\n \"yMax\": 829,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 430\r\n },\r\n \"*\": {\r\n \"xMin\": 76,\r\n \"xMax\": 568,\r\n \"yMin\": 310,\r\n \"yMax\": 823,\r\n \"ha\": 513,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 643\r\n },\r\n \"+\": {\r\n \"xMin\": 105,\r\n \"xMax\": 556,\r\n \"yMin\": 84,\r\n \"yMax\": 547,\r\n \"ha\": 463,\r\n \"leftSideBearing\": 105,\r\n \"advanceWidth\": 661\r\n },\r\n \",\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 150,\r\n \"ha\": 374,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 335\r\n },\r\n \"-\": {\r\n \"xMin\": 112,\r\n \"xMax\": 516,\r\n \"yMin\": 284,\r\n \"yMax\": 357,\r\n \"ha\": 73,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 628\r\n },\r\n \".\": {\r\n \"xMin\": 63,\r\n \"xMax\": 202,\r\n \"yMin\": -10,\r\n \"yMax\": 127,\r\n \"ha\": 137,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 265\r\n },\r\n \"/\": {\r\n \"xMin\": 36,\r\n \"xMax\": 394,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 431\r\n },\r\n \":\": {\r\n \"xMin\": 102,\r\n \"xMax\": 240,\r\n \"yMin\": -10,\r\n \"yMax\": 539,\r\n \"ha\": 549,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 344\r\n },\r\n \";\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 539,\r\n \"ha\": 763,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 344\r\n },\r\n \"<\": {\r\n \"xMin\": 82,\r\n \"xMax\": 555,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 669\r\n },\r\n \"=\": {\r\n \"xMin\": 102,\r\n \"xMax\": 552,\r\n \"yMin\": 127,\r\n \"yMax\": 474,\r\n \"ha\": 347,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 653\r\n },\r\n \">\": {\r\n \"xMin\": 114,\r\n \"xMax\": 587,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 669\r\n },\r\n \"?\": {\r\n \"xMin\": 42,\r\n \"xMax\": 452,\r\n \"yMin\": -10,\r\n \"yMax\": 906,\r\n \"ha\": 916,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 487\r\n },\r\n \"@\": {\r\n \"xMin\": 93,\r\n \"xMax\": 977,\r\n \"yMin\": -253,\r\n \"yMax\": 760,\r\n \"ha\": 1013,\r\n \"leftSideBearing\": 93,\r\n \"advanceWidth\": 1078\r\n },\r\n \"A\": {\r\n \"xMin\": -13,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": -13,\r\n \"advanceWidth\": 692\r\n },\r\n \"B\": {\r\n \"xMin\": 46,\r\n \"xMax\": 649,\r\n \"yMin\": -6,\r\n \"yMax\": 751,\r\n \"ha\": 757,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 685\r\n },\r\n \"C\": {\r\n \"xMin\": 33,\r\n \"xMax\": 617,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 653\r\n },\r\n \"D\": {\r\n \"xMin\": 46,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 751,\r\n \"ha\": 759,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 758\r\n },\r\n \"E\": {\r\n \"xMin\": 46,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 651\r\n },\r\n \"F\": {\r\n \"xMin\": 43,\r\n \"xMax\": 588,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 619\r\n },\r\n \"G\": {\r\n \"xMin\": 43,\r\n \"xMax\": 721,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 740\r\n },\r\n \"H\": {\r\n \"xMin\": 50,\r\n \"xMax\": 777,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 828\r\n },\r\n \"I\": {\r\n \"xMin\": 54,\r\n \"xMax\": 348,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 403\r\n },\r\n \"J\": {\r\n \"xMin\": -6,\r\n \"xMax\": 343,\r\n \"yMin\": -179,\r\n \"yMax\": 743,\r\n \"ha\": 922,\r\n \"leftSideBearing\": -6,\r\n \"advanceWidth\": 381\r\n },\r\n \"K\": {\r\n \"xMin\": 48,\r\n \"xMax\": 727,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 726\r\n },\r\n \"L\": {\r\n \"xMin\": 48,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 634\r\n },\r\n \"M\": {\r\n \"xMin\": 6,\r\n \"xMax\": 984,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 990\r\n },\r\n \"N\": {\r\n \"xMin\": 50,\r\n \"xMax\": 774,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 799\r\n },\r\n \"O\": {\r\n \"xMin\": 34,\r\n \"xMax\": 689,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 722\r\n },\r\n \"P\": {\r\n \"xMin\": 48,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 750,\r\n \"ha\": 750,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 649\r\n },\r\n \"Q\": {\r\n \"xMin\": 36,\r\n \"xMax\": 904,\r\n \"yMin\": -198,\r\n \"yMax\": 751,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 727\r\n },\r\n \"R\": {\r\n \"xMin\": 46,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 704\r\n },\r\n \"S\": {\r\n \"xMin\": 62,\r\n \"xMax\": 556,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 594\r\n },\r\n \"T\": {\r\n \"xMin\": 17,\r\n \"xMax\": 669,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 692\r\n },\r\n \"U\": {\r\n \"xMin\": 24,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 740\r\n },\r\n \"V\": {\r\n \"xMin\": -16,\r\n \"xMax\": 689,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": -16,\r\n \"advanceWidth\": 670\r\n },\r\n \"W\": {\r\n \"xMin\": -19,\r\n \"xMax\": 1019,\r\n \"yMin\": -5,\r\n \"yMax\": 743,\r\n \"ha\": 748,\r\n \"leftSideBearing\": -19,\r\n \"advanceWidth\": 1000\r\n },\r\n \"X\": {\r\n \"xMin\": 7,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 7,\r\n \"advanceWidth\": 712\r\n },\r\n \"Y\": {\r\n \"xMin\": -12,\r\n \"xMax\": 658,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": -12,\r\n \"advanceWidth\": 644\r\n },\r\n \"Z\": {\r\n \"xMin\": 34,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 746,\r\n \"ha\": 746,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 654\r\n },\r\n \"[\": {\r\n \"xMin\": 96,\r\n \"xMax\": 338,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 428\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 30,\r\n \"xMax\": 388,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 431\r\n },\r\n \"]\": {\r\n \"xMin\": 90,\r\n \"xMax\": 332,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 428\r\n },\r\n \"^\": {\r\n \"xMin\": 86,\r\n \"xMax\": 579,\r\n \"yMin\": 133,\r\n \"yMax\": 748,\r\n \"ha\": 615,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 666\r\n },\r\n \"_\": {\r\n \"xMin\": -10,\r\n \"xMax\": 845,\r\n \"yMin\": -183,\r\n \"yMax\": -122,\r\n \"ha\": 61,\r\n \"leftSideBearing\": -10,\r\n \"advanceWidth\": 835\r\n },\r\n \"`\": {\r\n \"xMin\": -7,\r\n \"xMax\": 227,\r\n \"yMin\": 653,\r\n \"yMax\": 884,\r\n \"ha\": 231,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 333\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 536,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 561\r\n },\r\n \"b\": {\r\n \"xMin\": -2,\r\n \"xMax\": 565,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": -2,\r\n \"advanceWidth\": 607\r\n },\r\n \"c\": {\r\n \"xMin\": 33,\r\n \"xMax\": 471,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 513\r\n },\r\n \"d\": {\r\n \"xMin\": 42,\r\n \"xMax\": 586,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 621\r\n },\r\n \"e\": {\r\n \"xMin\": 43,\r\n \"xMax\": 503,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 544\r\n },\r\n \"f\": {\r\n \"xMin\": 31,\r\n \"xMax\": 413,\r\n \"yMin\": 0,\r\n \"yMax\": 828,\r\n \"ha\": 828,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 400\r\n },\r\n \"g\": {\r\n \"xMin\": 41,\r\n \"xMax\": 597,\r\n \"yMin\": -270,\r\n \"yMax\": 571,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 607\r\n },\r\n \"h\": {\r\n \"xMin\": 15,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 659\r\n },\r\n \"i\": {\r\n \"xMin\": 42,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 793,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 333\r\n },\r\n \"j\": {\r\n \"xMin\": -11,\r\n \"xMax\": 238,\r\n \"yMin\": -243,\r\n \"yMax\": 793,\r\n \"ha\": 1036,\r\n \"leftSideBearing\": -11,\r\n \"advanceWidth\": 317\r\n },\r\n \"k\": {\r\n \"xMin\": 20,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 600\r\n },\r\n \"l\": {\r\n \"xMin\": 37,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 333\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 970,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 995\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 664\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 562,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 608\r\n },\r\n \"p\": {\r\n \"xMin\": 29,\r\n \"xMax\": 586,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 628\r\n },\r\n \"q\": {\r\n \"xMin\": 42,\r\n \"xMax\": 597,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 609\r\n },\r\n \"r\": {\r\n \"xMin\": 47,\r\n \"xMax\": 437,\r\n \"yMin\": 0,\r\n \"yMax\": 570,\r\n \"ha\": 570,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 458\r\n },\r\n \"s\": {\r\n \"xMin\": 55,\r\n \"xMax\": 460,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 505\r\n },\r\n \"t\": {\r\n \"xMin\": 31,\r\n \"xMax\": 391,\r\n \"yMin\": -10,\r\n \"yMax\": 699,\r\n \"ha\": 709,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 407\r\n },\r\n \"u\": {\r\n \"xMin\": 36,\r\n \"xMax\": 597,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 632\r\n },\r\n \"v\": {\r\n \"xMin\": -1,\r\n \"xMax\": 575,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 568\r\n },\r\n \"w\": {\r\n \"xMin\": -7,\r\n \"xMax\": 853,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 839\r\n },\r\n \"x\": {\r\n \"xMin\": 6,\r\n \"xMax\": 591,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 595\r\n },\r\n \"y\": {\r\n \"xMin\": -3,\r\n \"xMax\": 571,\r\n \"yMin\": -249,\r\n \"yMax\": 555,\r\n \"ha\": 804,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 572\r\n },\r\n \"z\": {\r\n \"xMin\": 30,\r\n \"xMax\": 518,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 554\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 431,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 508\r\n },\r\n \"|\": {\r\n \"xMin\": 170,\r\n \"xMax\": 252,\r\n \"yMin\": -91,\r\n \"yMax\": 869,\r\n \"ha\": 960,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 422\r\n },\r\n \"}\": {\r\n \"xMin\": 77,\r\n \"xMax\": 450,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 508\r\n },\r\n \"~\": {\r\n \"xMin\": 107,\r\n \"xMax\": 584,\r\n \"yMin\": 218,\r\n \"yMax\": 379,\r\n \"ha\": 161,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 692\r\n }\r\n },\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-10-16T18:04:00.805Z\"\r\n};","export const ArialFont = {\r\n smufl: false,\r\n name: \"Arial\",\r\n spacing: 50,\r\n Description: 'Built-in sans-serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: false,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1041,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"1\": {\r\n \"xMin\": 223,\r\n \"xMax\": 763,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 223,\r\n \"advanceWidth\": 1139\r\n },\r\n \"2\": {\r\n \"xMin\": 61.840001123045234,\r\n \"xMax\": 1031,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1139\r\n },\r\n \"3\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1046,\r\n \"yMin\": -26,\r\n \"yMax\": 1472,\r\n \"ha\": 1498,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"4\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1040,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1139\r\n },\r\n \"5\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1057,\r\n \"yMin\": -25,\r\n \"yMax\": 1446,\r\n \"ha\": 1471,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"6\": {\r\n \"xMin\": 77,\r\n \"xMax\": 1045,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 1139\r\n },\r\n \"7\": {\r\n \"xMin\": 97,\r\n \"xMax\": 1046,\r\n \"yMin\": 0,\r\n \"yMax\": 1447,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 1139\r\n },\r\n \"8\": {\r\n \"xMin\": 83,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 83,\r\n \"advanceWidth\": 1139\r\n },\r\n \"9\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"!\": {\r\n \"xMin\": 176,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 176,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 94,\r\n \"xMax\": 631,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 727\r\n },\r\n \"#\": {\r\n \"xMin\": 21,\r\n \"xMax\": 1113,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 1139\r\n },\r\n \"$\": {\r\n \"xMin\": 73,\r\n \"xMax\": 1043,\r\n \"yMin\": -211,\r\n \"yMax\": 1601,\r\n \"ha\": 1812,\r\n \"leftSideBearing\": 73,\r\n \"advanceWidth\": 1139\r\n },\r\n \"%\": {\r\n \"xMin\": 119,\r\n \"xMax\": 1695,\r\n \"yMin\": -54,\r\n \"yMax\": 1491,\r\n \"ha\": 1545,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 1821\r\n },\r\n \"&\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1319,\r\n \"yMin\": -34,\r\n \"yMax\": 1491,\r\n \"ha\": 1525,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1366\r\n },\r\n \"'\": {\r\n \"xMin\": 90,\r\n \"xMax\": 295,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 391\r\n },\r\n \"(\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 64,\r\n \"xMax\": 725,\r\n \"yMin\": 867,\r\n \"yMax\": 1491,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 797\r\n },\r\n \"+\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 237,\r\n \"yMax\": 1206,\r\n \"ha\": 969,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \",\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 205,\r\n \"ha\": 495,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"-\": {\r\n \"xMin\": 65,\r\n \"xMax\": 618,\r\n \"yMin\": 440,\r\n \"yMax\": 621,\r\n \"ha\": 181,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 186,\r\n \"xMax\": 391,\r\n \"yMin\": 0,\r\n \"yMax\": 205,\r\n \"ha\": 205,\r\n \"leftSideBearing\": 186,\r\n \"advanceWidth\": 569\r\n },\r\n \"/\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 185,\r\n \"xMax\": 390,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 185,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 1062,\r\n \"ha\": 1352,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"=\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 417,\r\n \"yMax\": 1030,\r\n \"ha\": 613,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \">\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"?\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1036,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1139\r\n },\r\n \"@\": {\r\n \"xMin\": 111,\r\n \"xMax\": 2005,\r\n \"yMin\": -431,\r\n \"yMax\": 1493,\r\n \"ha\": 1924,\r\n \"leftSideBearing\": 111,\r\n \"advanceWidth\": 2079\r\n },\r\n \"A\": {\r\n \"xMin\": -3,\r\n \"xMax\": 1369,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 1366\r\n },\r\n \"B\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1257,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1398,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1479\r\n },\r\n \"D\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1370,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 162,\r\n \"xMax\": 1256,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 1366\r\n },\r\n \"F\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1251\r\n },\r\n \"G\": {\r\n \"xMin\": 109,\r\n \"xMax\": 1465,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 109,\r\n \"advanceWidth\": 1593\r\n },\r\n \"H\": {\r\n \"xMin\": 164,\r\n \"xMax\": 1314,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 191,\r\n \"xMax\": 385,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 191,\r\n \"advanceWidth\": 569\r\n },\r\n \"J\": {\r\n \"xMin\": 58.84976474807333,\r\n \"xMax\": 865,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1024\r\n },\r\n \"K\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1362,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"L\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1139\r\n },\r\n \"M\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1551,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1706\r\n },\r\n \"N\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1501,\r\n \"yMin\": -25,\r\n \"yMax\": 1492,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1593\r\n },\r\n \"P\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1277,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Q\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1518,\r\n \"yMin\": -114,\r\n \"yMax\": 1492,\r\n \"ha\": 1606,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1593\r\n },\r\n \"R\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1453,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"S\": {\r\n \"xMin\": 92,\r\n \"xMax\": 1259,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1366\r\n },\r\n \"T\": {\r\n \"xMin\": 48,\r\n \"xMax\": 1210,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1314,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"W\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1910,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1353,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Y\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Z\": {\r\n \"xMin\": 41,\r\n \"xMax\": 1200,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 139,\r\n \"xMax\": 536,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 39,\r\n \"xMax\": 436,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"^\": {\r\n \"xMin\": 54,\r\n \"xMax\": 907,\r\n \"yMin\": 690,\r\n \"yMax\": 1491,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": -31,\r\n \"xMax\": 1162,\r\n \"yMin\": -407,\r\n \"yMax\": -277,\r\n \"ha\": 130,\r\n \"leftSideBearing\": -31,\r\n \"advanceWidth\": 1139\r\n },\r\n \"`\": {\r\n \"xMin\": 89,\r\n \"xMax\": 465,\r\n \"yMin\": 1194,\r\n \"yMax\": 1474,\r\n \"ha\": 280,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1052,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1139\r\n },\r\n \"b\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1055,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1139\r\n },\r\n \"c\": {\r\n \"xMin\": 80,\r\n \"xMax\": 1005,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1024\r\n },\r\n \"d\": {\r\n \"xMin\": 70,\r\n \"xMax\": 991,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1139\r\n },\r\n \"e\": {\r\n \"xMin\": 75,\r\n \"xMax\": 1054,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 1139\r\n },\r\n \"f\": {\r\n \"xMin\": 19,\r\n \"xMax\": 640,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 19,\r\n \"advanceWidth\": 569\r\n },\r\n \"g\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1002,\r\n \"yMin\": -431,\r\n \"yMax\": 1086,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1139\r\n },\r\n \"h\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"i\": {\r\n \"xMin\": 136,\r\n \"xMax\": 316,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 455\r\n },\r\n \"j\": {\r\n \"xMin\": -94,\r\n \"xMax\": 314,\r\n \"yMin\": -431,\r\n \"yMax\": 1466,\r\n \"ha\": 1897,\r\n \"leftSideBearing\": -94,\r\n \"advanceWidth\": 455\r\n },\r\n \"k\": {\r\n \"xMin\": 136,\r\n \"xMax\": 1016,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 131,\r\n \"xMax\": 311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 455\r\n },\r\n \"m\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1574,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1706\r\n },\r\n \"n\": {\r\n \"xMin\": 135,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"o\": {\r\n \"xMin\": 68,\r\n \"xMax\": 1063,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 68,\r\n \"advanceWidth\": 1139\r\n },\r\n \"p\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1057,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"q\": {\r\n \"xMin\": 72,\r\n \"xMax\": 992,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1139\r\n },\r\n \"r\": {\r\n \"xMin\": 133,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 133,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 63,\r\n \"xMax\": 945,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 1024\r\n },\r\n \"t\": {\r\n \"xMin\": 36,\r\n \"xMax\": 554,\r\n \"yMin\": -14,\r\n \"yMax\": 1433,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 131,\r\n \"xMax\": 992,\r\n \"yMin\": -24,\r\n \"yMax\": 1062,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 1139\r\n },\r\n \"v\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1463,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 15,\r\n \"xMax\": 1009,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1006,\r\n \"yMin\": -431,\r\n \"yMax\": 1062,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 40,\r\n \"xMax\": 980,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 1024\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 636,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 684\r\n },\r\n \"|\": {\r\n \"xMin\": 188,\r\n \"xMax\": 345,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 532\r\n },\r\n \"}\": {\r\n \"xMin\": 47,\r\n \"xMax\": 626,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 684\r\n },\r\n \"~\": {\r\n \"xMin\": 87,\r\n \"xMax\": 1110,\r\n \"yMin\": 557,\r\n \"yMax\": 885,\r\n \"ha\": 328,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 1196\r\n }\r\n },\r\n \"fontFamily\": \"Arial\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T18:48:11.823Z\"\r\n};","export const SourceSansProFont = {\r\n smufl: false,\r\n name: \"Sans\",\r\n spacing: 50,\r\n description: \"Open-source Sans font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Sans Pro\",\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-11-01T21:31:30.347Z\",\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 44,\r\n \"xMax\": 453,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"1\": {\r\n \"xMin\": 79,\r\n \"xMax\": 439,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 497\r\n },\r\n \"2\": {\r\n \"xMin\": 36,\r\n \"xMax\": 452,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n },\r\n \"3\": {\r\n \"xMin\": 26,\r\n \"xMax\": 446,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 497\r\n },\r\n \"4\": {\r\n \"xMin\": 17,\r\n \"xMax\": 469,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 497\r\n },\r\n \"5\": {\r\n \"xMin\": 25,\r\n \"xMax\": 449,\r\n \"yMin\": -12,\r\n \"yMax\": 638,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 497\r\n },\r\n \"6\": {\r\n \"xMin\": 48,\r\n \"xMax\": 457,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 497\r\n },\r\n \"7\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"8\": {\r\n \"xMin\": 41,\r\n \"xMax\": 456,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 497\r\n },\r\n \"9\": {\r\n \"xMin\": 40,\r\n \"xMax\": 448,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 497\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 200\r\n },\r\n \"!\": {\r\n \"xMin\": 85,\r\n \"xMax\": 204,\r\n \"yMin\": -12,\r\n \"yMax\": 670,\r\n \"ha\": 682,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 80,\r\n \"xMax\": 344,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 425\r\n },\r\n \"#\": {\r\n \"xMin\": 35,\r\n \"xMax\": 467,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 497\r\n },\r\n \"$\": {\r\n \"xMin\": 52,\r\n \"xMax\": 437,\r\n \"yMin\": -110,\r\n \"yMax\": 748,\r\n \"ha\": 858,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 497\r\n },\r\n \"%\": {\r\n \"xMin\": 35,\r\n \"xMax\": 790,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 824\r\n },\r\n \"&\": {\r\n \"xMin\": 32,\r\n \"xMax\": 594,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 609\r\n },\r\n \"'\": {\r\n \"xMin\": 80,\r\n \"xMax\": 168,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 249\r\n },\r\n \"(\": {\r\n \"xMin\": 82,\r\n \"xMax\": 265,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 303\r\n },\r\n \")\": {\r\n \"xMin\": 38,\r\n \"xMax\": 221,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 303\r\n },\r\n \"*\": {\r\n \"xMin\": 58,\r\n \"xMax\": 360,\r\n \"yMin\": 420,\r\n \"yMax\": 712,\r\n \"ha\": 292,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 418\r\n },\r\n \"+\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 104,\r\n \"yMax\": 556,\r\n \"ha\": 452,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \",\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 114,\r\n \"ha\": 284,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"-\": {\r\n \"xMin\": 41,\r\n \"xMax\": 271,\r\n \"yMin\": 219,\r\n \"yMax\": 282,\r\n \"ha\": 63,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 311\r\n },\r\n \".\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 114,\r\n \"ha\": 126,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \"/\": {\r\n \"xMin\": 10,\r\n \"xMax\": 337,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 350\r\n },\r\n \":\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 475,\r\n \"ha\": 487,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \";\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 475,\r\n \"ha\": 645,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"<\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"=\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 193,\r\n \"yMax\": 468,\r\n \"ha\": 275,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \">\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"?\": {\r\n \"xMin\": 38,\r\n \"xMax\": 377,\r\n \"yMin\": -12,\r\n \"yMax\": 682,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 425\r\n },\r\n \"@\": {\r\n \"xMin\": 51,\r\n \"xMax\": 796,\r\n \"yMin\": -155,\r\n \"yMax\": 646,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 847\r\n },\r\n \"A\": {\r\n \"xMin\": 3,\r\n \"xMax\": 541,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 3,\r\n \"advanceWidth\": 544\r\n },\r\n \"B\": {\r\n \"xMin\": 90,\r\n \"xMax\": 548,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 588\r\n },\r\n \"C\": {\r\n \"xMin\": 52,\r\n \"xMax\": 539,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 571\r\n },\r\n \"D\": {\r\n \"xMin\": 90,\r\n \"xMax\": 564,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 615\r\n },\r\n \"E\": {\r\n \"xMin\": 90,\r\n \"xMax\": 478,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 527\r\n },\r\n \"F\": {\r\n \"xMin\": 90,\r\n \"xMax\": 468,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 494\r\n },\r\n \"G\": {\r\n \"xMin\": 52,\r\n \"xMax\": 550,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 617\r\n },\r\n \"H\": {\r\n \"xMin\": 90,\r\n \"xMax\": 562,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 652\r\n },\r\n \"I\": {\r\n \"xMin\": 90,\r\n \"xMax\": 173,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 263\r\n },\r\n \"J\": {\r\n \"xMin\": 31,\r\n \"xMax\": 393,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 480\r\n },\r\n \"K\": {\r\n \"xMin\": 90,\r\n \"xMax\": 575,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 579\r\n },\r\n \"L\": {\r\n \"xMin\": 90,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 486\r\n },\r\n \"M\": {\r\n \"xMin\": 90,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 727\r\n },\r\n \"N\": {\r\n \"xMin\": 90,\r\n \"xMax\": 557,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 647\r\n },\r\n \"O\": {\r\n \"xMin\": 52,\r\n \"xMax\": 613,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"P\": {\r\n \"xMin\": 90,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 566\r\n },\r\n \"Q\": {\r\n \"xMin\": 52,\r\n \"xMax\": 627,\r\n \"yMin\": -165,\r\n \"yMax\": 668,\r\n \"ha\": 833,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"R\": {\r\n \"xMin\": 90,\r\n \"xMax\": 544,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 569\r\n },\r\n \"S\": {\r\n \"xMin\": 42,\r\n \"xMax\": 495,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 534\r\n },\r\n \"T\": {\r\n \"xMin\": 28,\r\n \"xMax\": 508,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 536\r\n },\r\n \"U\": {\r\n \"xMin\": 87,\r\n \"xMax\": 558,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 645\r\n },\r\n \"V\": {\r\n \"xMin\": 0,\r\n \"xMax\": 515,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 515\r\n },\r\n \"W\": {\r\n \"xMin\": 23,\r\n \"xMax\": 762,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 23,\r\n \"advanceWidth\": 786\r\n },\r\n \"X\": {\r\n \"xMin\": 15,\r\n \"xMax\": 498,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 513\r\n },\r\n \"Y\": {\r\n \"xMin\": -1,\r\n \"xMax\": 477,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 476\r\n },\r\n \"Z\": {\r\n \"xMin\": 45,\r\n \"xMax\": 497,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 539\r\n },\r\n \"[\": {\r\n \"xMin\": 94,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 303\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 14,\r\n \"xMax\": 340,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 350\r\n },\r\n \"]\": {\r\n \"xMin\": 31,\r\n \"xMax\": 209,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"^\": {\r\n \"xMin\": 60,\r\n \"xMax\": 437,\r\n \"yMin\": 284,\r\n \"yMax\": 670,\r\n \"ha\": 386,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 497\r\n },\r\n \"_\": {\r\n \"xMin\": 12,\r\n \"xMax\": 488,\r\n \"yMin\": -126,\r\n \"yMax\": -71,\r\n \"ha\": 55,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 500\r\n },\r\n \"`\": {\r\n \"xMin\": 128,\r\n \"xMax\": 327,\r\n \"yMin\": 573,\r\n \"yMax\": 781,\r\n \"ha\": 208,\r\n \"leftSideBearing\": 128,\r\n \"advanceWidth\": 542\r\n },\r\n \"a\": {\r\n \"xMin\": 52,\r\n \"xMax\": 433,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 504\r\n },\r\n \"b\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 553\r\n },\r\n \"c\": {\r\n \"xMin\": 46,\r\n \"xMax\": 431,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 456\r\n },\r\n \"d\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"e\": {\r\n \"xMin\": 46,\r\n \"xMax\": 458,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 496\r\n },\r\n \"f\": {\r\n \"xMin\": 30,\r\n \"xMax\": 319,\r\n \"yMin\": 0,\r\n \"yMax\": 724,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 292\r\n },\r\n \"g\": {\r\n \"xMin\": 45,\r\n \"xMax\": 492,\r\n \"yMin\": -224,\r\n \"yMax\": 498,\r\n \"ha\": 722,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 504\r\n },\r\n \"h\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 544\r\n },\r\n \"i\": {\r\n \"xMin\": 67,\r\n \"xMax\": 181,\r\n \"yMin\": 0,\r\n \"yMax\": 692,\r\n \"ha\": 692,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 246\r\n },\r\n \"j\": {\r\n \"xMin\": -40,\r\n \"xMax\": 181,\r\n \"yMin\": -217,\r\n \"yMax\": 692,\r\n \"ha\": 909,\r\n \"leftSideBearing\": -40,\r\n \"advanceWidth\": 247\r\n },\r\n \"k\": {\r\n \"xMin\": 82,\r\n \"xMax\": 486,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 495\r\n },\r\n \"l\": {\r\n \"xMin\": 82,\r\n \"xMax\": 216,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 255\r\n },\r\n \"m\": {\r\n \"xMin\": 82,\r\n \"xMax\": 753,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 829\r\n },\r\n \"n\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 547\r\n },\r\n \"o\": {\r\n \"xMin\": 46,\r\n \"xMax\": 496,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 542\r\n },\r\n \"p\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 555\r\n },\r\n \"q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"r\": {\r\n \"xMin\": 82,\r\n \"xMax\": 350,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 347\r\n },\r\n \"s\": {\r\n \"xMin\": 28,\r\n \"xMax\": 387,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 419\r\n },\r\n \"t\": {\r\n \"xMin\": 24,\r\n \"xMax\": 325,\r\n \"yMin\": -12,\r\n \"yMax\": 622,\r\n \"ha\": 634,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 338\r\n },\r\n \"u\": {\r\n \"xMin\": 75,\r\n \"xMax\": 462,\r\n \"yMin\": -12,\r\n \"yMax\": 486,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 544\r\n },\r\n \"v\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 694,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 718\r\n },\r\n \"x\": {\r\n \"xMin\": 14,\r\n \"xMax\": 432,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 446\r\n },\r\n \"y\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": -209,\r\n \"yMax\": 486,\r\n \"ha\": 695,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"z\": {\r\n \"xMin\": 31,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 425\r\n },\r\n \"{\": {\r\n \"xMin\": 34,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 303\r\n },\r\n \"|\": {\r\n \"xMin\": 92,\r\n \"xMax\": 150,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 241\r\n },\r\n \"}\": {\r\n \"xMin\": 31,\r\n \"xMax\": 269,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"~\": {\r\n \"xMin\": 36,\r\n \"xMax\": 461,\r\n \"yMin\": 257,\r\n \"yMax\": 403,\r\n \"ha\": 146,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n }\r\n },\r\n};","export const SourceSerifProFont = {\r\n smufl: false,\r\n name: \"Serif\",\r\n spacing: 50,\r\n description: \"Open-source Serif font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Serif Pro\",\r\n \"resolution\": 1000,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 41,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 500\r\n },\r\n \"1\": {\r\n \"xMin\": 74,\r\n \"xMax\": 445,\r\n \"yMin\": 0,\r\n \"yMax\": 654,\r\n \"ha\": 654,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 500\r\n },\r\n \"2\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 659,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"3\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"4\": {\r\n \"xMin\": 24,\r\n \"xMax\": 484,\r\n \"yMin\": 0,\r\n \"yMax\": 655,\r\n \"ha\": 655,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 500\r\n },\r\n \"5\": {\r\n \"xMin\": 38,\r\n \"xMax\": 458,\r\n \"yMin\": -13,\r\n \"yMax\": 646,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 500\r\n },\r\n \"6\": {\r\n \"xMin\": 40,\r\n \"xMax\": 457,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 500\r\n },\r\n \"7\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 646,\r\n \"ha\": 646,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"8\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"9\": {\r\n \"xMin\": 29,\r\n \"xMax\": 450,\r\n \"yMin\": -20,\r\n \"yMax\": 659,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 500\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 233\r\n },\r\n \"!\": {\r\n \"xMin\": 80,\r\n \"xMax\": 209,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 40,\r\n \"xMax\": 315,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 356\r\n },\r\n \"#\": {\r\n \"xMin\": 25,\r\n \"xMax\": 502,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 526\r\n },\r\n \"$\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": -115,\r\n \"yMax\": 749,\r\n \"ha\": 864,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"%\": {\r\n \"xMin\": 69,\r\n \"xMax\": 792,\r\n \"yMin\": -25,\r\n \"yMax\": 669,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 69,\r\n \"advanceWidth\": 861\r\n },\r\n \"&\": {\r\n \"xMin\": 27,\r\n \"xMax\": 675,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 720\r\n },\r\n \"'\": {\r\n \"xMin\": 40,\r\n \"xMax\": 143,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 183\r\n },\r\n \"(\": {\r\n \"xMin\": 80,\r\n \"xMax\": 314,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 339\r\n },\r\n \")\": {\r\n \"xMin\": 25,\r\n \"xMax\": 259,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 339\r\n },\r\n \"*\": {\r\n \"xMin\": 20,\r\n \"xMax\": 420,\r\n \"yMin\": 363,\r\n \"yMax\": 747,\r\n \"ha\": 384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 439\r\n },\r\n \"+\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 77,\r\n \"yMax\": 577,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \",\": {\r\n \"xMin\": 6,\r\n \"xMax\": 213,\r\n \"yMin\": -224,\r\n \"yMax\": 130,\r\n \"ha\": 354,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"-\": {\r\n \"xMin\": 40,\r\n \"xMax\": 272,\r\n \"yMin\": 218,\r\n \"yMax\": 284,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 312\r\n },\r\n \".\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 130,\r\n \"ha\": 143,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \"/\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \":\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 493,\r\n \"ha\": 506,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \";\": {\r\n \"xMin\": 6,\r\n \"xMax\": 221,\r\n \"yMin\": -224,\r\n \"yMax\": 493,\r\n \"ha\": 717,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"=\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 201,\r\n \"yMax\": 458,\r\n \"ha\": 257,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"?\": {\r\n \"xMin\": 66,\r\n \"xMax\": 350,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 416\r\n },\r\n \"@\": {\r\n \"xMin\": 36,\r\n \"xMax\": 800,\r\n \"yMin\": -155,\r\n \"yMax\": 660,\r\n \"ha\": 815,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 835\r\n },\r\n \"A\": {\r\n \"xMin\": 5,\r\n \"xMax\": 653,\r\n \"yMin\": 0,\r\n \"yMax\": 674,\r\n \"ha\": 674,\r\n \"leftSideBearing\": 5,\r\n \"advanceWidth\": 664\r\n },\r\n \"B\": {\r\n \"xMin\": 44,\r\n \"xMax\": 586,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 629\r\n },\r\n \"C\": {\r\n \"xMin\": 47,\r\n \"xMax\": 592,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 631\r\n },\r\n \"D\": {\r\n \"xMin\": 44,\r\n \"xMax\": 663,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 710\r\n },\r\n \"E\": {\r\n \"xMin\": 44,\r\n \"xMax\": 569,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 603\r\n },\r\n \"F\": {\r\n \"xMin\": 44,\r\n \"xMax\": 549,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 579\r\n },\r\n \"G\": {\r\n \"xMin\": 47,\r\n \"xMax\": 667,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 682\r\n },\r\n \"H\": {\r\n \"xMin\": 44,\r\n \"xMax\": 744,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 789\r\n },\r\n \"I\": {\r\n \"xMin\": 44,\r\n \"xMax\": 327,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 371\r\n },\r\n \"J\": {\r\n \"xMin\": -43,\r\n \"xMax\": 340,\r\n \"yMin\": -163,\r\n \"yMax\": 669,\r\n \"ha\": 832,\r\n \"leftSideBearing\": -43,\r\n \"advanceWidth\": 374\r\n },\r\n \"K\": {\r\n \"xMin\": 44,\r\n \"xMax\": 662,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 667\r\n },\r\n \"L\": {\r\n \"xMin\": 44,\r\n \"xMax\": 552,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 596\r\n },\r\n \"M\": {\r\n \"xMin\": 39,\r\n \"xMax\": 857,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 902\r\n },\r\n \"N\": {\r\n \"xMin\": 39,\r\n \"xMax\": 695,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 735\r\n },\r\n \"O\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"P\": {\r\n \"xMin\": 44,\r\n \"xMax\": 567,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 589\r\n },\r\n \"Q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -216,\r\n \"yMax\": 684,\r\n \"ha\": 900,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"R\": {\r\n \"xMin\": 44,\r\n \"xMax\": 637,\r\n \"yMin\": -10,\r\n \"yMax\": 669,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 651\r\n },\r\n \"S\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"T\": {\r\n \"xMin\": 20,\r\n \"xMax\": 584,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 604\r\n },\r\n \"U\": {\r\n \"xMin\": 39,\r\n \"xMax\": 693,\r\n \"yMin\": -15,\r\n \"yMax\": 669,\r\n \"ha\": 684,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 727\r\n },\r\n \"V\": {\r\n \"xMin\": 15,\r\n \"xMax\": 665,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 674\r\n },\r\n \"W\": {\r\n \"xMin\": 15,\r\n \"xMax\": 953,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 962\r\n },\r\n \"X\": {\r\n \"xMin\": 10,\r\n \"xMax\": 639,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 648\r\n },\r\n \"Y\": {\r\n \"xMin\": 15,\r\n \"xMax\": 623,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 633\r\n },\r\n \"Z\": {\r\n \"xMin\": 20,\r\n \"xMax\": 531,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 551\r\n },\r\n \"[\": {\r\n \"xMin\": 100,\r\n \"xMax\": 291,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 320\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \"]\": {\r\n \"xMin\": 29,\r\n \"xMax\": 220,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 320\r\n },\r\n \"^\": {\r\n \"xMin\": 88,\r\n \"xMax\": 446,\r\n \"yMin\": 208,\r\n \"yMax\": 481,\r\n \"ha\": 273,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 531\r\n },\r\n \"_\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -66,\r\n \"yMax\": 0,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"`\": {\r\n \"xMin\": 75,\r\n \"xMax\": 256,\r\n \"yMin\": 557,\r\n \"yMax\": 758,\r\n \"ha\": 201,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 400\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 503,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 509\r\n },\r\n \"b\": {\r\n \"xMin\": 25,\r\n \"xMax\": 532,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 577\r\n },\r\n \"c\": {\r\n \"xMin\": 42,\r\n \"xMax\": 453,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 488\r\n },\r\n \"d\": {\r\n \"xMin\": 45,\r\n \"xMax\": 551,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 567\r\n },\r\n \"e\": {\r\n \"xMin\": 45,\r\n \"xMax\": 461,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 510\r\n },\r\n \"f\": {\r\n \"xMin\": 34,\r\n \"xMax\": 426,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 354\r\n },\r\n \"g\": {\r\n \"xMin\": 36,\r\n \"xMax\": 495,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 518\r\n },\r\n \"h\": {\r\n \"xMin\": 25,\r\n \"xMax\": 571,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 601\r\n },\r\n \"i\": {\r\n \"xMin\": 29,\r\n \"xMax\": 267,\r\n \"yMin\": 0,\r\n \"yMax\": 726,\r\n \"ha\": 726,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 298\r\n },\r\n \"j\": {\r\n \"xMin\": -83,\r\n \"xMax\": 220,\r\n \"yMin\": -249,\r\n \"yMax\": 726,\r\n \"ha\": 975,\r\n \"leftSideBearing\": -83,\r\n \"advanceWidth\": 277\r\n },\r\n \"k\": {\r\n \"xMin\": 25,\r\n \"xMax\": 547,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 547\r\n },\r\n \"l\": {\r\n \"xMin\": 25,\r\n \"xMax\": 273,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 298\r\n },\r\n \"m\": {\r\n \"xMin\": 34,\r\n \"xMax\": 872,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 901\r\n },\r\n \"n\": {\r\n \"xMin\": 34,\r\n \"xMax\": 576,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 606\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 504,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 549\r\n },\r\n \"p\": {\r\n \"xMin\": 35,\r\n \"xMax\": 538,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 583\r\n },\r\n \"q\": {\r\n \"xMin\": 45,\r\n \"xMax\": 556,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 557\r\n },\r\n \"r\": {\r\n \"xMin\": 34,\r\n \"xMax\": 416,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 423\r\n },\r\n \"s\": {\r\n \"xMin\": 47,\r\n \"xMax\": 395,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 434\r\n },\r\n \"t\": {\r\n \"xMin\": 9,\r\n \"xMax\": 323,\r\n \"yMin\": -13,\r\n \"yMax\": 611,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 325\r\n },\r\n \"u\": {\r\n \"xMin\": 25,\r\n \"xMax\": 549,\r\n \"yMin\": -13,\r\n \"yMax\": 481,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 583\r\n },\r\n \"v\": {\r\n \"xMin\": 0,\r\n \"xMax\": 496,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 505\r\n },\r\n \"w\": {\r\n \"xMin\": 0,\r\n \"xMax\": 754,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 764\r\n },\r\n \"x\": {\r\n \"xMin\": 10,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 526\r\n },\r\n \"y\": {\r\n \"xMin\": 0,\r\n \"xMax\": 512,\r\n \"yMin\": -249,\r\n \"yMax\": 475,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"z\": {\r\n \"xMin\": 29,\r\n \"xMax\": 431,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 456\r\n },\r\n \"{\": {\r\n \"xMin\": 40,\r\n \"xMax\": 314,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 344\r\n },\r\n \"|\": {\r\n \"xMin\": 96,\r\n \"xMax\": 155,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 251\r\n },\r\n \"}\": {\r\n \"xMin\": 30,\r\n \"xMax\": 304,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 344\r\n },\r\n \"~\": {\r\n \"xMin\": 49,\r\n \"xMax\": 482,\r\n \"yMin\": 268,\r\n \"yMax\": 422,\r\n \"ha\": 154,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 531\r\n }\r\n },\r\n \"generatedOn\": \"2020-11-01T21:35:39.674Z\"\r\n};","export const TimesFont = {\r\n smufl: false,\r\n name: \"Times New Roman\",\r\n spacing: 50,\r\n Description: 'Built-in serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: true,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 49,\r\n \"xMax\": 975,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"1\": {\r\n \"xMin\": 227,\r\n \"xMax\": 811,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 227,\r\n \"advanceWidth\": 1024\r\n },\r\n \"2\": {\r\n \"xMin\": 61,\r\n \"xMax\": 965,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \"3\": {\r\n \"xMin\": 88,\r\n \"xMax\": 883,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1024\r\n },\r\n \"4\": {\r\n \"xMin\": 25,\r\n \"xMax\": 967,\r\n \"yMin\": 0,\r\n \"yMax\": 1384,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1024\r\n },\r\n \"5\": {\r\n \"xMin\": 66,\r\n \"xMax\": 898,\r\n \"yMin\": -27,\r\n \"yMax\": 1409,\r\n \"ha\": 1436,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1024\r\n },\r\n \"6\": {\r\n \"xMin\": 70,\r\n \"xMax\": 958,\r\n \"yMin\": -27,\r\n \"yMax\": 1401,\r\n \"ha\": 1428,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1024\r\n },\r\n \"7\": {\r\n \"xMin\": 41,\r\n \"xMax\": 920,\r\n \"yMin\": -16,\r\n \"yMax\": 1356,\r\n \"ha\": 1372,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1024\r\n },\r\n \"8\": {\r\n \"xMin\": 115,\r\n \"xMax\": 911,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 1024\r\n },\r\n \"9\": {\r\n \"xMin\": 61,\r\n \"xMax\": 940,\r\n \"yMin\": -41,\r\n \"yMax\": 1383,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"!\": {\r\n \"xMin\": 266,\r\n \"xMax\": 488,\r\n \"yMin\": -22,\r\n \"yMax\": 1383,\r\n \"ha\": 1405,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 157.2000021972655,\r\n \"xMax\": 678.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 157,\r\n \"advanceWidth\": 836\r\n },\r\n \"#\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1016,\r\n \"yMin\": -1,\r\n \"yMax\": 1356,\r\n \"ha\": 1357,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"$\": {\r\n \"xMin\": 90,\r\n \"xMax\": 936,\r\n \"yMin\": -180,\r\n \"yMax\": 1492,\r\n \"ha\": 1672,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1024\r\n },\r\n \"%\": {\r\n \"xMin\": 125,\r\n \"xMax\": 1581,\r\n \"yMin\": -30,\r\n \"yMax\": 1388,\r\n \"ha\": 1418,\r\n \"leftSideBearing\": 125,\r\n \"advanceWidth\": 1706\r\n },\r\n \"&\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1536,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1593\r\n },\r\n \"'\": {\r\n \"xMin\": 97.20000219726548,\r\n \"xMax\": 273.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 369\r\n },\r\n \"(\": {\r\n \"xMin\": 98,\r\n \"xMax\": 623,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 59,\r\n \"xMax\": 584,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 137.96078522291893,\r\n \"xMax\": 886.039214777081,\r\n \"yMin\": 543,\r\n \"yMax\": 1383,\r\n \"ha\": 840,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 1024\r\n },\r\n \"+\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 2,\r\n \"yMax\": 1034,\r\n \"ha\": 1032,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \",\": {\r\n \"xMin\": 115,\r\n \"xMax\": 399,\r\n \"yMin\": -291,\r\n \"yMax\": 208,\r\n \"ha\": 499,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 512\r\n },\r\n \"-\": {\r\n \"xMin\": 80,\r\n \"xMax\": 584,\r\n \"yMin\": 396,\r\n \"yMax\": 525,\r\n \"ha\": 129,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 143,\r\n \"xMax\": 371,\r\n \"yMin\": -22,\r\n \"yMax\": 205,\r\n \"ha\": 227,\r\n \"leftSideBearing\": 143,\r\n \"advanceWidth\": 512\r\n },\r\n \"/\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 166,\r\n \"xMax\": 394,\r\n \"yMin\": -22,\r\n \"yMax\": 943,\r\n \"ha\": 965,\r\n \"leftSideBearing\": 166,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 164,\r\n \"xMax\": 448,\r\n \"yMin\": -290,\r\n \"yMax\": 943,\r\n \"ha\": 1233,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"=\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 246,\r\n \"yMax\": 791,\r\n \"ha\": 545,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"?\": {\r\n \"xMin\": 139,\r\n \"xMax\": 848,\r\n \"yMin\": -15,\r\n \"yMax\": 1383,\r\n \"ha\": 1398,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 909\r\n },\r\n \"@\": {\r\n \"xMin\": 238,\r\n \"xMax\": 1657,\r\n \"yMin\": -29,\r\n \"yMax\": 1386,\r\n \"ha\": 1415,\r\n \"leftSideBearing\": 238,\r\n \"advanceWidth\": 1886\r\n },\r\n \"A\": {\r\n \"xMin\": 31,\r\n \"xMax\": 1445,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 1479\r\n },\r\n \"B\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1296,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1366\r\n },\r\n \"D\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1403,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"F\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1119,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1139\r\n },\r\n \"G\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1452,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1479\r\n },\r\n \"H\": {\r\n \"xMin\": 39,\r\n \"xMax\": 1438,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 37,\r\n \"xMax\": 642,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 682\r\n },\r\n \"J\": {\r\n \"xMin\": 20,\r\n \"xMax\": 758,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 797\r\n },\r\n \"K\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1479,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"L\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1224,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"M\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1768,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1821\r\n },\r\n \"N\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1450,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1409,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"P\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1110,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1139\r\n },\r\n \"Q\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1435,\r\n \"yMin\": -364.28571588721996,\r\n \"yMax\": 1383,\r\n \"ha\": 1747.28571588722,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"R\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1347,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"S\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1006,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"T\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 29,\r\n \"xMax\": 1444,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1428,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"W\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1906,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 20,\r\n \"xMax\": 1449,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Y\": {\r\n \"xMin\": 45,\r\n \"xMax\": 1441,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Z\": {\r\n \"xMin\": 18,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 180,\r\n \"xMax\": 612,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\\\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 70,\r\n \"xMax\": 502,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 682\r\n },\r\n \"^\": {\r\n \"xMin\": 49,\r\n \"xMax\": 914,\r\n \"yMin\": 608,\r\n \"yMax\": 1355,\r\n \"ha\": 747,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": 0,\r\n \"xMax\": 1024,\r\n \"yMin\": -255,\r\n \"yMax\": -153,\r\n \"ha\": 102,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 1024\r\n },\r\n \"`\": {\r\n \"xMin\": 39,\r\n \"xMax\": 499,\r\n \"yMin\": 1037,\r\n \"yMax\": 1392.509803639748,\r\n \"ha\": 355.50980363974804,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 76,\r\n \"xMax\": 905,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 909\r\n },\r\n \"b\": {\r\n \"xMin\": 6,\r\n \"xMax\": 958,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1024\r\n },\r\n \"c\": {\r\n \"xMin\": 51,\r\n \"xMax\": 843,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"d\": {\r\n \"xMin\": 55,\r\n \"xMax\": 1006,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 1024\r\n },\r\n \"e\": {\r\n \"xMin\": 51,\r\n \"xMax\": 868,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"f\": {\r\n \"xMin\": 41,\r\n \"xMax\": 783,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 682\r\n },\r\n \"g\": {\r\n \"xMin\": 57,\r\n \"xMax\": 963,\r\n \"yMin\": -446,\r\n \"yMax\": 942,\r\n \"ha\": 1388,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1024\r\n },\r\n \"h\": {\r\n \"xMin\": 18,\r\n \"xMax\": 997,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"i\": {\r\n \"xMin\": 33,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 569\r\n },\r\n \"j\": {\r\n \"xMin\": -142,\r\n \"xMax\": 397,\r\n \"yMin\": -446,\r\n \"yMax\": 1399,\r\n \"ha\": 1845,\r\n \"leftSideBearing\": -142,\r\n \"advanceWidth\": 569\r\n },\r\n \"k\": {\r\n \"xMin\": 14,\r\n \"xMax\": 1029,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 39,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1587,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1593\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 993,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"o\": {\r\n \"xMin\": 59,\r\n \"xMax\": 963,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 1024\r\n },\r\n \"p\": {\r\n \"xMin\": 10,\r\n \"xMax\": 964,\r\n \"yMin\": -443,\r\n \"yMax\": 944,\r\n \"ha\": 1387,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"q\": {\r\n \"xMin\": 49,\r\n \"xMax\": 999,\r\n \"yMin\": -443,\r\n \"yMax\": 942.0135137169275,\r\n \"ha\": 1385.0135137169275,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"r\": {\r\n \"xMin\": 10,\r\n \"xMax\": 685,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 713,\r\n \"yMin\": -20,\r\n \"yMax\": 942.0263161804552,\r\n \"ha\": 962.0263161804552,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 797\r\n },\r\n \"t\": {\r\n \"xMin\": 27,\r\n \"xMax\": 572,\r\n \"yMin\": -18,\r\n \"yMax\": 1186,\r\n \"ha\": 1204,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 18,\r\n \"xMax\": 981,\r\n \"yMin\": -21,\r\n \"yMax\": 921,\r\n \"ha\": 942,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"v\": {\r\n \"xMin\": 39,\r\n \"xMax\": 976,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 43,\r\n \"xMax\": 1423,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 35,\r\n \"xMax\": 989,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 29,\r\n \"xMax\": 976,\r\n \"yMin\": -445,\r\n \"yMax\": 921,\r\n \"ha\": 1366,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 55,\r\n \"xMax\": 855,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 909\r\n },\r\n \"{\": {\r\n \"xMin\": 205,\r\n \"xMax\": 717,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 205,\r\n \"advanceWidth\": 983\r\n },\r\n \"|\": {\r\n \"xMin\": 137,\r\n \"xMax\": 273,\r\n \"yMin\": -512,\r\n \"yMax\": 1535,\r\n \"ha\": 2047,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 410\r\n },\r\n \"}\": {\r\n \"xMin\": 266,\r\n \"xMax\": 778,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 983\r\n },\r\n \"~\": {\r\n \"xMin\": 82,\r\n \"xMax\": 1028,\r\n \"yMin\": 380,\r\n \"yMax\": 666,\r\n \"ha\": 286,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1108\r\n }\r\n },\r\n \"fontFamily\": \"Times\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T19:03:12.514Z\"\r\n};","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class ArticulationButtons extends SuiButton {\r\n static get articulationIdMap(): Record {\r\n return {\r\n accentButton: SmoArticulation.articulations.accent,\r\n tenutoButton: SmoArticulation.articulations.tenuto,\r\n staccatoButton: SmoArticulation.articulations.staccato,\r\n marcatoButton: SmoArticulation.articulations.marcato,\r\n pizzicatoButton: SmoArticulation.articulations.pizzicato,\r\n fermataButton: SmoArticulation.articulations.fermata,\r\n mordentButton: SmoOrnament.ornaments.mordent,\r\n mordentInvertedButton: SmoOrnament.ornaments.mordentInverted,\r\n trillButton: SmoOrnament.ornaments.trill,\r\n scoopButton: SmoOrnament.ornaments.scoop,\r\n dropButton: SmoOrnament.ornaments.fall_short,\r\n dropLongButton: SmoOrnament.ornaments.dropLong,\r\n doitButton: SmoOrnament.ornaments.doit,\r\n doitLongButton: SmoOrnament.ornaments.doitLong,\r\n flipButton: SmoOrnament.ornaments.flip,\r\n smearButton: SmoOrnament.ornaments.smear\r\n };\r\n }\r\n static get constructors(): Record {\r\n return {\r\n accentButton: 'SmoArticulation',\r\n tenutoButton: 'SmoArticulation',\r\n staccatoButton: 'SmoArticulation',\r\n marcatoButton: 'SmoArticulation',\r\n pizzicatoButton: 'SmoArticulation',\r\n fermataButton: 'SmoArticulation',\r\n mordentButton: 'SmoOrnament',\r\n mordentInvertedButton: 'SmoOrnament',\r\n trillButton: 'SmoOrnament',\r\n scoopButton: 'SmoOrnament',\r\n dropButton: 'SmoOrnament',\r\n dropLongButton: 'SmoOrnament',\r\n doitButton: 'SmoOrnament',\r\n doitLongButton: 'SmoOrnament',\r\n flipButton: 'SmoOrnament',\r\n smearButton: 'SmoOrnament'\r\n };\r\n }\r\n articulation: string;\r\n ctor: string;\r\n showState: boolean = false;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.articulation = ArticulationButtons.articulationIdMap[this.buttonData.id];\r\n this.ctor = ArticulationButtons.constructors[this.buttonData.id];\r\n }\r\n _toggleArticulation() {\r\n this.showState = !this.showState;\r\n this.view.toggleArticulation(this.articulation, this.ctor);\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleArticulation', null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class BeamButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n operation() {\r\n if (this.buttonData.id === 'breakBeam') {\r\n this.view.toggleBeamGroup();\r\n } else if (this.buttonData.id === 'beamSelections') {\r\n this.view.beamSelections();\r\n } else if (this.buttonData.id === 'toggleBeamDirection') {\r\n this.view.toggleBeamDirection();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.operation();\r\n });\r\n }\r\n }","import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\n\r\n/**\r\n * Button actions are one of the following. \r\n * - collapse... buttons are used to expand/collapse button groups in a ribbon.\r\n * all buttons with these classes have 'ctor' constructor, and perform actions based on \r\n * their bind method\r\n * - menu brings up a modal menu with class 'ctor'\r\n * - modal brings up a modal dialog with class 'ctor'\r\n * - collapseChildMenu brings up a modal menu, and is also collapsable.\r\n */\r\nexport type ButtonAction = 'menu' | 'modal' | 'collapseChild' | 'collapseChildMenu' | 'collapseParent' | 'collapseGrandchild' | 'collapseMore';\r\n/**\r\n * structure of a button object.\r\n * @param leftText - can be used in place of an icon for display\r\n * @param rightText - usually used to represent a keyboard shortcut\r\n * @param classes - to control button display\r\n * @param icon - icon for the button face\r\n * @param action - indicates to the button the action to perform\r\n * @param ctor - the constructor of the button object\r\n * @param group - the logical group, used to group the ribbon buttons\r\n * @param id - unique ID for DOM selector\r\n * @param dataElements - can be used to give buttons in a group basic parameters\r\n */\r\nexport interface ButtonDefinition {\r\n leftText: string,\r\n rightText: string,\r\n classes: string,\r\n icon: string,\r\n action: ButtonAction,\r\n ctor: string,\r\n group: string,\r\n id: string\r\n dataElements?: {\r\n interval: string,\r\n direction: string\r\n }\r\n }\r\n \r\n// Button labels are translatable \r\nexport interface ButtonLabel {\r\n buttonId: string,\r\n buttonText: string\r\n}\r\n\r\n// Buttons perform any variety of functions, so they need access to all the rendering logic\r\n// as well as all the event sources.\r\n// Sometimes they invoke menus which invoke modals, etc.\r\nexport interface SuiButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n }\r\n export abstract class SuiButton {\r\n buttonId: string;\r\n buttonElement: string;\r\n view: SuiScoreViewOperations;\r\n buttonData: ButtonDefinition;\r\n eventSource: BrowserEventSource;\r\n menus: SuiMenuManager;\r\n completeNotifier: CompleteNotifier | null;\r\n constructor(params: SuiButtonParams) {\r\n this.buttonId = params.buttonId;\r\n this.buttonElement = params.buttonElement;\r\n this.view = params.view;\r\n this.buttonData = params.buttonData;\r\n this.eventSource = params.eventSource;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n }\r\n abstract bind(): void;\r\n }\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class ChordButtons extends SuiButton {\r\n interval: number;\r\n direction: number;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.interval = parseInt($(this.buttonElement).attr('data-interval'), 10);\r\n this.direction = parseInt($(this.buttonElement).attr('data-direction'), 10);\r\n }\r\n collapseChord() {\r\n this.view.collapseChord();\r\n }\r\n setInterval() {\r\n this.view.setInterval(this.interval * this.direction);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n if ($(this.buttonElement).attr('id') === 'CollapseChordButton') {\r\n this.collapseChord();\r\n return;\r\n }\r\n this.setInterval();\r\n });\r\n }\r\n}","import { ButtonDefinition, SuiButton, SuiButtonParams } from './button';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiMenuParams } from '../menus/menu';\r\ndeclare var $: any;\r\n\r\n\r\nexport interface SuiCollapsableButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n buttons: ButtonDefinition[]\r\n}\r\n\r\nexport function buttonIsCollapsible(action: string): boolean {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n}\r\n\r\nexport function buttonIsBindable(action: string): boolean {\r\n return ['collapseChildMenu', 'menu', 'modal'].indexOf(action) >= 0;\r\n}\r\nexport class CollapseRibbonControl extends SuiButton {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'keyCommands', 'controller', 'view', 'menus', 'buttonData', 'buttonElement',\r\n 'eventSource'];\r\n }\r\n childButtons: ButtonDefinition[];\r\n constructor(parameters: SuiCollapsableButtonParams) {\r\n super(parameters);\r\n smoSerialize.filteredMerge(CollapseRibbonControl.paramArray, parameters, this);\r\n this.childButtons = parameters.buttons.filter((cb) =>\r\n cb.group === this.buttonData.group &&\r\n buttonIsCollapsible(cb.action)\r\n );\r\n }\r\n _toggleExpand() {\r\n this.childButtons.forEach((cb) => {\r\n const el = $('#' + cb.id);\r\n $(el).toggleClass('collapsed');\r\n $(el).toggleClass('expanded');\r\n });\r\n\r\n $(this.buttonElement).closest('div').toggleClass('expanded');\r\n $(this.buttonElement).toggleClass('expandedChildren');\r\n if ($(this.buttonElement).hasClass('expandedChildren')) {\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).text('');\r\n $(leftSpan).removeClass(this.buttonData.icon);\r\n $(this.buttonElement).addClass('icon icon-circle-left');\r\n } else {\r\n $(this.buttonElement).removeClass('icon-circle-left');\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).addClass(this.buttonData.icon);\r\n $(leftSpan).text(this.buttonData.leftText);\r\n }\r\n // Expand may change music dom, redraw\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n bind() {\r\n $(this.buttonElement).closest('div').addClass('collapseContainer');\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleExpand', null);\r\n this.childButtons.forEach((cb) => {\r\n const ctor = eval('globalThis.Smo.' + cb.ctor);\r\n if ((typeof (ctor) === 'function') && this.completeNotifier) {\r\n const el = $('#' + cb.id);\r\n const params: SuiButtonParams = {\r\n ctor: cb.ctor,\r\n buttonId: cb.id,\r\n buttonData: cb,\r\n buttonElement: el,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n eventSource: this.eventSource,\r\n menus: this.menus\r\n }\r\n const btn = new ctor(params);\r\n if (typeof (btn.bind) === 'function') {\r\n btn.bind();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n// ## ExtendedCollapseParent\r\n// Muse-style '...' buttons for less-common operations\r\nexport class ExtendedCollapseParent extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n $(this.buttonElement).closest('.collapseContainer').toggleClass('expanded-more');\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\ndeclare var $: any;\r\n\r\n/**\r\n * These are the quick-buttons that show up on the left of the button ribbon.\r\n * @category SuiButton\r\n */\r\nexport class DisplaySettings extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n if (this.buttonData.id === 'selectPart') {\r\n this.eventSource.bindScoreChangeHandler(this, 'handleScoreChange');\r\n this.enablePartSelection();\r\n }\r\n }\r\n enablePartSelection() {\r\n const partMap = this.view.getPartMap();\r\n const disable = partMap.keys.length < 1;\r\n $(this.buttonElement[0]).prop('disabled', disable);\r\n }\r\n handleScoreChange(ev: any) {\r\n if (this.view.isPartExposed()) {\r\n this.buttonData.rightText = this.view.score.staves[0].partInfo.partName;\r\n } else {\r\n this.buttonData.rightText = 'Select Part';\r\n }\r\n $(this.buttonElement[0]).find('.ribbon-button-hotkey').text(this.buttonData.rightText);\r\n this.enablePartSelection();\r\n }\r\n\r\n refresh() {\r\n this.view.refreshViewport();\r\n }\r\n zoomout() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale *= 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n zoomin() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale = globalLayout.zoomScale / 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n playButton2() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton2() {\r\n this.view.stopPlayer();\r\n }\r\n async selectPart() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n await this.view.renderPromise();\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n this.menus.createMenu('SuiPartSelectionMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class DurationButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.buttonData = parameters.buttonData;\r\n }\r\n setDuration() {\r\n if (this.buttonData.id === 'GrowDuration') {\r\n this.view.batchDurationOperation('doubleDuration');\r\n } else if (this.buttonData.id === 'LessDuration') {\r\n this.view.batchDurationOperation('halveDuration');\r\n } else if (this.buttonData.id === 'GrowDurationDot') {\r\n this.view.batchDurationOperation('dotDuration');\r\n } else if (this.buttonData.id === 'LessDurationDot') {\r\n this.view.batchDurationOperation('undotDuration');\r\n } else if (this.buttonData.id === 'TripletButton') {\r\n this.view.makeTuplet(3);\r\n } else if (this.buttonData.id === 'QuintupletButton') {\r\n this.view.makeTuplet(5);\r\n } else if (this.buttonData.id === 'SeptupletButton') {\r\n this.view.makeTuplet(7);\r\n } else if (this.buttonData.id === 'NoTupletButton') {\r\n this.view.unmakeTuplet();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setDuration();\r\n });\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoBarline, SmoRepeatSymbol } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class MeasureButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n endRepeat() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endRepeat);\r\n }\r\n startRepeat() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.startRepeat);\r\n }\r\n singleBarStart() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.singleBar);\r\n }\r\n singleBarEnd() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.singleBar);\r\n }\r\n doubleBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.doubleBar);\r\n }\r\n endBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endBar);\r\n }\r\n coda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Coda);\r\n }\r\n toCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.ToCoda);\r\n }\r\n segno() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Segno);\r\n }\r\n dsAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlCoda);\r\n }\r\n dcAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlCoda);\r\n }\r\n dsAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlFine);\r\n }\r\n dcAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlFine);\r\n }\r\n fine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Fine);\r\n }\r\n nthEnding() {\r\n this.view.addEnding();\r\n }\r\n handleEvent(event: any, method: string) {\r\n (this as any)[method]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, 'handleEvent', this.buttonData.id);\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SuiOscillator } from '../../render/audio/oscillator';\r\ndeclare var $: any;\r\n\r\nexport class MicrotoneButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n applyButton(el: ButtonDefinition) {\r\n const defs = SmoMicrotone.defaults;\r\n defs.tone = el.id;\r\n const tn = new SmoMicrotone(defs);\r\n this.view.addRemoveMicrotone(tn);\r\n SuiOscillator.playSelectionNow(this.view.tracker.selections[0], this.view.score, 1);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.applyButton(this.buttonData);\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class NavigationButtons extends SuiButton {\r\n static get directionsTrackerMap(): Record {\r\n return {\r\n navLeftButton: 'moveSelectionLeft',\r\n navRightButton: 'moveSelectionRight',\r\n navUpButton: 'moveSelectionUp',\r\n navDownButton: 'moveSelectionDown',\r\n navFastForward: 'moveSelectionRightMeasure',\r\n navRewind: 'moveSelectionLeftMeasure',\r\n navGrowLeft: 'growSelectionLeft',\r\n navGrowRight: 'growSelectionRight'\r\n };\r\n }\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n _moveTracker() {\r\n (this.view.tracker as any)[NavigationButtons.directionsTrackerMap[this.buttonData.id]]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_moveTracker', null);\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { IsPitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport class NoteButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n setPitch() {\r\n if (this.buttonData.id === 'UpNoteButton') {\r\n this.view.transposeSelections(1);\r\n } else if (this.buttonData.id === 'DownNoteButton') {\r\n this.view.transposeSelections(-1);\r\n } else if (this.buttonData.id === 'UpOctaveButton') {\r\n this.view.transposeSelections(12);\r\n } else if (this.buttonData.id === 'DownOctaveButton') {\r\n this.view.transposeSelections(-12);\r\n } else if (this.buttonData.id === 'ToggleAccidental') {\r\n this.view.toggleEnharmonic();\r\n } else if (this.buttonData.id === 'ToggleCourtesy') {\r\n this.view.toggleCourtesyAccidentals();\r\n } else if (this.buttonData.id === 'ToggleRestButton') {\r\n this.view.makeRest();\r\n } else if (this.buttonData.id === 'ToggleSlashButton') {\r\n this.view.toggleSlash();\r\n } else if (this.buttonData.id === 'AddGraceNote') {\r\n this.view.addGraceNote();\r\n } else if (this.buttonData.id === 'SlashGraceNote') {\r\n this.view.slashGraceNotes();\r\n } else if (this.buttonData.id === 'RemoveGraceNote') {\r\n this.view.removeGraceNote();\r\n } else if (this.buttonData.id === 'XNoteHead') {\r\n this.view.setNoteHead('x2');\r\n } else if (this.buttonData.id === 'TriUpNoteHead') {\r\n this.view.setNoteHead('T2');\r\n } else if (this.buttonData.id === 'CircleXNoteHead') {\r\n this.view.setNoteHead('X3');\r\n } else if (this.buttonData.id === 'DiamondNoteHead') {\r\n this.view.setNoteHead('D2');\r\n } else {\r\n if (IsPitchLetter(this.buttonData.rightText)) {\r\n this.view.setPitch(this.buttonData.rightText);\r\n }\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setPitch();\r\n });\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SuiAudioPlayer } from '../../render/audio/player';\r\ndeclare var $: any;\r\n\r\nexport class PlayerButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n playButton() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton() {\r\n this.view.stopPlayer();\r\n }\r\n pauseButton() {\r\n this.view.pausePlayer();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, getDomContainer } from '../../common/htmlHelpers';\r\nimport { ButtonDefinition, ButtonAction } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier, RibbonLayout } from '../common';\r\nexport { RibbonLayout } from '../common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { SuiLibraryDialog } from '../dialogs/library';\r\nimport { SuiTempoDialog } from '../dialogs/tempo';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { ButtonLabel } from './button';\r\nimport { SuiPiano } from '../../render/sui/piano';\r\nimport { CollapseRibbonControl } from './collapsable';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiHelp } from '../help';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SuiModalButtonTypes = 'SuiLibraryDialog' | 'SuiTempoDialog' | 'SuiInstrumentDialog';\r\nexport var SuiModalButtonStrings = ['SuiLibraryDialog', 'SuiTempoDialog', 'SuiInstrumentDialog'];\r\nexport function isModalButtonType(but: string | SuiModalButtonTypes): but is SuiModalButtonTypes {\r\n return SuiModalButtonStrings.indexOf(but) >= 0;\r\n}\r\n\r\n/**\r\n * Parameters for creating the global button ribbon object. The button ribbon supports a \r\n * button panel in 'top' and 'left' areas, with support for R-to-L languages. Button groups \r\n * are collapsible. The content of ribbonButtons determines which buttons show up. \r\n * ribbon layout determines which show up top vs. left\r\n * @param {BrowserEventSource} eventSource - buttons will use this to bind click events\r\n * @param {CompleteNotifier} completeNotifier - buttons that bring up menus and dialogs will pass this to the dialogs\r\n * @param {SuiTracker} tracker - some buttons act on the current selection\r\n * @param {SuiMenuManager} menus - some buttons invoke a menu\r\n * @param {ButtonDefinition[]} - the buttons\r\n * @param {RibbonLayout} ribbons - where the buttons appear\r\n * @see {ButtonDefinition} for how to create/modify buttons\r\n * @see {defaultRibbonLayout} for buttons supported from the demo application\r\n */\r\nexport interface SuiRibbonParams {\r\n config: SmoUiConfiguration\r\n eventSource: BrowserEventSource,\r\n view: SuiScoreViewOperations,\r\n completeNotifier: CompleteNotifier,\r\n tracker: SuiTracker,\r\n menus: SuiMenuManager,\r\n ribbonButtons: ButtonDefinition[],\r\n ribbons: RibbonLayout\r\n}\r\n// ## RibbonButtons\r\n// Render the ribbon buttons based on group, function, and underlying UI handler.\r\n// Also handles UI events.\r\n// ### RibbonButton methods\r\n// ---\r\nexport class RibbonButtons {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'ribbons', 'keyCommands', 'controller', 'menus', 'eventSource', 'view'];\r\n }\r\n static _buttonHtml(containerClass: string, buttonId: string, buttonClass: string, buttonText: string, buttonIcon: string, buttonKey: string) {\r\n const b = buildDom;\r\n const r = b('div').classes(containerClass).append(b('button').attr('id', buttonId).classes(buttonClass).append(\r\n b('span').classes('left-text').append(\r\n b('span').classes('text-span').text(buttonText)).append(\r\n b('span').classes('ribbon-button-text icon ' + buttonIcon))).append(\r\n b('span').classes('ribbon-button-hotkey').text(buttonKey)));\r\n return r.dom();\r\n }\r\n\r\n static translateButtons: ButtonLabel[] = [];\r\n controller: CompleteNotifier;\r\n config: SmoUiConfiguration;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n menus: SuiMenuManager;\r\n ribbons: RibbonLayout;\r\n ribbonButtons: ButtonDefinition[];\r\n collapsables: CollapseRibbonControl[] = [];\r\n collapseChildren: any[] = [];\r\n\r\n constructor(params: SuiRibbonParams) {\r\n this.controller = params.completeNotifier;\r\n this.config = params.config;\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.menus = params.menus;\r\n this.ribbonButtons = params.ribbonButtons;\r\n this.ribbons = params.ribbons;\r\n this.collapsables = [];\r\n this.collapseChildren = [];\r\n }\r\n async _executeButtonModal(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (isModalButtonType(buttonData.ctor)) {\r\n const params = {\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n view: this.view,\r\n ctor: buttonData.ctor,\r\n id: buttonData.id,\r\n startPromise: null,\r\n tracker: this.view.tracker\r\n };\r\n if (buttonData.ctor === 'SuiInstrumentDialog') {\r\n createAndDisplayDialog(SuiInstrumentDialog, params);\r\n } else if (buttonData.ctor === 'SuiLibraryDialog') {\r\n await SuiLibraryDialog.createAndDisplay(params, this.config);\r\n } else {\r\n createAndDisplayDialog(SuiTempoDialog, params);\r\n }\r\n } else if (buttonData.ctor === 'helpModal') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n _executeButtonMenu(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.menus.slashMenuMode(this.controller);\r\n this.menus.createMenu(buttonData.ctor);\r\n }\r\n\r\n async _executeButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (buttonData.action === 'modal') {\r\n this._executeButtonModal(buttonElement, buttonData);\r\n return;\r\n }\r\n if (buttonData.action === 'menu' || buttonData.action === 'collapseChildMenu') {\r\n this._executeButtonMenu(buttonElement, buttonData);\r\n }\r\n }\r\n\r\n _bindButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n _createCollapsibleButtonGroups(selector: string | HTMLElement) {\r\n let containerClass: string = '';\r\n // Now all the button elements have been bound. Join child and parent buttons\r\n // For all the children of a button group, add it to the parent group\r\n this.collapseChildren.forEach((b) => {\r\n containerClass = 'ribbonButtonContainer';\r\n if (b.action === 'collapseGrandchild') {\r\n containerClass = 'ribbonButtonContainerMore';\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml(\r\n containerClass, b.id, b.classes, b.leftText, b.icon, b.rightText);\r\n if (b.dataElements) {\r\n const bkeys = Object.keys(b.dataElements);\r\n bkeys.forEach((bkey) => {\r\n var de = b.dataElements[bkey];\r\n $(buttonHtml).find('button').attr('data-' + bkey, de);\r\n });\r\n }\r\n // Bind the child button actions\r\n const parent = $(selector).find('.collapseContainer[data-group=\"' + b.group + '\"]');\r\n $(parent).append(buttonHtml);\r\n const el = $(selector).find('#' + b.id);\r\n this._bindButton(el, b);\r\n });\r\n\r\n this.collapsables.forEach((cb) => {\r\n // Bind the events of the parent button\r\n cb.bind();\r\n });\r\n }\r\n\r\n static isCollapsible(action: ButtonAction) {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n }\r\n\r\n // ### _createButtonHtml\r\n // For each button, create the html and bind the events based on\r\n // the button's configured action.\r\n _createRibbonHtml(buttonAr: string[], selector: string | HTMLElement) {\r\n let buttonClass = '';\r\n buttonAr.forEach((buttonId) => {\r\n const buttonData = this.ribbonButtons.find((e) =>\r\n e.id === buttonId\r\n );\r\n if (buttonData) {\r\n if (buttonData.leftText) {\r\n RibbonButtons.translateButtons.push({ buttonId: buttonData.id, buttonText: buttonData.leftText });\r\n }\r\n // collapse child is hidden until the parent button is selected, exposing the button group\r\n if (RibbonButtons.isCollapsible(buttonData.action)) {\r\n this.collapseChildren.push(buttonData);\r\n }\r\n if (buttonData.action !== 'collapseChild') {\r\n // else the button has a specific action, such as a menu or dialog, or a parent button\r\n // for translation, add the menu name to the button class\r\n buttonClass = buttonData.classes;\r\n if (buttonData.action === 'menu' || buttonData.action === 'modal') {\r\n buttonClass += ' ' + buttonData.ctor;\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml('ribbonButtonContainer',\r\n buttonData.id, buttonClass, buttonData.leftText, buttonData.icon, buttonData.rightText);\r\n $(buttonHtml).attr('data-group', buttonData.group);\r\n $(selector).append(buttonHtml);\r\n const buttonElement = $('#' + buttonData.id);\r\n // If this is a collabsable button, create it, otherwise bind its execute function.\r\n if (buttonData.action === 'collapseParent') {\r\n $(buttonHtml).addClass('collapseContainer');\r\n // collapseParent\r\n this.collapsables.push(new CollapseRibbonControl({\r\n ctor: buttonData.ctor,\r\n buttons: this.ribbonButtons,\r\n view: this.view,\r\n menus: this.menus,\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n buttonId: buttonData.id,\r\n buttonElement,\r\n buttonData\r\n }));\r\n } else {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n addButton(button: ButtonDefinition, parentElement: string | HTMLElement) {\r\n this.ribbonButtons.push(button);\r\n this.createRibbon([button.id], parentElement);\r\n }\r\n\r\n createRibbon(buttonDataArray: string[], parentElement: string | HTMLElement) {\r\n this._createRibbonHtml(buttonDataArray, parentElement);\r\n this._createCollapsibleButtonGroups(parentElement);\r\n }\r\n\r\n display() {\r\n if (this.config.leftControls) {\r\n const leftControl = getDomContainer(this.config.leftControls);\r\n if (leftControl) {\r\n $(leftControl).html('');\r\n const lbuttons = this.ribbons.left;\r\n this.createRibbon(lbuttons, leftControl);\r\n }\r\n }\r\n if (this.config.topControls) {\r\n const topControl = getDomContainer(this.config.topControls);\r\n if (topControl) {\r\n const tbuttons = this.ribbons.top;\r\n this.createRibbon(tbuttons, topControl); \r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoInstrument } from '../../smo/data/staffModifiers';\r\nimport { Clef } from '../../smo/data/common';\r\n\r\ndeclare var $: any;\r\n\r\nexport class StaveButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n addClef(clef: Clef, clefName: string) {\r\n var instrument: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.instrumentName = clefName;\r\n instrument.keyOffset = 0;\r\n instrument.clef = clef;\r\n this.view.changeInstrument(instrument, this.view.tracker.selections);\r\n }\r\n clefTreble() {\r\n this.addClef('treble', 'Treble Instrument');\r\n }\r\n clefBass() {\r\n this.addClef('bass', 'Bass Instrument');\r\n }\r\n clefAlto() {\r\n this.addClef('alto', 'Alto Instrument');\r\n }\r\n clefTenor() {\r\n this.addClef('tenor', 'Tenor Instrument');\r\n }\r\n clefPercussion() {\r\n this.addClef('percussion', 'Tenor Instrument');\r\n }\r\n _clefMove(index: number) {\r\n this.view.moveStaffUpDown(index);\r\n }\r\n clefMoveUp() {\r\n this._clefMove(-1);\r\n }\r\n clefMoveDown() {\r\n this._clefMove(1);\r\n }\r\n bind() {\r\n const self = this;\r\n $(this.buttonElement).off('click').on('click', () => {\r\n const id = self.buttonData.id;\r\n if (typeof ((this as any)[id]) === 'function') {\r\n (this as any)[id]();\r\n }\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SuiTextBlockDialog } from '../dialogs/textBlock';\r\nimport { SuiLyricDialog } from '../dialogs/lyric';\r\nimport { SuiChordChangeDialog } from '../dialogs/chordChange';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport class TextButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n lyrics() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getTrueLyrics();\r\n const lyric = lyrics.length > 0 ? lyrics[0] : null;\r\n\r\n createAndDisplayDialog(SuiLyricDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'lyricDialog',\r\n ctor: 'SuiLyricDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n // tracker, selection, controller\r\n }\r\n chordChanges() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getChords();\r\n const lyric = lyrics.length > 0 ? null : lyrics[0];\r\n createAndDisplayDialog(SuiChordChangeDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n }\r\n rehearsalMark() {\r\n this.view.toggleRehearsalMark();\r\n }\r\n _invokeMenu(cmd: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n this.menus.createMenu(cmd);\r\n }\r\n\r\n addTextMenu() {\r\n createAndDisplayDialog(SuiTextBlockDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: null\r\n });\r\n }\r\n addDynamicsMenu() {\r\n this._invokeMenu('SuiDynamicsMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class VoiceButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n doAction() {\r\n let voiceIx = 0;\r\n if (this.buttonData.id === 'V2Button') {\r\n voiceIx = 1;\r\n } else if (this.buttonData.id === 'V3Button') {\r\n voiceIx = 2;\r\n } else if (this.buttonData.id === 'V4Button') {\r\n voiceIx = 3;\r\n } else if (this.buttonData.id === 'VXButton') {\r\n this.view.depopulateVoice();\r\n return;\r\n }\r\n this.view.populateVoice(voiceIx);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.doAction();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /ui/dialog/adapter\r\n */\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { DialogDefinition, SuiDialogBase } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\n\r\n/**\r\n * An adapter is the glue logic between UI components and the score view.\r\n * An adapter consists mostly of accessors (get/set) for the component data. The \r\n * components have their initial values set from the adapter get, and changes to components\r\n * result in sets to the adapter. The adapter can then update the score.\r\n * For dialogs that use this pattern,\r\n * the dialog automatically creates the components and binds their values with the \r\n * adapter. \r\n * @method commit - called when OK button of dialog is clicked\r\n * @method cancel - called when cancel button of dialog is clicked\r\n * @method remove - optional. Called when 'remove' button is clicked, for artifacts like dynamics that can be removed.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentAdapter {\r\n view: SuiScoreViewOperations;\r\n constructor(view: SuiScoreViewOperations) {\r\n this.view = view;\r\n }\r\n abstract commit(): Promise;\r\n abstract cancel(): Promise;\r\n remove(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n };\r\n}\r\n\r\n/** \r\n * A dialog that uses the adapter pattern takes the adapter as argument.\r\n * Other than that it's the same as normal dialog parameters\r\n * The adapter type is a generic, so that the specific dialog can reference the \r\n * specific adapter class\r\n * @param ctor constructor for reflection\r\n * @param id ID for dom placement\r\n * @param tracker\r\n * @param completeNotifier UI component to notify when dialog is complete\r\n * @param startProise UI component that notifies us when to display\r\n * @param view\r\n * @param eventSource where to register for KB and mouse events\r\n * @param undoBuffer where to undo things we change\r\n * @param adapter an adapter which has getters and setters for all of the dialog components. The adapter should\r\n * read the values from the actual score, and update the score with the component values.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogAdapterParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer?: UndoBuffer,\r\n // definition: DialogDefinition,\r\n adapter: T\r\n}\r\n\r\n/**\r\n * SuiDialogAdapterBase is the base class for dialogs that use the adapter pattern\r\n * (almost all of them). \r\n * @typeParam T a class that implements the Adapter interface and fulfills the \r\n * adapter data contract, with getters and setters from the components\r\n * @category SuiDialog\r\n */\r\nexport class SuiDialogAdapterBase extends SuiDialogBase {\r\n adapter: T;\r\n constructor(def: DialogDefinition, params: SuiDialogAdapterParams) {\r\n super(def, params);\r\n this.adapter = params.adapter;\r\n }\r\n /**\r\n * Call the components bind() methods to activate them. Also, verify that each \r\n * adapter meets the contract with the components\r\n */\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n // do some runtime validation of the adapter\r\n if (typeof((this.adapter as any)[component.smoName]) === 'undefined') {\r\n throw ('Dialog ' + this.label + ' has component ' + component.smoName + ' but no setter in the adapter ');\r\n }\r\n component.bind();\r\n });\r\n }\r\n /**\r\n * Called before dialog is displayed.\r\n * components that interface (bind) with the adapter are called 'bound' components.\r\n * On initialize, update the component with the score value, as told by the adapter.\r\n */\r\n initialValue() {\r\n this.components.forEach((comp) => {\r\n (comp as any).setValue((this.adapter as any)[comp.smoName]);\r\n });\r\n }\r\n /**\r\n * When a component changes, it notifies the parent dialog. Usually, we just\r\n * proxy the call to the adapter. The specific dialog can override this method if \r\n * something in the UI needs to change as a result of the component state (e.g. \r\n * show or hide another component)\r\n */\r\n changed() {\r\n this.components.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.adapter as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n /**\r\n * If there is any 'saving' to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async commit(): Promise {\r\n await this.adapter.commit();\r\n }\r\n /**\r\n * If there is any undo or restore to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async cancel(): Promise {\r\n await this.adapter.cancel();\r\n }\r\n /**\r\n * For score artifacts that can be removed, \r\n */\r\n async remove() {\r\n await this.adapter.remove();\r\n }\r\n /**\r\n * Binds the main dialog buttons. For OK/Cancel/remove, the logic calls the appropriate \r\n * derived function, which calls the appropriate adapter method, then calls complete()\r\n * to restore the event handling loop to the application\r\n */\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.cancel();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.remove();\r\n this.complete();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiToggleComponent } from './components/toggle';\r\n\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Insert some number of measures\r\n * @category SuiDialog\r\n */\r\nexport class SuiInsertMeasures extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Insert Measures',\r\n elements:\r\n [{\r\n smoName: 'measureCount',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Measures to Insert'\r\n }, {\r\n smoName: 'append',\r\n control: 'SuiToggleComponent',\r\n label: 'Append to Selection'\r\n }],\r\n staticText: []\r\n };\r\n measure: SmoMeasure;\r\n selection: SmoSelection;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiInsertMeasures.dialogElements,\r\n parameters);\r\n this.selection = this.view.tracker.selections[0];\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n this.measure = measure;\r\n if (!this.startPromise) {\r\n this.startPromise = new Promise((resolve) => {\r\n resolve();\r\n });\r\n }\r\n }\r\n async commit() { \r\n await this.view.addMeasures(this.appendCtrl.getValue(), this.measureCountCtrl.getValue());\r\n }\r\n\r\n get measureCountCtrl(): SuiRockerComponent {\r\n return this.cmap.measureCountCtrl as SuiRockerComponent;\r\n }\r\n get appendCtrl(): SuiToggleComponent {\r\n return this.cmap.appendCtrl as SuiToggleComponent;\r\n }\r\n populateInitial() {\r\n this.measureCountCtrl.setValue(1);\r\n }\r\n // noop\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoArpeggio, SmoArpeggioType, isArpeggioType } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiArpeggioAdapter extends SuiComponentAdapter {\r\n arpeggio: SmoArpeggio;\r\n backup: SmoArpeggio;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.arpeggio = new SmoArpeggio({ type: 'none' });\r\n this.backup = new SmoArpeggio({ type: 'none' });\r\n const selections = view.tracker.selections;\r\n if (selections.length && selections[0].note) {\r\n if (selections[0].note.arpeggio) {\r\n this.arpeggio = new SmoArpeggio({ type: selections[0].note.arpeggio.typeString });\r\n }\r\n this.backup = new SmoArpeggio({ type: this.arpeggio.typeString });\r\n }\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addRemoveArpeggio(this.backup.typeString);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get arpeggioType() {\r\n return this.arpeggio.typeString;\r\n }\r\n set arpeggioType(value: SmoArpeggioType) {\r\n if (isArpeggioType(value)) {\r\n this.view.addRemoveArpeggio(value);\r\n this.changed = true;\r\n }\r\n }\r\n}\r\n/**\r\n * export const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n */\r\nexport class SuiScoreArpeggioDialog extends SuiDialogAdapterBase {\r\n /**\r\n * The template used to create the dialog components\r\n */\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Arpeggio', elements:\r\n [{\r\n smoName: 'arpeggioType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Arpeggio Type',\r\n options: [{\r\n value: 'directionless',\r\n label: 'Plain'\r\n }, {\r\n value: 'rasquedo_up',\r\n label: 'Rasquedo Up'\r\n }, {\r\n value: 'rasquedo_down',\r\n label: 'Rasquedo Down'\r\n }, {\r\n value: 'roll_up',\r\n label: 'Roll Up'\r\n }, {\r\n value: 'roll_down',\r\n label: 'Roll Down'\r\n }, {\r\n value: 'brush_up',\r\n label: 'Brush Up'\r\n }, {\r\n value: 'brush_down',\r\n label: 'Brush Down'\r\n }, { \r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreArpeggioDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiArpeggioAdapter(params.view);\r\n super(SuiScoreArpeggioDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPlayerSettings, SmoAudioPlayerType, IsOscillatorType } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiAudioSettingsAdapter extends SuiComponentAdapter {\r\n settings: SmoAudioPlayerSettings;\r\n backup: SmoAudioPlayerSettings;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.settings = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n this.backup = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n }\r\n get enableReverb(): boolean {\r\n return this.settings.reverbEnable;\r\n }\r\n set enableReverb(value: boolean) {\r\n this.settings.reverbEnable = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get playerType(): string {\r\n return this.settings.playerType;\r\n }\r\n set playerType(value: string) {\r\n if (value !== 'sampler') {\r\n this.settings.playerType = 'synthesizer';\r\n } else {\r\n this.settings.playerType = 'sampler';\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get waveform(): string {\r\n return this.settings.waveform;\r\n }\r\n set waveform(value: string) {\r\n if (IsOscillatorType(value)) {\r\n this.settings.waveform = value;\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDelay(): number {\r\n return this.settings.reverbDelay;\r\n }\r\n set reverbDelay(value: number) {\r\n this.settings.reverbDelay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDecay(): number {\r\n return this.settings.reverbDecay;\r\n } \r\n set reverbDecay(value: number) {\r\n this.settings.reverbDecay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n async cancel() {\r\n await this.view.updateAudioSettings(this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiAudioSettingsDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Audio Settings',\r\n elements: [{\r\n smoName: 'enableReverb',\r\n control: 'SuiToggleComponent',\r\n label: 'Enable Reverb'\r\n }, {\r\n smoName: 'playerType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Audio Playback Engine',\r\n options: [{\r\n value: 'sampler', label: 'Sampler'\r\n }, {\r\n value: 'synthesizer', label: 'Analog SoftSynth'\r\n }]\r\n }, {\r\n smoName: 'waveform',\r\n control: 'SuiDropdownComponent',\r\n label: 'Waveform (Synth only)',\r\n options: [{\r\n value: 'sine', label: 'Sine'\r\n }, {\r\n value: 'sawtooth', label: 'sawtooth'\r\n }, {\r\n value: 'square', label: 'square'\r\n }, {\r\n value: 'triangle', label: 'triangle'\r\n }, {\r\n value: 'custom', label: 'custom'\r\n }]\r\n }, {\r\n smoName: 'reverbDelay',\r\n control: 'SuiRockerComponent',\r\n label: 'Delay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }, {\r\n smoName: 'reverbDecay',\r\n control: 'SuiRockerComponent',\r\n label: 'Decay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiAudioSettingsAdapter(params.view);\r\n super(SuiAudioSettingsDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiChordComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport {KeyEvent } from '../../smo/data/common';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n/**\r\n * Dialog for running a chord change editing session.\r\n * @category SuiDialog\r\n */\r\nexport class SuiChordChangeDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Edit Chord Symbol', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Ordinality',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }]\r\n }, {\r\n smoName: 'translateY',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'chordEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiChordComponent',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'chordSymbol',\r\n defaultValue: '',\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Chord Symbol',\r\n startRow: true,\r\n options: [{\r\n value: 'csymDiminished',\r\n label: 'Dim'\r\n }, {\r\n value: 'csymHalfDiminished',\r\n label: 'Half dim'\r\n }, {\r\n value: 'csymDiagonalArrangementSlash',\r\n label: 'Slash'\r\n }, {\r\n value: 'csymMajorSeventh',\r\n label: 'Maj7'\r\n }]\r\n }, {\r\n smoName: 'textPosition',\r\n defaultValue: SuiInlineText.textTypes.normal,\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Text Position',\r\n startRow: true,\r\n options: [{\r\n value: SuiInlineText.textTypes.superScript,\r\n label: 'Superscript'\r\n }, {\r\n value: SuiInlineText.textTypes.subScript,\r\n label: 'Subscript'\r\n }, {\r\n value: SuiInlineText.textTypes.normal,\r\n label: 'Normal'\r\n }]\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'adjustWidth',\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: 'Adjust Note Width',\r\n options: []\r\n }],\r\n staticText: [\r\n { label: 'Edit Chord Symbol' },\r\n { undo: 'Undo Chord Symbols' },\r\n { doneEditing: 'Done Editing Chord Symbols' }\r\n ]\r\n };\r\n lyric: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiChordChangeDialog.dialogElements, parameters);\r\n parameters.ctor = 'SuiChordChangeDialog';\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n }\r\n get chordEditorCtrl(): SuiChordComponent {\r\n return this.cmap.chordEditorCtrl as SuiChordComponent;\r\n }\r\n get chordSymbolCtrl(): SuiDropdownComponent {\r\n return this.cmap.chordSymbolCtrl as SuiDropdownComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get textPositionCtrl(): SuiRockerComponent {\r\n return this.cmap.textPositionCtrl as SuiRockerComponent;\r\n }\r\n get adjustWidthCtrl(): SuiToggleComponent {\r\n return this.cmap.adjustWidthCtrl as SuiToggleComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n changed() {\r\n let val = '';\r\n if (this.chordSymbolCtrl.changeFlag && this.chordEditorCtrl.running) {\r\n val = '@' + this.chordSymbolCtrl.getValue() + '@';\r\n var kv:KeyEvent;\r\n /* type: string, shiftKey: boolean, ctrlKey: boolean, altKey: boolean, key: string, keyCode: string,\r\n code: string*/\r\n this.chordEditorCtrl.evKey({\r\n type: 'keydown',\r\n shiftKey: false,\r\n ctrlKey: false,\r\n altKey: false,\r\n key: val,\r\n code: val,\r\n event: null,\r\n keyCode: '0'\r\n });\r\n // Move focus outside the element so it doesn't intercept keys\r\n this.chordSymbolCtrl.unselect();\r\n }\r\n if (this.translateYCtrl.changeFlag) {\r\n if (this.lyric && this.selector) {\r\n this.lyric.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.lyric);\r\n }\r\n }\r\n if (this.textPositionCtrl.changeFlag) {\r\n this.chordEditorCtrl.setTextType(this.textPositionCtrl.getValue());\r\n $(this.textPositionCtrl._getInputElement())[0].selectedIndex = -1;\r\n $(this.textPositionCtrl._getInputElement()).blur();\r\n }\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setChordFont(fontInfo);\r\n }\r\n if (this.adjustWidthCtrl.changeFlag) {\r\n this.view.score.setChordAdjustWidth(this.adjustWidthCtrl.getValue());\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.selector = selector;\r\n this.lyric = lyric;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n\r\n display() {\r\n super.display();\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.session && this.chordEditorCtrl.session.lyric) {\r\n const lyric = this.chordEditorCtrl.session.lyric;\r\n this.adjustWidthCtrl.setValue(lyric.adjustNoteWidthChord);\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal'\r\n });\r\n }\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n // this.chordEditorCtrl.setView(this.eventSource, this.view);\r\n this.chordEditorCtrl.startEditSession();\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.chordEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.chordEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n\r\n _complete() {\r\n if (this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.endSession();\r\n }\r\n this.view.renderer.setDirty();\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoModifier } from '../../../smo/data/score';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../../eventSource';\r\n/**\r\n * A component is a part of a dialog box that accepts some input.\r\n */\r\ndeclare var $: any;\r\n/**\r\n * Dialogs controls options, like dropdowns\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionOption {\r\n label: string,\r\n value: number | string\r\n}\r\n/**\r\n * DialogDefinition is a JSON-like structure that each dialog has\r\n * to define the components. Specific components can define\r\n * additional params by extending this, these are the basics.\r\n * @param {smoName} - the name the dialog uses to reference it \r\n * @param {control} - constructor of the control\r\n * @param {label} - label of the element, can be translated\r\n * @param {increment} - used by components that have increment arrows\r\n * @param {defaultValue} - thinking of removing this\r\n * @param {dataType} - used to narrow the type by some components\r\n * @param {classes} - can be used in rendering\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n label: string,\r\n startRow?: boolean,\r\n options?: DialogDefinitionOption[]\r\n increment?: number,\r\n defaultValue?: number | string,\r\n dataType?: string,\r\n classes?: string,\r\n}\r\n\r\n/**\r\n * for base component constructors\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiBaseComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentComponent?: SuiComponentParent\r\n}\r\n/**\r\n * components know about their parent dialog via the \r\n * DialogNotifier interface. It allows a component to \r\n * notify parent of changing contents.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiDialogNotifier {\r\n /**\r\n * Called by the component when the state is changed. Dialog\r\n * will then query the component (getValue()) and set the \r\n * correct score value.\r\n */\r\n abstract changed(): void;\r\n /**\r\n * returns the DOM id of the dialog.\r\n */\r\n abstract getId(): string;\r\n /**\r\n * returns the top DOM node for the dialog\r\n */\r\n abstract get dgDom(): any;\r\n /**\r\n * gets the view from the parent\r\n */\r\n abstract getView(): SuiScoreViewOperations;\r\n /**\r\n * gets the 'modifier' from parent dialog, used by \r\n * text editors. Most components won't need this.\r\n */\r\n abstract getModifier(): SmoModifier | null;\r\n /**\r\n * Gets the static text for the current language.\r\n * this is used by components that have different text labels for different states.\r\n */\r\n abstract getStaticText(): Record;\r\n /**\r\n * Used by text editing components that are also event sinks\r\n */\r\n abstract getEventSource(): BrowserEventSource;\r\n}\r\n/**\r\n * base class for Dialog components. Notifies parent \r\n * dialog of state change via `change()`\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentBase {\r\n changeFlag: boolean = false;\r\n css: string;\r\n dialog: SuiDialogNotifier;\r\n id: string;\r\n label: string;\r\n control: string;\r\n smoName: string;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams) {\r\n this.changeFlag = false;\r\n this.css = parameters.classes;\r\n this.dialog = dialog;\r\n this.id = parameters.id;\r\n this.label = parameters.label;\r\n this.control = parameters.control;\r\n this.smoName = parameters.smoName;\r\n }\r\n /**\r\n * Called by the dialog after rendering, so the derived class can \r\n * bind the html controls\r\n */\r\n abstract bind(): void;\r\n /**\r\n * Return the html that lives in side the component DOM. Implemented by the\r\n * base class.\r\n */\r\n abstract get html(): any;\r\n\r\n /**\r\n * Called by the derived class when the value changes. The change flag is set to true, so the dialog will \r\n * know which component changed.\r\n */\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n /**\r\n * combine component classes with string, used for composites\r\n * @param classes string ot append\r\n * @returns combined strings\r\n */\r\n makeClasses(classes: string) {\r\n if (this.css) {\r\n return classes + ' ' + this.css;\r\n }\r\n return classes;\r\n }\r\n get parameterId() {\r\n return this.dialog.getId() + '-' + this.smoName;\r\n }\r\n show() {\r\n $('#' + this.parameterId).removeClass('hide');\r\n }\r\n hide() {\r\n $('#' + this.parameterId).addClass('hide');\r\n }\r\n}\r\n\r\n/**\r\n * Parent components are really containers for other components\r\n * For instance, FontComponent has size, family, weight, etc.\r\n * \r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentParent extends SuiComponentBase {\r\n /**\r\n * For parent component, their changed method is called by child, and then the \r\n * parent calls the dialog changed()\r\n */\r\n abstract changed(): void;\r\n}\r\n\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * \r\n */\r\nexport interface SuiButtonComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string\r\n}\r\n// ## SuiToggleComponent\r\n// Simple on/off behavior. No value just used to notifiy parent dialog\r\nexport class SuiButtonComponent extends SuiComponentBase {\r\n icon: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiButtonComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.icon = parameter.icon;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n this.icon = typeof(this.icon) === 'undefined' ? '' : this.icon;\r\n const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'button').classes(this.icon)\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n setValue() {\r\n }\r\n getValue() {\r\n return null;\r\n }\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('click').on('click',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\nexport interface SuiButtonCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiButtonComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiButtonComposite extends SuiButtonComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiButtonCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","import { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from '../components/toggle';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n \r\nexport interface CheckboxDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n\r\n// ## CheckboxDropdownComponent\r\n// A checkbox that enables a dropdown component, for optional or dependent parameter\r\nexport class CheckboxDropdownComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n toggleCtrl: SuiToggleComposite;\r\n dropdownCtrl: SuiDropdownComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: CheckboxDropdownComponentParams) {\r\n super(dialog, parameter);\r\n const toggleParams: SuiToggleCompositeParams = {\r\n id: this.id + parameter.toggleElement.smoName,\r\n classes: '',\r\n parentControl: this,\r\n ...parameter.toggleElement\r\n }\r\n const dropdownParams: SuiDropdownCompositeParams = {\r\n id: this.id + parameter.dropdownElement.smoName,\r\n classes: '',\r\n defaultValue: '',\r\n parentControl: this,\r\n ...parameter.dropdownElement\r\n }\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.dropdownCtrl = new SuiDropdownComposite(this.dialog, dropdownParams);\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl checkboxDropdown'))\r\n .attr('id', this.parameterId);\r\n q.append(this.toggleCtrl.html);\r\n q.append(this.dropdownCtrl.html);\r\n return q;\r\n }\r\n\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.dropdownCtrl.bind();\r\n }\r\n changed() {\r\n if (this.toggleCtrl.getValue()) {\r\n $('#' + this.parameterId).addClass('checked');\r\n } else {\r\n $('#' + this.parameterId).removeClass('checked');\r\n }\r\n this.handleChanged();\r\n }\r\n}\r\n","import { SuiDialogNotifier, SuiComponentBase, SuiBaseComponentParams } from './baseComponent';\r\nimport { SuiDragSession } from '../../../render/sui/textEdit';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n// ## SuiDragText\r\n// A component that lets you drag the text you are editing to anywhere on the score.\r\n// The text is not really part of the dialog but the location of the text appears\r\n// in other dialog fields.\r\nexport class SuiDragText extends SuiComponentBase {\r\n dragging: boolean = false;\r\n running: boolean = false;\r\n staticText: Record;\r\n altLabel: string;\r\n value: string = '';\r\n session: SuiDragSession | null = null;\r\n view: SuiScoreViewOperations;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter);\r\n this.dragging = false;\r\n this.running = false;\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.draggerLabel;\r\n this.value = '';\r\n this.view = this.dialog.getView();\r\n }\r\n\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbDragTextDialog smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-move'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n show(){}\r\n hide(){}\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n stopEditSession() {\r\n $('body').removeClass('text-move');\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-checkmark').addClass('icon-move');\r\n if (this.session && this.session.dragging) {\r\n this.session.dragging = false;\r\n this.session.endDrag();\r\n }\r\n if (this.session) {\r\n this.session.unrender();\r\n }\r\n this.handleChanged();\r\n this.running = false;\r\n }\r\n startEditSession() {\r\n $('body').addClass('text-move');\r\n this.session = new SuiDragSession({\r\n textGroup: (this.dialog as any).modifier,\r\n context: this.view.renderer.pageMap,\r\n scroller: this.view.tracker.scroller\r\n });\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-enlarge').addClass('icon-checkmark');\r\n this.running = true;\r\n }\r\n mouseMove(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.mouseMove(e);\r\n }\r\n }\r\n mouseDown(e: any) {\r\n if (this.session && !this.session.dragging) {\r\n this.session.startDrag(e);\r\n this.dragging = true;\r\n }\r\n }\r\n mouseUp(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.endDrag();\r\n this.dragging = false;\r\n }\r\n }\r\n\r\n bind() {\r\n const self = this;\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (self.running) {\r\n self.stopEditSession();\r\n } else {\r\n self.startEditSession();\r\n }\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support dropdown compontents\r\n * @module /ui/dialogs/components/dropdown\r\n */\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, DialogDefinitionOption } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * constructor params for {@link SuiDropdownComponent}\r\n * @param id id in DOM\r\n * @param classes\r\n * @param type indicates the data type of the value\r\n * @param increment not used\r\n * @param label\r\n * @param smoName variable name in dialog/adapter\r\n * @param control name of constructor\r\n * @param disabledOption\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * single-select dropdown list\r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComponent extends SuiComponentBase {\r\n options: DialogDefinitionOption[];\r\n disabledOption: string;\r\n dataType: string;\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiDropdownComponentParams) {\r\n super(dialog, parameter);\r\n this.options = parameter.options!;\r\n this.disabledOption = parameter.disabledOption ?? '';\r\n this.dataType = parameter.dataType ?? 'string';\r\n }\r\n checkDefault(s: any, b: any) {\r\n if (this.disabledOption.length) {\r\n s.prop('required', true).append(b('option').attr('selected', 'selected').prop('disabled', true).text(this.disabledOption));\r\n }\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.id;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const s = b('select');\r\n this.checkDefault(s, b);\r\n this.options.forEach((option) => {\r\n s.append(\r\n b('option').attr('value', option.value.toString()).text(option.label));\r\n });\r\n r.append(s).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n replaceOptions(options: DialogDefinitionOption[]) {\r\n const b = buildDom;\r\n const s = b('select');\r\n const sel = this._getInputElement();\r\n const parent = $(sel).parent();\r\n $(sel).remove();\r\n this.checkDefault(s, b);\r\n options.forEach((option) => {\r\n s.append(b('option').attr('value', option.value.toString()).text(option.label));\r\n });\r\n $(parent).append(s.dom());\r\n this.bind();\r\n }\r\n\r\n unselect() {\r\n $(this._getInputElement())[0].selectedIndex = -1;\r\n $(this._getInputElement()).blur();\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.id;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): string | number {\r\n const input = this._getInputElement();\r\n const option = input.find('option:selected');\r\n let val = $(option).val();\r\n val = (this.dataType.toLowerCase() === 'int') ? parseInt(val, 10) : val;\r\n val = (this.dataType.toLowerCase() === 'float') ? parseFloat(val) : val;\r\n if (typeof(val) === 'undefined') {\r\n val = $(input).find('option:first').val();\r\n $(input).find('option:first').prop('selected', true);\r\n }\r\n return val;\r\n }\r\n setValue(value: string | number) {\r\n const input = this._getInputElement();\r\n $(input).val(value);\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n const self = this;\r\n $(input).off('change').on('change',\r\n () => {\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\n/**\r\n * constructor params for {@link SuiDropdownComposite}\r\n * element, often a checkbox\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n * */\r\nexport interface SuiDropdownCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[],\r\n parentControl: SuiComponentParent\r\n}\r\n/**\r\n * A dropdown composite mixes a dropdown with some other \r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComposite extends SuiDropdownComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiDropdownCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiFileInput } from '../../fileio/fileInput';\r\ndeclare var $: any;\r\nexport interface SuiFileDownloadComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFileDownloadComponent\r\n// Download a test file using the file input.\r\nexport class SuiFileDownloadComponent extends SuiComponentBase {\r\n defaultValue: string;\r\n value: any = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFileDownloadComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = parameter.defaultValue ?? '';\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('select-file')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'file').classes('file-button')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n async _handleUploadedFiles(evt: any) {\r\n const localFile = new SuiFileInput(evt);\r\n await localFile.loadAsync();\r\n this.value = localFile.value;\r\n this.handleChanged();\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: any) {\r\n this.value = value;\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', async (e: any) => {\r\n await self._handleUploadedFiles(e);\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiToggleComposite } from './toggle';\r\nimport { SmoScoreText } from '../../../smo/data/scoreText';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SourceSerifProFont } from '../../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SourceSansProFont } from '../../../styles/font_metrics/ssp-sans-metrics';\r\nimport { FontInfo } from '../../../common/vex';\r\ndeclare var $: any;\r\n\r\nexport interface SuiFontComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFontComponent\r\n// Dialog component that lets user choose and customize fonts.\r\nexport class SuiFontComponent extends SuiComponentBase {\r\n familyPart: SuiDropdownComposite;\r\n sizePart: SuiRockerComposite;\r\n italicsCtrl: SuiToggleComposite;\r\n boldCtrl: SuiToggleComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFontComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n const familyId = this.id + 'fontFamily';\r\n const sizeId = this.id + 'fontSize';\r\n\r\n this.familyPart = new SuiDropdownComposite(this.dialog,\r\n {\r\n id: familyId,\r\n smoName: 'fontFamily',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Font Family',\r\n parentControl: this,\r\n options: [\r\n { label: 'Arial', value: 'Arial' },\r\n { label: 'Times New Roman', value: 'Times New Roman' },\r\n { label: 'Serif', value: SourceSerifProFont.fontFamily },\r\n { label: 'Sans', value: SourceSansProFont.fontFamily },\r\n { label: 'Roboto Slab', value: 'Roboto Slab' },\r\n { label: 'Petaluma', value: 'Petaluma Script' },\r\n { label: 'Commissioner', value: 'Commissioner' },\r\n { label: 'Concert One', value: 'ConcertOne' },\r\n { label: 'Merriweather', value: 'Merriweather' }\r\n ]\r\n });\r\n this.sizePart = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: sizeId,\r\n smoName: 'fontSize',\r\n defaultValue: 1,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Font Size',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n this.italicsCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'italic',\r\n smoName: 'italic',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Italics'\r\n }\r\n );\r\n this.boldCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'bold',\r\n smoName: 'bold',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Bold'\r\n }\r\n );\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl')).attr('id', this.id);\r\n if (this.label) {\r\n q.append(b('h3').classes('font-purpose').text(this.label));\r\n }\r\n q.append(this.familyPart.html);\r\n q.append(this.sizePart.html);\r\n q.append(this.boldCtrl.html);\r\n q.append(this.italicsCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): FontInfo {\r\n return {\r\n family: this.familyPart.getValue().toString(),\r\n size: this.sizePart.getValue(),\r\n weight: this.boldCtrl.getValue() ? 'bold' : 'normal',\r\n style: this.italicsCtrl.getValue() ? 'italic' : 'normal'\r\n };\r\n }\r\n setValue(value: FontInfo) {\r\n let italics = false;\r\n // upconvert font size, all font sizes now in points.\r\n if (typeof(value.size) !== 'number') {\r\n value.size = SmoScoreText.fontPointSize(value.size);\r\n }\r\n if (value.style && value.style === 'italic') {\r\n italics = true;\r\n }\r\n const boldString = SmoScoreText.weightString(value.weight);\r\n const bold = boldString === 'bold';\r\n this.boldCtrl.setValue(bold);\r\n this.italicsCtrl.setValue(italics);\r\n this.familyPart.setValue(value.family ?? 'Arial');\r\n this.sizePart.setValue(value.size);\r\n }\r\n\r\n bind() {\r\n this.familyPart.bind();\r\n this.sizePart.bind();\r\n this.boldCtrl.bind();\r\n this.italicsCtrl.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiLyricSession, SuiChordSession } from '../../../render/sui/textEdit';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSelection, SmoSelector } from '../../../smo/xform/selections';\r\nimport { BrowserEventSource } from '../../eventSource';\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SmoLyric } from '../../../smo/data/noteModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * This has the text editing dialog components for notes, such as lyrics. \r\n * Unlike components that are\r\n * actual dialog controls, these actually run a text editing session of some kind.\r\n * \r\n * \r\n *\r\n*\r\n* The heirarchy of text editing objects goes:\r\n* dialog -> component -> session -> editor\r\n*\r\n* ### editor\r\n* handles low-level events and renders the preview using one\r\n* of the text layout objects.\r\n*\r\n* ### session\r\n* creates and destroys editors, e.g. for lyrics that have a Different\r\n* editor instance for each note.\r\n*\r\n* ### component\r\n* is defined in the dialog, and creates/destroys the session based on input from\r\n* the dialog\r\n*\r\n* ### dialog\r\n* manages the coponent session, as well as other components of the text like font etc.\r\n */\r\n\r\n\r\nexport interface SuiNoteTextParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n verse?: number\r\n}\r\n/**\r\n * Base class for text editor components that navigate to\r\n * different notes.\r\n * */\r\nexport abstract class SuiNoteTextComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n selection: SmoSelection;\r\n selector: SmoSelector;\r\n eventSource: BrowserEventSource;\r\n session: SuiLyricSession | null = null;\r\n value: SmoLyric | null = null;\r\n started: boolean = false;\r\n staticText: Record;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.eventSource = this.dialog.getEventSource();\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.staticText = this.dialog.getStaticText();\r\n }\r\n abstract startEditSession(): void;\r\n abstract endSession(): void;\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n get running() {\r\n return this.session && this.session.isRunning;\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.session) {\r\n return await this.session.evKey(evdata);\r\n }\r\n return false;\r\n }\r\n setDialogLyric() {\r\n if (this.session && this.session.lyric) {\r\n (this.dialog as any).setLyric(this.selector, this.session.lyric);\r\n }\r\n }\r\n\r\n async moveSelectionRight() {\r\n if (this.session) {\r\n await this.session.advanceSelection(false);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async moveSelectionLeft() {\r\n if (this.session) {\r\n this.session.advanceSelection(true);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async removeText() {\r\n if (this.session) {\r\n await this.session.removeLyric();\r\n }\r\n }\r\n\r\n async _bind() {\r\n $(this._getInputElement()).off('click').on('click', async () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n $('#' + this.parameterId + '-left').off('click').on('click', async () => {\r\n await this.moveSelectionLeft();\r\n });\r\n $('#' + this.parameterId + '-right').off('click').on('click', async () => {\r\n await this.moveSelectionRight();\r\n });\r\n $('#' + this.parameterId + '-remove').off('click').on('click', async () => {\r\n await this.removeText();\r\n });\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n}\r\n\r\n/** \r\n * manage a lyric session that moves from note to note and adds lyrics.\r\n * @category SuiDialog\r\n**/\r\nexport class SuiLyricComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.altLabel = this.staticText.doneEditing;\r\n this.started = false;\r\n this.verse = parameter.verse ?? 0;\r\n }\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbLyricEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n async endSession() {\r\n this.started = false;\r\n console.log('ending text session');\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n console.log('starting text session');\r\n if (this.started) {\r\n return;\r\n }\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiLyricSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: this.verse,\r\n score: this.view.score,\r\n view: this.view\r\n }\r\n );\r\n this.started = true;\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n\r\n bind() {\r\n this._bind();\r\n }\r\n}\r\n\r\n// ## SuiChordComponent\r\n// manage a chord editing session that moves from note to note and adds chord symbols.\r\nexport class SuiChordComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.session = null;\r\n this.dialog = dialog;\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.altLabel = this.staticText.doneEditing;\r\n this.verse = 0;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbChordEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiChordSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: 0,\r\n view: this.view,\r\n score: this.view.score\r\n }\r\n );\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n bind() {\r\n this._bind();\r\n }\r\n setTextType(type: string | number) {\r\n if (this.session) {\r\n this.session.textType = parseInt(type.toString(), 10);\r\n }\r\n }\r\n getTextType() {\r\n if (this.session) {\r\n return this.session.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /ui/dialog/components/rocker\r\n * **/\r\n import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic dialog component info.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiRockerComponentParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n\r\n/**\r\n * A numeric input box with +- buttons. Adjustable type and scale\r\n * */\r\nexport class SuiRockerComponent extends SuiComponentBase {\r\n static get dataTypes() {\r\n return ['int', 'float', 'percent'];\r\n }\r\n static get increments(): Record {\r\n return { 'int': 1, 'float': 0.1, 'percent': 10 };\r\n }\r\n static get parsers(): Record {\r\n return { 'int': '_getIntValue', 'float': '_getFloatValue', 'percent': '_getPercentValue' };\r\n }\r\n initialValue: number = 0;\r\n dataType: string;\r\n increment: number = 1;\r\n parser: string;\r\n constructor(dialog: SuiDialogNotifier, params: SuiRockerComponentParams) {\r\n super(dialog, params);\r\n this.dataType = params.dataType ?? 'int';\r\n this.increment = params.increment ?? SuiRockerComponent.increments[this.dataType];\r\n if (SuiRockerComponent.dataTypes.indexOf(this.dataType) < 0) {\r\n throw new Error('dialog element invalid type ' + this.dataType);\r\n }\r\n if (this.dataType === 'int' && this.increment < 1) {\r\n throw new Error('int component with decimal increment');\r\n }\r\n this.parser = SuiRockerComponent.parsers[this.dataType];\r\n this.dialog = dialog;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('rockerControl smoControl')).attr('id', id).attr('data-param', this.smoName)\r\n .append(\r\n b('button').classes('increment').append(\r\n b('span').classes('icon icon-circle-up'))).append(\r\n b('button').classes('decrement').append(\r\n b('span').classes('icon icon-circle-down'))).append(\r\n b('input').attr('type', 'text').classes('rockerInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n get parameterId() {\r\n return this.id;\r\n }\r\n handleChange() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n\r\n bind() {\r\n const pid = this.parameterId;\r\n const input = this._getInputElement();\r\n let val = 0;\r\n $('#' + pid).find('button.increment').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val + this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $('#' + pid).find('button.decrement').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val - this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $(input).off('blur').on('blur',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (val !== this.initialValue) {\r\n this.initialValue = val;\r\n this.handleChanged();\r\n }\r\n }\r\n );\r\n }\r\n\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n _getIntValue() {\r\n let val:number = parseInt(this._getInputElement().val(), 10);\r\n val = isNaN(val) ? 0 : val;\r\n return val;\r\n }\r\n _getFloatValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1.0 : val;\r\n return val;\r\n }\r\n _getPercentValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1 : val;\r\n return val / 100;\r\n }\r\n _setIntValue(val: string | number) {\r\n this._getInputElement().val(val);\r\n }\r\n setValue(value: number) {\r\n if (this.dataType === 'percent') {\r\n value = value * 100;\r\n }\r\n this._setIntValue(value);\r\n this.initialValue = value;\r\n }\r\n getValue() {\r\n return (this as any)[this.parser]();\r\n }\r\n}\r\n/**\r\n * Create rocker composite\r\n * @param{id}\r\n */\r\nexport interface SuiRockerCompositeParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n defaultValue: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiRockerComposite extends SuiRockerComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiRockerCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from './toggle';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSystemGroup } from '../../../smo/data/scoreModifiers';\r\ndeclare var $: any;\r\nexport interface StaffAddControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffAddRemoveComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class StaffAddRemoveComponent extends SuiComponentBase {\r\n staffRows: StaffAddControlRow[] = [];\r\n view: SuiScoreViewOperations;\r\n createdShell: boolean = false;\r\n staticText: Record;\r\n modifier: SmoSystemGroup | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffAddRemoveComponentParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.staticText = dialog.getStaticText();\r\n this.label = this.staticText['includeStaff'];\r\n }\r\n setControlRows() {\r\n const mod = this.modifier!;\r\n let i = mod.startSelector.staff;\r\n this.staffRows = [];\r\n this.view.storeScore.staves.forEach((staff) => {\r\n const name = this.label + ' ' + (staff.staffId + 1);\r\n const id = 'show-' + i;\r\n const elementParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'toggle-add-row',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n parentControl: this,\r\n id: id\r\n } \r\n // Toggle add of last row + 1\r\n if (staff.staffId === mod.endSelector.staff + 1) {\r\n\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n rowElement.parentControl = this;\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if (staff.staffId > mod.startSelector.staff &&\r\n staff.staffId === mod.endSelector.staff) {\r\n elementParams.classes = 'toggle-remove-row';\r\n // toggle remove of ultimate row, other than first row\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if ((staff.staffId <= mod.endSelector.staff) &&\r\n (staff.staffId >= mod.startSelector.staff)) {\r\n // toggle remove of ultimate row, other than first row\r\n elementParams.classes = 'toggle-disabled';\r\n const rowElement = new SuiToggleComposite(this.dialog,elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n }\r\n i += 1;\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n // a little hacky. The first time we create an empty html shell for the control\r\n // subsequent times, we fill the html with the row information\r\n if (!this.createdShell) {\r\n this.createdShell = true;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer')).attr('id', this.parameterId);\r\n return q;\r\n } else {\r\n const q = b('div').classes(this.makeClasses('smoControl'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue() {\r\n if (!this.modifier) {\r\n throw 'No staff groups set for staff group component';\r\n }\r\n const mod = this.modifier;\r\n let nextStaff = mod.startSelector.staff;\r\n const maxMeasure = mod.endSelector.measure;\r\n mod.endSelector = JSON.parse(JSON.stringify(mod.startSelector));\r\n this.staffRows.forEach((staffRow) => {\r\n if (staffRow.showCtrl.getValue()) {\r\n mod.endSelector = { staff: nextStaff, measure: maxMeasure, voice: 0, tick: 0, pitches: [] };\r\n nextStaff += 1;\r\n }\r\n });\r\n return this.modifier;\r\n }\r\n setValue(staffGroup: SmoSystemGroup) {\r\n this.modifier = staffGroup;\r\n this.updateGroupMembership();\r\n }\r\n changed() {\r\n this.getValue(); // update modifier\r\n this.handleChanged();\r\n this.updateGroupMembership();\r\n }\r\n bind() {\r\n if (!this.modifier) {\r\n return;\r\n }\r\n // Can't bind before initial set of modifier\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n updateGroupMembership() {\r\n const updateEl = this.getInputElement();\r\n this.setControlRows();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n $(updateEl).find('input').prop('disabled', false);\r\n $(updateEl).find('.toggle-disabled input').prop('checked', true);\r\n $(updateEl).find('.toggle-remove-row input').prop('checked', true);\r\n $(updateEl).find('.toggle-add-row input').prop('checked', false);\r\n $(updateEl).find('.toggle-disabled input').prop('disabled', true);\r\n this.bind();\r\n }\r\n}\r\nexport interface StaffCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface StaffCheckControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffCheckValue {\r\n show: boolean;\r\n}\r\nexport class StaffCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staffRows: StaffCheckControlRow[];\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.staffRows = [];\r\n let previousStaff: string | null = null;\r\n this.view.storeScore.staves.forEach((staff) => {\r\n ;\r\n let name = 'View ' + staff.partInfo.partName;\r\n if (staff.partInfo.stavesBefore > 0 && previousStaff) {\r\n name = previousStaff + ' (2)';\r\n }\r\n previousStaff = name;\r\n const id = 'show-' + staff.staffId;\r\n const toggleParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n id: id,\r\n parentControl: this\r\n }\r\n const rowElement = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n // Is this used for compound controls?\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('.staffContainer');\r\n }\r\n /* export interface StaffCheckValue {\r\n show: boolean;\r\n}*/\r\n getValue(): StaffCheckValue[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.staffRows.length; ++i) {\r\n const show = this.staffRows[i].showCtrl.getValue();\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n setValue(rows: StaffCheckValue[]) {\r\n let i = 0;\r\n rows.forEach((row) => {\r\n this.staffRows[i].showCtrl.setValue(row.show);\r\n i += 1;\r\n });\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from '../components/baseComponent';\r\nimport { SuiToggleComposite } from '../components/toggle';\r\nimport { SuiTextInputComposite } from '../components/textInput';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\ndeclare var $: any;\r\nexport interface TextCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface TextCheckPair {\r\n checked: boolean,\r\n text: string\r\n}\r\nexport class TextCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staticText: Record;\r\n toggleCtrl: SuiToggleComposite;\r\n textCtrl: SuiTextInputComposite;\r\n defaultValue: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: TextCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.defaultValue = '';\r\n const toggleName = this.smoName + 'Toggle';\r\n const textName = this.smoName + 'Text';\r\n this.staticText = this.dialog.getStaticText();\r\n const label = this.staticText[textName];\r\n const show = this.staticText.show;\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, {\r\n smoName: toggleName,\r\n control: 'SuiToggleComposite',\r\n label: show,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n this.textCtrl = new SuiTextInputComposite(this.dialog, {\r\n smoName: textName,\r\n defaultValue: this.defaultValue,\r\n control: 'SuiTextInputComposite',\r\n label,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl textCheckContainer'))\r\n .attr('id', this.parameterId);\r\n q.append(this.textCtrl.html);\r\n q.append(this.toggleCtrl.html);\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue(): TextCheckPair {\r\n return {\r\n checked: this.toggleCtrl.getValue(),\r\n text: this.textCtrl.getValue()\r\n };\r\n }\r\n setValue(val: TextCheckPair) {\r\n this.toggleCtrl.setValue(val.checked);\r\n this.textCtrl.setValue(val.text);\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.textCtrl.bind();\r\n }\r\n}\r\n","import { SmoScoreText, SmoTextGroup } from '../../../smo/data/scoreText';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { SuiTextSession } from '../../../render/sui/textEdit';\r\nimport { SuiScroller } from '../../../render/sui/scroller';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiDialogNotifier, SuiComponentBase, SuiComponentParent } from './baseComponent';\r\nimport { SuiButtonComposite } from './button';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n// ## SuiTextInPlace\r\n// Edit the text in an SVG element, in the same scale etc. as the text in the score SVG DOM.\r\n// This component just manages the text editing component of hte renderer.\r\nexport interface SuiTextInPlaceParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class SuiTextInPlace extends SuiComponentBase {\r\n scroller: SuiScroller;\r\n editMode: boolean = false;\r\n value: SmoTextGroup;\r\n staticText: Record;\r\n altLabel: string;\r\n view: SuiScoreViewOperations;\r\n session: SuiTextSession | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInPlaceParams) {\r\n super(dialog, parameter);\r\n this.scroller = dialog.getView().scroller;\r\n this.value = new SmoTextGroup(SmoTextGroup.defaults);\r\n this.view = this.dialog.getView();\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTextGroup.isTextGroup(modifier)) {\r\n this.value = modifier;\r\n }\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.editorLabel;\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbTextInPlace smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-pencil'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n this.value.skipRender = false;\r\n\r\n if (this.session) {\r\n this.session.textGroup.tryParseUnicode();\r\n this.value = this.session.textGroup;\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n this.handleChanged();\r\n }\r\n get isRunning() {\r\n return this.session && this.session.isRunning;\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _renderInactiveBlocks() {\r\n const modifier = this.value;\r\n const context = this.view.renderer.pageMap.getRendererFromModifier(this.value).getContext();\r\n context.save();\r\n context.setFillStyle('#ddd');\r\n const svgPage = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n modifier.textBlocks.forEach((block) => {\r\n const st = block.text;\r\n if (st.attrs.id !== this.value.getActiveBlock().attrs.id && svgPage) {\r\n const svgText = SuiInlineText.fromScoreText(st, svgPage, this.view.renderer.pageMap, this.scroller);\r\n if (st.logicalBox) {\r\n svgText.startX += st.logicalBox.x - st.x;\r\n svgText.startY += (st.y - st.logicalBox.y) - st.logicalBox.height / 2;\r\n }\r\n const sgrp = context.openGroup();\r\n sgrp.classList.add('inactive-text');\r\n sgrp.classList.add('suiInlineText');\r\n svgText.render();\r\n context.closeGroup();\r\n }\r\n });\r\n context.restore();\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n const modifier = this.value;\r\n modifier.skipRender = true;\r\n let pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n $(pageContext.svg).find('#' + modifier.attrs.id).remove();\r\n this._renderInactiveBlocks();\r\n const ul = modifier.ul();\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiTextSession({\r\n renderer: this.view.renderer,\r\n scroller: this.scroller,\r\n x: ul.x,\r\n y: ul.y,\r\n textGroup: modifier,\r\n text: modifier.getActiveBlock().text,\r\n scoreText: modifier.getActiveBlock()\r\n });\r\n $('body').addClass('text-edit');\r\n this.value = this.session.textGroup;\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n // Erase the original since we are going to edit it now.\r\n if (this.value) {\r\n this.value.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.value.elements = [];\r\n }\r\n this.session.startSession();\r\n // blur the button so key events don't get passed to it.\r\n $(this._getInputElement()).blur();\r\n }\r\n evKey(evdata: KeyEvent) {\r\n if (this.session) {\r\n this.session.evKey(evdata);\r\n }\r\n }\r\n bind() {\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\nexport interface SuiTextBlockComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface SuiTextBlockValue {\r\n modifier: SmoTextGroup,\r\n activeScoreText: SmoScoreText\r\n}\r\nexport class SuiTextBlockComponent extends SuiComponentParent {\r\n addBlockCtrl: SuiButtonComposite;\r\n toggleBlockCtrl: SuiButtonComposite;\r\n removeBlockCtrl: SuiButtonComposite;\r\n relativePositionCtrl: SuiDropdownComposite;\r\n justificationCtrl: SuiDropdownComposite;\r\n spacingCtrl: SuiRockerComposite;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextBlockComponentParams) {\r\n super(dialog, parameter);\r\n this.addBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'addBlock',\r\n smoName: 'addBlock',\r\n parentControl: this,\r\n icon: 'icon-plus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Text Block'\r\n });\r\n\r\n this.toggleBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'toggleBlock',\r\n smoName: 'toggleBlock',\r\n parentControl: this,\r\n icon: 'icon-arrow-right',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Next Block'\r\n });\r\n\r\n this.removeBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'removeBlock',\r\n smoName: 'removeBlock',\r\n parentControl: this,\r\n icon: 'icon-minus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Block'\r\n });\r\n this.relativePositionCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'relativePosition',\r\n smoName: 'relativePosition',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Block Positions',\r\n options: [{\r\n value: SmoTextGroup.relativePositions.ABOVE,\r\n label: 'Above'\r\n }, {\r\n value: SmoTextGroup.relativePositions.BELOW,\r\n label: 'Below'\r\n }, {\r\n value: SmoTextGroup.relativePositions.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.relativePositions.RIGHT,\r\n label: 'Right'\r\n }]\r\n }\r\n );\r\n this.justificationCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'justification',\r\n smoName: 'justification',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Justification',\r\n options: [{\r\n value: SmoTextGroup.justifications.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.justifications.RIGHT,\r\n label: 'Right'\r\n }, {\r\n value: SmoTextGroup.justifications.CENTER,\r\n label: 'Center'\r\n }]\r\n });\r\n this.spacingCtrl = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'spacing',\r\n smoName: 'spacing',\r\n defaultValue: 0,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n const mod = this.dialog.getModifier();\r\n if (mod && SmoTextGroup.isTextGroup(mod)) {\r\n this.modifier = mod;\r\n } else {\r\n this.modifier = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n this.activeScoreText = this.modifier.textBlocks[0].text;\r\n }\r\n changed() {\r\n if (this.addBlockCtrl.changeFlag && this.modifier) {\r\n const nt = new SmoScoreText(this.activeScoreText);\r\n this.modifier.addScoreText(nt);\r\n this.activeScoreText = nt;\r\n this.modifier.setActiveBlock(nt);\r\n this._updateMultiiFields();\r\n }\r\n if (this.relativePositionCtrl.changeFlag) {\r\n this.modifier.setRelativePosition(parseInt(this.relativePositionCtrl.getValue().toString(), 10));\r\n }\r\n if (this.justificationCtrl.changeFlag) {\r\n this.modifier.justification = parseInt(this.justificationCtrl.getValue().toString(), 10);\r\n }\r\n if (this.removeBlockCtrl.changeFlag) {\r\n this.modifier.removeBlock(this.activeScoreText);\r\n this.activeScoreText = this.modifier.firstBlock();\r\n this._updateMultiiFields();\r\n }\r\n if (this.toggleBlockCtrl.changeFlag) {\r\n const curIx = this.modifier.indexOf(this.activeScoreText);\r\n const newIx = (curIx + 1) % this.modifier.textBlocks.length;\r\n this.activeScoreText = this.modifier.textBlocks[newIx].text;\r\n this.modifier.setActiveBlock(this.activeScoreText);\r\n }\r\n if (this.spacingCtrl.changeFlag) {\r\n const val = this.spacingCtrl.getValue();\r\n if (val >= 0) {\r\n this.modifier.spacing = val;\r\n }\r\n }\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl'));\r\n q.append(this.addBlockCtrl.html);\r\n q.append(this.removeBlockCtrl.html);\r\n q.append(this.toggleBlockCtrl.html);\r\n q.append(this.relativePositionCtrl.html);\r\n q.append(this.justificationCtrl.html);\r\n q.append(this.spacingCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n return $(this.dialog.dgDom.element).find('#' + this.parameterId);\r\n }\r\n getValue() {\r\n return {\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n };\r\n }\r\n _updateMultiiFields() {\r\n const fields = [this.justificationCtrl, this.relativePositionCtrl,\r\n this.removeBlockCtrl, this.toggleBlockCtrl, this.spacingCtrl];\r\n fields.forEach((field) => {\r\n if (this.modifier.textBlocks.length < 2) {\r\n $('#' + field.parameterId).addClass('hide');\r\n } else {\r\n $('#' + field.parameterId).removeClass('hide');\r\n }\r\n });\r\n }\r\n setValue(value: SuiTextBlockValue) {\r\n this.activeScoreText = value.activeScoreText;\r\n this.modifier = value.modifier;\r\n this.relativePositionCtrl.setValue(this.modifier.relativePosition);\r\n this._updateMultiiFields();\r\n this.justificationCtrl.setValue(this.modifier.justification);\r\n this.spacingCtrl.setValue(this.modifier.spacing);\r\n }\r\n\r\n bind() {\r\n this.addBlockCtrl.bind();\r\n this.relativePositionCtrl.bind();\r\n this.justificationCtrl.bind();\r\n this.removeBlockCtrl.bind();\r\n this.toggleBlockCtrl.bind();\r\n this.spacingCtrl.bind();\r\n }\r\n}\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for text input component (simple text entry, not SVG text)\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiTextInputComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple text input, like for a filename. Not the text editing component.\r\n */\r\nexport class SuiTextInputComponent extends SuiComponentBase {\r\n defaultValue: string = '';\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInputComponentParams) {\r\n super(dialog, parameter);\r\n\r\n this.dialog = dialog;\r\n this.value = '';\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('text-input smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'text').classes('file-name')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(val: string) {\r\n this.value = val;\r\n $('#' + this.parameterId).find('input').val(val);\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', () => {\r\n self.value = $(this._getInputElement()).val();\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\nexport interface SuiTextInputCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiTextInputComposite extends SuiTextInputComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiTextInputCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SmoSelection } from '../../../smo/xform/selections';\r\nimport { SmoTie, TieLine } from '../../../smo/data/staffModifiers';\r\nimport { SmoNote } from '../../../smo/data/note';\r\ndeclare var $: any;\r\n\r\nexport interface PitchTieControlRow {\r\n leftControl: SuiDropdownComposite,\r\n rightControl: SuiDropdownComposite\r\n}\r\nexport interface TieMappingComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n// ## TieMappingComponent\r\n// Represent the pitches in 2 notes that can be individually tied together\r\nexport class TieMappingComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n startSelection: SmoSelection | null;\r\n endSelection: SmoSelection | null;\r\n modifier: SmoTie;\r\n controlRows: PitchTieControlRow[] = [];\r\n constructor(dialog: SuiDialogNotifier, parameter: TieMappingComponentParams) {\r\n super(dialog, parameter);\r\n let i = 0;\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTie.isTie(modifier)) {\r\n this.modifier = modifier;\r\n } else { // should not happen\r\n this.modifier = new SmoTie(SmoTie.defaults);\r\n }\r\n this.startSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.startSelector);\r\n this.endSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.endSelector);\r\n if (this.startSelection === null || this.startSelection.note === null ||\r\n this.endSelection === null || this.endSelection.note === null) {\r\n return;\r\n }\r\n const pitchCount = Math.max(this.startSelection.note.pitches.length, this.endSelection.note.pitches.length);\r\n\r\n this.controlRows = [];\r\n for (i = 0; i < pitchCount; ++i) {\r\n const smoName = 'Line-' + (i + 1);\r\n const defaultValue = -1;\r\n const leftParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-left',\r\n smoName: smoName + '-left',\r\n classes: 'leftControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['fromNote'],\r\n options: this._generateOptions(this.startSelection.note),\r\n parentControl: this\r\n }\r\n const leftControl = new SuiDropdownComposite(this.dialog, leftParams);\r\n const rightParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-right',\r\n smoName: smoName + '-right',\r\n classes: 'rightControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['toNote'],\r\n options: this._generateOptions(this.endSelection.note),\r\n parentControl: this\r\n\r\n }\r\n const rightControl = new SuiDropdownComposite(this.dialog, rightParams);\r\n this.controlRows.push({ leftControl, rightControl });\r\n }\r\n }\r\n bind() {\r\n this.controlRows.forEach((row) => {\r\n row.rightControl.bind();\r\n row.leftControl.bind();\r\n });\r\n }\r\n\r\n _generateOptions(note: SmoNote) {\r\n const options = [];\r\n let index = 0;\r\n let label = '';\r\n options.push({ value: -1, label: 'No Line' });\r\n note.pitches.forEach((pitch) => {\r\n const value = index;\r\n label = pitch.letter.toUpperCase();\r\n if (pitch.accidental !== 'n') {\r\n label += pitch.accidental;\r\n }\r\n label += pitch.octave;\r\n options.push({ value, label });\r\n index += 1;\r\n });\r\n return options;\r\n }\r\n getValue() {\r\n const lines: TieLine[] = [];\r\n this.controlRows.forEach((row) => {\r\n const left: number = parseInt(row.leftControl.getValue().toString(), 10);\r\n const right: number = parseInt(row.rightControl.getValue().toString(), 10);\r\n if (left >= 0 && right >= 0) {\r\n lines.push({ from: left, to: right });\r\n }\r\n });\r\n return lines;\r\n }\r\n setValue(modifier: TieLine[]) {\r\n let i = 0;\r\n for (i = 0; i < this.controlRows.length; ++i) {\r\n const row = this.controlRows[i];\r\n if (modifier.length > i) {\r\n row.leftControl.setValue(modifier[i].from);\r\n row.rightControl.setValue(modifier[i].to);\r\n }\r\n }\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl dropdownPair'))\r\n .attr('id', this.parameterId);\r\n this.controlRows.forEach((row) => {\r\n q.append(row.leftControl.html).append(row.rightControl.html);\r\n });\r\n return q;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for simple on-off toggle\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiToggleComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple boolean checkbox component\r\n */\r\nexport class SuiToggleComponent extends SuiComponentBase {\r\n defaultValue: boolean = false;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiToggleComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = false;\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('toggleControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'checkbox').classes('toggleInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n setValue(value: boolean) {\r\n $(this._getInputElement()).prop('checked', value);\r\n }\r\n getValue() {\r\n return $(this._getInputElement()).prop('checked');\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('change').on('change',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Params for toggle combined with another component\r\n */\r\nexport interface SuiToggleCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n defaultValue?: string | number,\r\n dataType?: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiToggleComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiToggleComposite extends SuiToggleComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiToggleCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n\r\nexport interface TreeComponentOption {\r\n label: string,\r\n value: string | undefined, \r\n parent: string | undefined,\r\n format: string,\r\n expanded: boolean\r\n}\r\n\r\nexport interface SuiTreeComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n options: TreeComponentOption[]\r\n}\r\n// ### SuiDropdownComponent\r\n// simple dropdown select list.\r\nexport class SuiTreeComponent extends SuiComponentBase {\r\n persistControls: boolean = false;\r\n tree: Record = {};\r\n options: TreeComponentOption[] = [];\r\n root: string;\r\n value: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTreeComponentParams) {\r\n super(dialog, parameter);\r\n this.root = parameter.root;\r\n this.value = this.root;\r\n this.options = parameter.options;\r\n this.calculateOptionTree();\r\n }\r\n calculateOptionTree() {\r\n this.tree = {};\r\n this.options.forEach((option) => {\r\n if (option.parent) {\r\n if (!(this.tree[option.parent])) {\r\n this.tree[option.parent] = [];\r\n }\r\n this.tree[option.parent].push(option);\r\n }\r\n });\r\n }\r\n getNodesWithParent(parent: string | undefined) {\r\n return this.options.filter((oo) => oo.parent === parent);\r\n }\r\n appendOptionRecurse(b: any, option: TreeComponentOption, level: number) {\r\n const children = this.getNodesWithParent(option.value);\r\n let treeClass = 'tree-branch';\r\n let buttonClass = 'expander';\r\n if (option.format === 'library' && children.length > 0) {\r\n if (this.persistControls && option.expanded) {\r\n buttonClass += ' expanded icon-minus';\r\n }\r\n if (this.persistControls && !option.expanded) {\r\n buttonClass += ' collapsed icon-plus';\r\n treeClass += ' collapsed';\r\n }\r\n }\r\n const current = b('li').classes(treeClass).attr('data-value', option.value).attr('data-level', level);\r\n current.append(b('button').classes(buttonClass));\r\n current.append(b('a').classes('tree-link').text(option.label));\r\n if (option.format === 'library') {\r\n current.append(b('span').classes('file-type icon-book'));\r\n } else {\r\n current.append(b('span').classes('file-type icon-file-music'));\r\n }\r\n children.forEach((child) => {\r\n current.append(b('ul').append(this.appendOptionRecurse(b, child, level + 1)));\r\n });\r\n return current;\r\n }\r\n _createTree(builder: any, ul: any) {\r\n // this.checkDefault(s, b);\r\n const options = this.getNodesWithParent(this.root);\r\n options.forEach((option) => {\r\n ul.append(this.appendOptionRecurse(builder, option, 0));\r\n });\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n r.append(ul);\r\n this.persistControls = true;\r\n return r;\r\n }\r\n updateOptions(options: TreeComponentOption[]) {\r\n this.options = options;\r\n this.calculateOptionTree();\r\n const parentEl = $(this._getInputElement());\r\n const oldUl = $(parentEl).find('ul.tree-root');\r\n $(oldUl).remove();\r\n const b = buildDom;\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n $(parentEl).append(ul.dom());\r\n this.bind();\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid);\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: string) {\r\n $('ul.tree li').removeClass('selected');\r\n const option = this.options.find((o) => o.value === value);\r\n const input = this._getInputElement();\r\n const li = $(input).find('li[data-value=\"' + value + '\"]');\r\n $(li).addClass('selected');\r\n if (option && option.format === 'library') {\r\n $(li).find('button').first().addClass('expanded icon-minus');\r\n }\r\n this.bindTreeControls();\r\n }\r\n bindTreeControls() {\r\n $('ul.tree button.expanded').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).removeClass('expanded').removeClass('icon-minus').addClass('icon-plus').addClass('collapsed');\r\n $(button).closest('li').addClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n $('ul.tree button.collapsed').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).addClass('expanded').addClass('icon-minus').removeClass('icon-plus').removeClass('collapsed');\r\n $(button).closest('li').removeClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n this.bindTreeControls();\r\n $(input).find('a.tree-link').each((ix: number, el: any) => {\r\n $(el).removeClass('selected');\r\n $(el).off('click').on('click', (ev: any) => {\r\n $(this._getInputElement()).find('li').removeClass('selected');\r\n const li = $(ev.currentTarget).closest('li.tree-branch');\r\n $(li).addClass('selected');\r\n this.value = $(li).attr('data-value');\r\n this.handleChanged();\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { buildDom, InputTrapper, draggable, createTopDomContainer } from '../../common/htmlHelpers';\r\n// import { SmoTranslator } from '../i18n/language';\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SuiDialogNotifier, DialogDefinitionElement, \r\n SuiComponentBase, DialogDefinitionOption, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SuiScroller } from '../../render/sui/scroller';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { EventHandler } from '../eventSource';\r\nimport { SmoUiConfiguration } from '../configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n/**\r\n * The JSON dialog template is a declaritive structore for the html of the dialog\r\n * and components. \r\n * @param label for the dialog itself\r\n * @param elements a series of elements that define the component\r\n * @param staticText a hash of text for the dialog and components to use\r\n * @category SuiDialog\r\n */\r\nexport interface DialogDefinition {\r\n label: string,\r\n elements: DialogDefinitionElement[],\r\n staticText: Record[]\r\n}\r\n/**\r\n * A translation of the labels in DialogDefintionElement\r\n * @param label the component label\r\n * @param id used as a key in translation tool\r\n * @param options options for dropdown and other array components\r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslationElement {\r\n label: string,\r\n id: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * A translation of all the strings in the dialog itself, used \r\n * when switching languages.\r\n * @param ctor the constructor for the dialog class, used to call static methods\r\n * @param label the translated label\r\n * @param dialogElements the translated component json\r\n * @param staticText translated misc text \r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslation {\r\n ctor: string,\r\n label: string,\r\n dialogElements: DialogTranslationElement[],\r\n staticText: Record\r\n}\r\n\r\n/**\r\n * Dialog params always contain basic information about the runtime\r\n * for modal functionality\r\n * @param ctor dialog constructor\r\n * @param id DOM id for the dialog\r\n * @param tracker to get and set selections\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param startPromise used if this is called from another modal element\r\n * @param view the MVVM object to change the score\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n // definition: DialogDefinition,\r\n modifier?: any,\r\n config?: SmoUiConfiguration\r\n}\r\n\r\n/**\r\n * internal interface used to create the DOM\r\n * @internal\r\n */\r\nexport interface SuiDomParams {\r\n id: string,\r\n top: number,\r\n left: number,\r\n label: string\r\n}\r\n/**\r\n * DOM interface for the dialog\r\n * @param element parent element\r\n * @param trapper used to trap focus events for the dialog\r\n */\r\nexport interface DialogDom {\r\n element: any,\r\n trapper: any\r\n}\r\n\r\n/**\r\n * Note: Most dialogs will inherit from SuiDialogAdapter, not SuiDialogBase.\r\n * You will only want to inherit from SuiDialogBase under 2 conditions:\r\n * 1. the dialog is triviailly simple, like an alert box that makes no changes to the score, or\r\n * 2. the dialog is extremely complicated in how it interacts with the user, such that a form-based approach won't work\r\n * @category SuiDialog\r\n */\r\n export abstract class SuiDialogBase extends SuiDialogNotifier {\r\n static get displayOptions(): Record {\r\n return {\r\n BINDCOMPONENTS: 'bindComponents', DRAGGABLE: 'makeDraggable',\r\n KEYBOARD_CAPTURE: 'captureKeyboardPromise', GLOBALPOS: 'positionGlobally',\r\n SELECTIONPOS: 'positionFromSelection', MODIFIERPOS: 'positionFromModifier',\r\n HIDEREMOVE: 'hideRemoveButton'\r\n };\r\n }\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class: string): DialogTranslation {\r\n const output: DialogTranslationElement[] = [];\r\n const xx: any = eval('globalThis.Smo.' + _class);\r\n xx.dialogElements.elements.forEach((element: DialogDefinitionElement) => {\r\n const component: Partial = {};\r\n if (element.label) {\r\n component.label = element.label ?? '';\r\n component.id = element.smoName;\r\n if (element.options) {\r\n component.options = [];\r\n\r\n element.options.forEach((option) => {\r\n component.options!.push({ value: option.value, label: option.label });\r\n });\r\n }\r\n output.push(component as DialogTranslationElement);\r\n }\r\n });\r\n // convert static text from an array of name/value pairs to a record for translation\r\n const staticText: Record = {};\r\n const dialogStaticText: Record[] = xx.dialogElements.staticText;\r\n if (dialogStaticText) {\r\n dialogStaticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n staticText[key] = st[key];\r\n });\r\n }\r\n return { ctor: xx.ctor, label: xx.dialogElements.label, dialogElements: output, staticText };\r\n }\r\n static getStaticText(staticText: Record[]) {\r\n const rv: Record = {};\r\n staticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n rv[key] = st[key];\r\n });\r\n return rv;\r\n }\r\n id: string;\r\n ctor: string;\r\n boundKeyboard: boolean;\r\n components: SuiComponentBase[] = [];\r\n boundComponents: SuiComponentBase[] = [];\r\n cmap: Record = {};\r\n scroller: SuiScroller;\r\n closeDialogPromise: Promise;\r\n label: string;\r\n staticText: Record[] = [];\r\n startPromise: Promise | null;\r\n dialogElements: DialogDefinition;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n completeNotifier: CompleteNotifier;\r\n modifier: any;\r\n dgDom: DialogDom;\r\n displayOptions: string[] = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'GLOBALPOS', 'HIDEREMOVE'];\r\n keydownHandler: EventHandler | null = null;\r\n // ### SuiDialogBase ctor\r\n // Creates the DOM element for the dialog and gets some initial elements\r\n constructor(dialogElements: DialogDefinition, parameters: SuiDialogParams) {\r\n super();\r\n this.id = parameters.id;\r\n this.boundKeyboard = false;\r\n this.scroller = parameters.view.tracker.scroller;\r\n this.label = dialogElements.label;\r\n this.eventSource = parameters.eventSource;\r\n this.view = parameters.view;\r\n this.completeNotifier = parameters.completeNotifier;\r\n this.modifier = parameters.modifier;\r\n this.ctor = parameters.ctor;\r\n\r\n this.closeDialogPromise = new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', () => {\r\n resolve();\r\n });\r\n });\r\n this.staticText = dialogElements.staticText;\r\n\r\n // If this dialog was spawned by a menu, wait for the menu to dismiss\r\n // before continuing.\r\n // this.startPromise = parameters.closeMenuPromise;\r\n this.startPromise = parameters.startPromise;\r\n\r\n this.dialogElements = dialogElements;\r\n\r\n const left = $('.musicRelief').offset().left + $('.musicRelief').width() / 2;\r\n const top = $('.musicRelief').offset().top + $('.musicRelief').height() / 2;\r\n\r\n this.dgDom = this._constructDialog(dialogElements, {\r\n id: 'dialog-' + this.id,\r\n top,\r\n left,\r\n label: this.label\r\n });\r\n\r\n // SmoTranslator.registerDialog(this.ctor);\r\n }\r\n // ### display\r\n // make3 the modal visible. bind events and elements.\r\n display() {\r\n $('body').addClass('showAttributeDialog');\r\n this.bindComponents();\r\n this.bindElements();\r\n this.applyDisplayOptions();\r\n this.initialValue();\r\n }\r\n\r\n // ### bindElements\r\n // bing the generic controls in most dialogs.\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.modifier) {\r\n this.modifier.cancel();\r\n }\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.complete();\r\n });\r\n }\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n component.bind();\r\n });\r\n }\r\n initialValue(){\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n (comp as any).setValue((this.modifier as any)[comp.smoName]);\r\n });\r\n }\r\n changed() {\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.modifier as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n getId(): string {\r\n return this.id;\r\n }\r\n getModifier() : SmoModifier | null {\r\n return this.modifier ?? null;\r\n }\r\n getEventSource() {\r\n return this.eventSource;\r\n }\r\n getStaticText() {\r\n return SuiDialogBase.getStaticText(this.staticText);\r\n }\r\n async commit(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get closeModalPromise(): Promise {\r\n return this.closeDialogPromise;\r\n }\r\n // ### position\r\n // For dialogs based on selections, tries to place the dialog near the selection and also\r\n // to scroll so the dialog is in view\r\n static position(box: SvgBox, dgDom: DialogDom, scroller: SuiScroller) {\r\n let y = (box.y + box.height) - scroller.netScroll.y;\r\n let x = 0;\r\n\r\n // TODO: adjust if db is clipped by the browser.\r\n const dge = $(dgDom.element).find('.attributeModal');\r\n const dgeHeight: number = $(dge).height();\r\n const maxY: number = $('.musicRelief').height();\r\n const maxX: number = $('.musicRelief').width();\r\n const offset: any = $('.dom-container').offset();\r\n y = y - (offset.top as number);\r\n\r\n const offsetY = dgeHeight + y > window.innerHeight ? (dgeHeight + y) - window.innerHeight : 0;\r\n y = (y < 0) ? -y : y - offsetY;\r\n\r\n y = (y > maxY || y < 0) ? maxY / 2 : y;\r\n\r\n $(dge).css('top', '' + y + 'px');\r\n\r\n x = box.x - scroller.netScroll.x;\r\n x = x - (offset.left as number);\r\n const w: number = $(dge).width();\r\n x = (x > window.innerWidth / 2) ? x - (w + 25) : x + (w + 25);\r\n\r\n x = (x < 0 || x > maxX) ? maxX / 2 : x;\r\n $(dge).css('left', '' + x + 'px');\r\n }\r\n getView() {\r\n return this.view;\r\n }\r\n applyDisplayOptions() {\r\n $('body').addClass('showAttributeDialog');\r\n this.displayOptions.forEach((option) => {\r\n (this as any)[SuiDialogBase.displayOptions[option]]();\r\n });\r\n }\r\n // ### position\r\n // Position the dialog near a selection. If the dialog is not visible due\r\n // to scrolling, make sure it is visible.\r\n position(box: SvgBox) {\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n hideRemoveButton() {\r\n $(this.dgDom.element).find('.remove-button').remove();\r\n }\r\n // ### positionModifier()\r\n positionFromModifier() {\r\n if (this.modifier === null || this.modifier.logicalBox === null) {\r\n this.positionGlobally();\r\n return;\r\n }\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.modifier);\r\n const screenBox = this.view.renderer.pageMap.svgToClient(this.modifier.logicalBox);\r\n this.position(screenBox);\r\n }\r\n // ### positionGlobally\r\n // position the dialog box in the center of the current scroll region\r\n positionGlobally() {\r\n const box = SvgHelpers.boxPoints(250, 250, 1, 1);\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n // ### postionFromSelection\r\n // set initial position of dialog based on first selection\r\n positionFromSelection() {\r\n const note: SmoNote | null = this.view.tracker.selections[0].note;\r\n if (note && note.logicalBox) {\r\n const screenBox = this.view.renderer.pageMap.svgToClient(note.logicalBox);\r\n this.position(screenBox);\r\n }\r\n }\r\n // ### build the html for the dialog, based on the instance-specific components.\r\n _constructDialog(dialogElements: DialogDefinition, parameters: SuiDomParams) {\r\n createTopDomContainer('.attributeDialog');\r\n const id = parameters.id;\r\n const b = buildDom;\r\n const r = b('div').classes('attributeModal').attr('id', 'attr-modal-' + id)\r\n .css('top', parameters.top + 'px').css('left', parameters.left + 'px')\r\n .append(b('spanb').classes('draggable button').append(b('span').classes('icon icon-move jsDbMove')))\r\n .append(b('h2').classes('dialog-label').text(this.label));\r\n\r\n var ctrl = b('div').classes('smoControlContainer');\r\n dialogElements.elements.filter((de) => de.control).forEach((de) => {\r\n let ctor = null;\r\n if (typeof (de.control) === 'function') {\r\n ctor = de.control;\r\n } else {\r\n ctor = eval('globalThis.Smo.' + de.control);\r\n }\r\n const classes = de.classes ? de.classes : '';\r\n const compParams: SuiBaseComponentParams = {\r\n classes, id: id + de.smoName, ...de\r\n }\r\n const control: SuiComponentBase = new ctor(this, compParams);\r\n this.components.push(control);\r\n this.cmap[de.smoName + 'Ctrl'] = control;\r\n ctrl.append(control.html);\r\n });\r\n r.append(ctrl);\r\n r.append(\r\n b('div').classes('buttonContainer').append(\r\n b('button').classes('ok-button button-left').text('OK')).append(\r\n b('button').classes('cancel-button button-center').text('Cancel')).append(\r\n b('button').classes('remove-button button-right').text('Remove').append(\r\n b('span').classes('icon icon-cancel-circle'))));\r\n $('.attributeDialog').html('');\r\n\r\n $('.attributeDialog').append(r.dom());\r\n\r\n const trapper = new InputTrapper('.attributeDialog');\r\n trapper.trap();\r\n $('.attributeDialog').find('.cancel-button').focus();\r\n return {\r\n element: $('.attributeDialog'),\r\n trapper\r\n };\r\n }\r\n // ### Complete\r\n // Dialogs take over the keyboard, so release that and trigger an event\r\n // that the dialog is closing that can resolve any outstanding promises.\r\n complete() {\r\n if (this.boundKeyboard && this.keydownHandler) {\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').trigger('dialogDismiss');\r\n this.dgDom.trapper.close();\r\n }\r\n // ### makeDraggable\r\n // generic code to make the dialog box draggable so it doesn't\r\n // get in front of stuff.\r\n makeDraggable() {\r\n createTopDomContainer('.draganime');\r\n const cb = () => { };\r\n draggable({\r\n parent: $(this.dgDom.element).find('.attributeModal'),\r\n handle: $(this.dgDom.element).find('.jsDbMove'),\r\n animateDiv: '.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n }\r\n // ### captureKeyboardPromise\r\n // capture keyboard events until the dialog closes,\r\n // then give control back to the current keyboard\r\n async captureKeyboardPromise() {\r\n if (!(this.startPromise)) {\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n return;\r\n }\r\n if (this.startPromise) {\r\n await this.startPromise;\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n }\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n }\r\n }\r\n\r\n // ### bindKeyboard\r\n // generic logic to grab keyboard elements for modal\r\n bindKeyboard() {\r\n this.boundKeyboard = true;\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n}\r\nexport function dialogConstructor(type: { new(parameters: SuiDialogParams): T; }, parameters: SuiDialogParams ): T {\r\n return new type(parameters);\r\n}\r\nexport function createAndDisplayDialog(ctor: new (parameters: SuiDialogParams) => T, parameters: SuiDialogParams): T {\r\n const instance: T = dialogConstructor(ctor, parameters);\r\n instance.display();\r\n return instance;\r\n}\r\n","import { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoDynamicText, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiDynamicDialogAdapter extends SuiComponentAdapter {\r\n modifier: SmoDynamicText;\r\n backup: SmoDynamicText;\r\n selection: SmoSelection;\r\n constructor(view: SuiScoreViewOperations, modifier: SmoDynamicText) {\r\n super(view);\r\n this.modifier = modifier;\r\n this.backup = new SmoDynamicText(this.modifier);\r\n this.selection = this.view.tracker.modifierSelections[0].selection!;\r\n }\r\n async cancel() {\r\n await this.view.addDynamic(this.selection, this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get xOffset() {\r\n return this.modifier.xOffset;\r\n }\r\n async remove() {\r\n await this.view.removeDynamic(this.modifier);\r\n }\r\n set xOffset(value: number) {\r\n this.modifier.xOffset = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get fontSize() {\r\n return this.modifier.fontSize;\r\n }\r\n set fontSize(value: number) {\r\n this.modifier.fontSize = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetLine() {\r\n return this.modifier.yOffsetLine;\r\n }\r\n set yOffsetLine(value: number) {\r\n this.modifier.yOffsetLine = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetPixels() {\r\n return this.modifier.yOffsetPixels;\r\n }\r\n set yOffsetPixels(value: number) {\r\n this.modifier.yOffsetPixels = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get text() {\r\n return this.modifier.text;\r\n }\r\n set text(value: string) {\r\n this.modifier.text = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n}\r\n// ## SuiDynamicModifierDialog\r\n// This is a poorly named class, it just allows you to placeText\r\n// dynamic text so it doesn't collide with something.\r\nexport class SuiDynamicModifierDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Dynamics Properties', elements:\r\n [{\r\n smoName: 'yOffsetLine',\r\n defaultValue: 11,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Line'\r\n }, {\r\n smoName: 'yOffsetPixels',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset Px'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'text',\r\n defaultValue: SmoDynamicText.dynamics.P,\r\n options: [{\r\n value: SmoDynamicText.dynamics.P,\r\n label: 'Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.PP,\r\n label: 'Pianissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.MP,\r\n label: 'Mezzo-Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.MF,\r\n label: 'Mezzo-Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.F,\r\n label: 'Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.FF,\r\n label: 'Fortissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.SFZ,\r\n label: 'Sforzando'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Text'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiDynamicDialogAdapter(parameters.view, parameters.modifier);\r\n super(SuiDynamicModifierDialog.dialogElements, { adapter, ...parameters });\r\n this.view.groupUndo(true);\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SuiDialogBase, SuiDialogParams, createAndDisplayDialog } from './dialog';\r\nimport { SuiHairpinAttributesDialog } from './hairpin';\r\nimport { SuiSlurAttributesDialog } from './slur';\r\nimport { SuiVoltaAttributeDialog } from './volta';\r\nimport { SuiLyricDialog } from './lyric';\r\nimport { SuiTieAttributesDialog } from './tie';\r\nimport { SuiDynamicModifierDialog } from './dynamics';\r\nimport { SuiTextBlockDialog } from './textBlock';\r\nimport { SuiTextBracketDialog } from './textBracket';\r\n\r\nexport type ModifiersWithDialogs = 'SmoStaffHairpin' | 'SmoTie' | 'SmoSlur' | 'SmoDynamicText' | 'SmoVolta' | 'SmoScoreText' | 'SmoLoadScore' | 'SmoLyric';\r\nexport var ModifiersWithDialogNames = ['SmoStaffHairpin', 'SmoTie', 'SmoSlur', 'SmoDynamicText', 'SmoVolta',\r\n 'SmoScoreText', 'SmoLoadScore', 'SmoLyric', 'SmoTextGroup', 'SmoStaffTextBracket'];\r\n\r\nexport function isModifierWithDialog(modifier: SmoModifier) {\r\n return ModifiersWithDialogNames.indexOf(modifier.attrs.type) >= 0;\r\n}\r\n/**\r\n * Dialogs bound to selectable elements like slurs, dynamics, are created \r\n * directly from a button/menu option\r\n * @category SuiDialog\r\n */\r\n export class SuiModifierDialogFactory {\r\n static createModifierDialog(modifier: SmoModifier, parameters: SuiDialogParams): SuiDialogBase | null {\r\n if (!isModifierWithDialog(modifier)) {\r\n return null;\r\n }\r\n const ctor = modifier.attrs.type;\r\n parameters.modifier = modifier;\r\n if (ctor === 'SmoStaffHairpin') {\r\n return createAndDisplayDialog(SuiHairpinAttributesDialog, parameters);\r\n } else if (ctor === 'SmoTie') {\r\n return createAndDisplayDialog(SuiTieAttributesDialog, parameters);\r\n } else if (ctor === 'SmoSlur') {\r\n return createAndDisplayDialog(SuiSlurAttributesDialog, parameters);\r\n } else if (ctor === 'SmoDynamicText') {\r\n return createAndDisplayDialog(SuiDynamicModifierDialog, parameters);\r\n } else if (ctor === 'SmoVolta') {\r\n return createAndDisplayDialog(SuiVoltaAttributeDialog, parameters);\r\n } else if (ctor === 'SmoTextGroup') {\r\n return createAndDisplayDialog(SuiTextBlockDialog, parameters);\r\n } else if (ctor === 'SmoStaffTextBracket') {\r\n return createAndDisplayDialog(SuiTextBracketDialog, parameters);\r\n } else {\r\n return createAndDisplayDialog(SuiLyricDialog, parameters);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogBase, SuiDialogParams, DialogDefinition } from './dialog';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SmoToXml } from '../../smo/mxml/smoToXml';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiFileDownloadComponent } from './components/fileDownload';\r\nimport { SuiDialogAdapterBase, SuiComponentAdapter } from './adapter';\r\nimport { addFileLink } from '../../common/htmlHelpers';\r\nimport { SmoToMidi } from '../../smo/midi/smoToMidi';\r\nimport { MidiToSmo } from '../../smo/midi/midiToSmo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoToVex } from '../../render/vex/toVex';\r\ndeclare var $: any;\r\n// declare var MidiParser: any;\r\ndeclare var parseMidi: any;\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\nexport class SuiSmoLoadAdapter extends SuiComponentAdapter {\r\n jsonFile: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.jsonFile;\r\n }\r\n set loadFile(value: string) {\r\n this.jsonFile = value;\r\n }\r\n async commit() {\r\n let scoreWorks = false;\r\n if (this.jsonFile.length > 0) {\r\n try {\r\n const score = SmoScore.deserialize(this.jsonFile);\r\n scoreWorks = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n/**\r\n * Load a SMO JSON file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadFileDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }\r\n ],\r\n staticText: []\r\n };\r\n get loadFileCtrl() {\r\n return this.cmap['loadFileCtrl'] as SuiFileDownloadComponent;\r\n }\r\n modifier: SuiSmoLoadAdapter;\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSmoLoadAdapter(parameters.view);\r\n parameters.ctor = 'SuiLoadFileDialog';\r\n super(SuiLoadFileDialog.dialogElements, { adapter, ...parameters });\r\n this.modifier = adapter;\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.modifier.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n async commit() {\r\n await this.modifier.commit();\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiXmlLoadAdapter extends SuiComponentAdapter {\r\n xmlFile: string = '';\r\n changeScore: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.xmlFile;\r\n }\r\n set loadFile(value: string) {\r\n this.xmlFile = value;\r\n }\r\n async commit() {\r\n try {\r\n const self = this;\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(this.xmlFile, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n this.changeScore = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n\r\n/**\r\n * Load a music XML file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadMxmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n },\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMxmlDialog';\r\n const adapter = new SuiXmlLoadAdapter(parameters.view);\r\n super(SuiLoadMxmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.adapter.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiMidiLoadAdapter extends SuiComponentAdapter {\r\n midiFile: any = null;\r\n changeScore: boolean = false;\r\n quantize: number = MidiToSmo.quantizeTicksDefault;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.midiFile;\r\n }\r\n set loadFile(value: any) {\r\n this.midiFile = value;\r\n }\r\n get quantizeDuration() {\r\n return this.quantize;\r\n }\r\n set quantizeDuration(value: number) {\r\n this.quantize = value;\r\n }\r\n async commit() {\r\n try {\r\n // midi parser expects data in UintArray form\r\n const ar = new Uint8Array(this.midiFile);\r\n const midi: any = parseMidi(ar);\r\n const midiParser = new MidiToSmo(midi, this.quantize);\r\n await this.view.changeScore(midiParser.convert());\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiLoadMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }, {\r\n smoName: 'quantizeDuration',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Quantize to:',\r\n options: [{\r\n value: 1024,\r\n label: '1/16th note'\r\n }, {\r\n value: 512,\r\n label: '1/32nd note'\r\n }, {\r\n value: 2048,\r\n label: '1/8th note'\r\n }]\r\n }, \r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMidiDialog';\r\n const adapter = new SuiMidiLoadAdapter(parameters.view);\r\n super(SuiLoadMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.adapter?.loadFile?.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n\r\nexport class SuiPrintFileDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Print Complete',\r\n elements: [],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiPrintFileDialog';\r\n super(SuiPrintFileDialog.dialogElements, parameters);\r\n }\r\n\r\n changed() { }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n $('body').removeClass('printing');\r\n this.view.renderer.restoreLayoutAfterPrint();\r\n window.dispatchEvent(new Event('resize'));\r\n this.complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').remove();\r\n $(dgDom.element).find('.remove-button').remove();\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiVexSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n page: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n\r\n get pageToRender() {\r\n return this.page;\r\n }\r\n set pageToRender(val: number) {\r\n this.page = val;\r\n }\r\n\r\n async _saveScore() {\r\n const vexText = SmoToVex.convert(this.view.score, { div: 'smoo', page: this.page });\r\n if (!this.fileName.endsWith('.js')) {\r\n this.fileName = this.fileName + '.js';\r\n }\r\n /* TODO: zip multiple render files\r\n const zipname = this.fileName.replace('.js', 'zip');\r\n const zipFile = new JSZip();\r\n zipFile.file(this.fileName, vexText);\r\n const content = await zipFile.generateAsync({ type: 'blob' });\r\n addFileLink(zipname, content, $('.saveLink')); */\r\n addFileLink(this.fileName, vexText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'vexRender.js';\r\n }\r\n if (filename.indexOf('.js') < 0) {\r\n filename = filename + '.js';\r\n }\r\n await this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveVexDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save as Vex Code',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }, {\r\n smoName: 'pageToRender',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Page',\r\n dataType: 'int',\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiVexSaveDialog';\r\n const adapter = new SuiVexSaveAdapter(parameters.view);\r\n super(SuiSaveVexDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSmoSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const json = this.view.storeScore.serialize();\r\n const jsonText = JSON.stringify(json);\r\n if (!this.fileName.endsWith('.json')) {\r\n this.fileName = this.fileName + '.json';\r\n }\r\n addFileLink(this.fileName, jsonText, $('.saveLink'));\r\n $('.saveLink a')[0].click(); \r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n const scoreInfo = this.view.score.scoreInfo;\r\n scoreInfo.name = rawFile;\r\n scoreInfo.version = scoreInfo.version + 1;\r\n await this.view.updateScoreInfo(scoreInfo);\r\n this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveFileDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiSaveFileDialog';\r\n const adapter = new SuiSmoSaveAdapter(parameters.view);\r\n super(SuiSaveFileDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n\r\nexport class SuiXmlSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveXml() {\r\n const dom = SmoToXml.convert(this.view.storeScore);\r\n const ser = new XMLSerializer();\r\n const xmlText = ser.serializeToString(dom);\r\n if (!this.fileName.endsWith('.xml') && !this.fileName.endsWith('.mxml')) {\r\n this.fileName = this.fileName + '.xml';\r\n }\r\n addFileLink(this.fileName, xmlText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.xml';\r\n }\r\n if (filename.indexOf('.xml') < 0) {\r\n filename = filename + '.xml';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveXml();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // noop\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveXmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveXmlDialog';\r\n const adapter = new SuiXmlSaveAdapter(parameters.view);\r\n super(SuiSaveXmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n\r\nexport class SuiMidiSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const bytes = SmoToMidi.convert(this.view.storeScore);\r\n if (!this.fileName.endsWith('.mid')) {\r\n this.fileName = this.fileName + '.mid';\r\n }\r\n addFileLink(this.fileName, bytes, $('.saveLink'), 'audio/midi');\r\n $('.saveLink a')[0].click();\r\n }\r\n\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.mid';\r\n }\r\n if (filename.indexOf('.mid') < 0) {\r\n filename = filename + '.mid';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveScore();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score as Midi',\r\n elements:\r\n [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveMidiDialog';\r\n const adapter = new SuiMidiSaveAdapter(parameters.view);\r\n super(SuiSaveMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n/* \r\nexport class SuiSaveActionsDialog extends SuiDialogBase {\r\n static dialogElements = \r\n {\r\n label: 'Save Score', elements:\r\n [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n value: string;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiSaveActionsDialog.dialogElements, parameters);\r\n this.value = SuiSaveActionsDialog.createName(this.view.score);\r\n }\r\n changed() {\r\n this.value = this.saveFileNameCtrl.getValue();\r\n }\r\n get saveFileNameCtrl() {\r\n return this.cmap['saveFileNameCtrl'] as SuiTextInputComponent;\r\n }\r\n commit() {\r\n let filename = this.value;\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this.view.saveActions(filename);\r\n this.complete();\r\n }\r\n display() {\r\n this.applyDisplayOptions();\r\n this.saveFileNameCtrl.setValue(this.value);\r\n this.bindElements();\r\n }\r\n static createName(score: SmoScore) {\r\n return score.scoreInfo.name + '-' + score.scoreInfo.version + '-actions.json';\r\n }\r\n static createAndDisplay(params: SuiDialogParams) {\r\n var dg = new SuiSaveActionsDialog(params);\r\n dg.display();\r\n }\r\n} */\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoScore, isEngravingFont } from '../../smo/data/score';\r\nimport { FontPurpose } from '../../smo/data/scoreModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreFontAdapter extends SuiComponentAdapter {\r\n fonts: FontPurpose[];\r\n backups: FontPurpose[];\r\n changed: boolean = false;\r\n static get defaultFont(): FontInfo {\r\n return {\r\n family: 'Merriweather',\r\n size: 14,\r\n weight: 'normal',\r\n style: 'normal'\r\n };\r\n }\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fonts = this.view.score.fonts;\r\n this.backups = JSON.parse(JSON.stringify(this.fonts));\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.fonts = this.backups;\r\n // This takes advantage of setter/getter side-effect\r\n this.engravingFont = this.engravingFont;\r\n this.lyricFont = this.lyricFont;\r\n this.chordFont = this.chordFont;\r\n }\r\n return PromiseHelpers.emptyPromise()\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n changeFont(purpose: number, name: string, fontInfo: FontInfo): FontPurpose {\r\n const fontSize = SmoScoreText.fontPointSize(fontInfo.family);\r\n const fontFamily = fontInfo.family ?? 'Arial';\r\n const fp: FontPurpose = {\r\n name,\r\n purpose,\r\n family: fontFamily,\r\n size: fontSize,\r\n custom: false\r\n };\r\n const fonts: FontPurpose[] = this.fonts.filter((ff) => ff.purpose !== purpose);\r\n fonts.push(fp);\r\n this.fonts = fonts;\r\n this.changed = true;\r\n return fp;\r\n }\r\n\r\n toInfo(fontPurpose: FontPurpose): FontInfo {\r\n return {\r\n weight: 'normal',\r\n style: 'normal',\r\n ...fontPurpose\r\n };\r\n }\r\n getInfo(purpose: number): FontInfo {\r\n const font = this.fonts.find((ff) => ff.purpose === purpose);\r\n if (font) {\r\n return this.toInfo(font);\r\n }\r\n return SuiScoreFontAdapter.defaultFont;\r\n }\r\n // Only family can be editor for engraving font, so parameter is just a string\r\n get engravingFont(): string {\r\n const font = this.fonts.find((ff) => ff.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n return this.toInfo(font).family ?? 'Arial';\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: string) {\r\n this.changed = true;\r\n const current = this.getInfo(SmoScore.fontPurposes.ENGRAVING);\r\n current.family = value;\r\n const fp = this.changeFont(SmoScore.fontPurposes.ENGRAVING, 'engraving', current);\r\n if (isEngravingFont(fp.family)) {\r\n this.view.setEngravingFontFamily(fp.family);\r\n }\r\n }\r\n set chordFont(fontInfo: FontInfo) {\r\n const fp = this.changeFont(SmoScore.fontPurposes.CHORDS, 'chords', fontInfo);\r\n this.view.setChordFont(this.toInfo(fp));\r\n\r\n this.changed = true;\r\n }\r\n get chordFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.CHORDS);\r\n }\r\n set lyricFont(fontInfo: FontInfo) {\r\n this.changed = true;\r\n const fp = this.changeFont(SmoScore.fontPurposes.LYRICS, 'lyrics', fontInfo);\r\n this.view.setLyricFont(this.toInfo(fp));\r\n }\r\n get lyricFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.LYRICS);\r\n }\r\n}\r\nexport class SuiScoreFontDialog extends SuiDialogAdapterBase {\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Fonts', elements:\r\n [{\r\n smoName: 'engravingFont',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n label: 'Engraving Font',\r\n options: [{\r\n value: 'Bravura',\r\n label: 'Bravura'\r\n }, {\r\n value: 'Gonville',\r\n label: 'Gonville'\r\n }, {\r\n value: 'Petaluma',\r\n label: 'Petaluma'\r\n }, {\r\n value: 'Leland',\r\n label: 'Leland'\r\n }]\r\n }, {\r\n smoName: 'chordFont',\r\n classes: 'chord-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Chord Font'\r\n }, {\r\n smoName: 'lyricFont',\r\n classes: 'lyric-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Lyric Font'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreFontDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreFontAdapter(params.view);\r\n super(SuiScoreFontDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiGlobalLayoutAdapter extends SuiComponentAdapter {\r\n scoreLayout: SmoGlobalLayout;\r\n backup: SmoGlobalLayout;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreLayout = this.view.score.layoutManager!.globalLayout;\r\n this.backup = this.view.score.layoutManager!.getGlobalLayout();\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n async writeValue(attr: GlobalLayoutAttributes, value: number) {\r\n if (this.scoreLayout[attr] === value) {\r\n return;\r\n }\r\n this.scoreLayout[attr] = value;\r\n await this.view.setGlobalLayout(this.scoreLayout)\r\n this.changed = true;\r\n }\r\n get noteSpacing() {\r\n return this.scoreLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.scoreLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.scoreLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.scoreLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeValue('svgScale', value);\r\n }\r\n get zoomScale() {\r\n return this.scoreLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeValue('zoomScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.scoreLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeValue('maxMeasureSystem', value);\r\n }\r\n\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.scoreLayout.pageWidth, this.scoreLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.scoreLayout.pageWidth = dims.width;\r\n this.scoreLayout.pageHeight = dims.height;\r\n }\r\n this.view.setGlobalLayout(this.scoreLayout)\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.setGlobalLayout(this.backup);\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiGlobalLayoutDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Global Settings', elements:\r\n [{\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measure/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiGlobalLayoutAdapter(params.view);\r\n super(SuiGlobalLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffHairpin, } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SmoHairpinNumberParams = 'xOffsetLeft' | 'xOffsetRight' | 'yOffset' | 'height' | 'position';\r\nexport class SuiHairpinAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffHairpin;\r\n hairpin: SmoStaffHairpin;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, hairpin: SmoStaffHairpin) {\r\n super(view);\r\n this.hairpin = hairpin;\r\n this.view = view;\r\n this.backup = new SmoStaffHairpin(this.hairpin);\r\n this.backup.attrs.id = hairpin.attrs.id;\r\n this.backup.associatedStaff = hairpin.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.hairpin, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.hairpin);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoHairpinNumberParams, val: number) {\r\n const current = new SmoStaffHairpin(this.hairpin);\r\n this.hairpin[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.hairpin);\r\n this.changed = true;\r\n }\r\n get xOffsetLeft() {\r\n return this.hairpin.xOffsetLeft;\r\n }\r\n set xOffsetLeft(val: number) {\r\n this.updateValue('xOffsetLeft', val);\r\n }\r\n get xOffsetRight() {\r\n return this.hairpin.xOffsetRight;\r\n }\r\n set xOffsetRight(val: number) {\r\n this.updateValue('xOffsetRight', val);\r\n }\r\n get yOffset() {\r\n return this.hairpin.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateValue('yOffset', val);\r\n }\r\n get height() {\r\n return this.hairpin.height;\r\n }\r\n set height(val: number) {\r\n this.updateValue('height', val);\r\n }\r\n get position() {\r\n return this.hairpin.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n}\r\nexport class SuiHairpinAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Hairpin Properties', elements:\r\n [{\r\n smoName: 'height',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Height'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Shift'\r\n }, {\r\n smoName: 'xOffsetRight',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Shift'\r\n }, {\r\n smoName: 'xOffsetLeft',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Shift'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiHairpinAdapter(parameters.view, parameters.modifier);\r\n super(SuiHairpinAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiInstrumentAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n backup: SmoInstrument;\r\n selections: SmoSelection[];\r\n selector: SmoSelector;\r\n applies: number = SuiInstrumentDialog.applyTo.selected;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n this.selections = SmoSelection.getMeasureList(this.view.tracker.selections);\r\n this.selector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n this.backup = new SmoInstrument(this.instrument);\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n get applyTo() {\r\n return this.applies;\r\n }\r\n set applyTo(value: number) {\r\n this.applies = value;\r\n if (value === SuiInstrumentDialog.applyTo.score) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, 0);\r\n } else if (this.applyTo === SuiInstrumentDialog.applyTo.remaining) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, this.selector.measure);\r\n } else {\r\n this.selections = this.view.tracker.selections;\r\n }\r\n }\r\n async commit() {\r\n // hack: the family name for musicxml purposes is here.\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(this.instrument.instrument);\r\n await this.view.changeInstrument(this.instrument, this.selections);\r\n }\r\n async cancel() {\r\n await this.view.changeInstrument(this.backup, this.selections);\r\n }\r\n async remove() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiInstrumentDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Name'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass (bowed)'\r\n }, {\r\n value: 'jazzBass',\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 'eGuitar',\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'flute',\r\n label: 'Flute'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [{\r\n value: 'treble',\r\n label:'Treble'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'tenor',\r\n label: 'Tenor'\r\n }, {\r\n value: 'alto',\r\n label: 'Alto'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }]\r\n }, {\r\n smoName: 'applyTo',\r\n defaultValue: SuiInstrumentDialog.applyTo.score,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply To',\r\n options: [{\r\n value: SuiInstrumentDialog.applyTo.score,\r\n label: 'Score'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.selected,\r\n label: 'Selected Measures'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.remaining,\r\n label: 'Remaining Measures'\r\n }]\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiInstrumentAdapter(parameters.view);\r\n super(SuiInstrumentDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { SmoLibrary } from '../fileio/library';\r\nimport { SuiDialogParams } from './dialog';\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { TreeComponentOption, SuiTreeComponent } from './components/tree';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface LibraryDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n label: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\nexport interface LibraryDefinition {\r\n label: string,\r\n elements: LibraryDefinitionElement[],\r\n staticText: Record[]\r\n}\r\nexport class SuiLibraryAdapter extends SuiComponentAdapter {\r\n topLib: SmoLibrary;\r\n elements: LibraryDefinition | null = null;\r\n selectedUrl: string = '';\r\n libHash: Record = {};\r\n config: SmoUiConfiguration;\r\n selectedLib: SmoLibrary | null;\r\n tree: Record = {};\r\n // If the selected lib is a leaf node (a score), this is the same as that\r\n selectedScore: SmoLibrary | null = null;\r\n constructor(view: SuiScoreViewOperations, config: SmoUiConfiguration) {\r\n super(view);\r\n this.config = config;\r\n this.topLib = new SmoLibrary({ url: this.config.libraryUrl });\r\n this.libHash = {};\r\n this.selectedLib = null;\r\n }\r\n loadPromise() {\r\n\r\n }\r\n initialize(): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n self.topLib.load().then(() => {\r\n self.libHash[self.topLib.url!] = self.topLib;\r\n resolve();\r\n });\r\n });\r\n }\r\n static addChildRecurse(options: TreeComponentOption[], parent: SmoLibrary, child: SmoLibrary) {\r\n options.push({ label: child.metadata.name, value: child.url, parent: parent.url, format: child.format, expanded: false });\r\n child.children.forEach((gchild) => {\r\n SuiLibraryAdapter.addChildRecurse(options, child, gchild);\r\n });\r\n }\r\n static createOptions(topLib: SmoLibrary) {\r\n const options: TreeComponentOption[] = [];\r\n topLib.children.forEach((child) => {\r\n SuiLibraryAdapter.addChildRecurse(options, topLib, child);\r\n });\r\n return options;\r\n }\r\n buildTreeRecurse(children: SmoLibrary[]) {\r\n children.forEach((child) => {\r\n this.tree[child.url!] = child;\r\n this.buildTreeRecurse(child.children);\r\n });\r\n }\r\n buildTree() {\r\n this.tree = {};\r\n this.buildTreeRecurse(this.topLib.children);\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n }\r\n async loadOptions(options: TreeComponentOption[]): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n if (self.selectedLib!.format === 'library') {\r\n if (!self.selectedLib!.loaded) {\r\n self.selectedLib!.load().then(() => {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n });\r\n } else {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n }\r\n }\r\n else {\r\n self.selectedScore = this.selectedLib;\r\n resolve();\r\n }\r\n });\r\n }\r\n async _loadScore() {\r\n await this.view.loadRemoteScore(this.selectedScore!.url!);\r\n }\r\n get selectedLibrary(): SmoLibrary | null {\r\n return this.selectedLib;\r\n }\r\n get smoLibrary() {\r\n return this.selectedUrl;\r\n }\r\n set smoLibrary(value: string) {\r\n this.selectedUrl = value;\r\n this.buildTree();\r\n this.selectedLib = this.tree[this.selectedUrl];\r\n if (this.selectedLib.format !== 'library') {\r\n this.selectedScore = this.selectedLib;\r\n } else {\r\n this.selectedScore = null;\r\n }\r\n }\r\n}\r\n// ## SuiLibraryDialog\r\n// Traverse the library nodes or load a score\r\nexport class SuiLibraryDialog extends SuiDialogAdapterBase {\r\n static dialogElements: LibraryDefinition = {\r\n label: 'Music Library', elements: [{\r\n smoName: 'smoLibrary',\r\n control: 'SuiTreeComponent',\r\n root: '',\r\n label: 'Selection',\r\n options: []\r\n }],\r\n staticText: []\r\n };\r\n static _createElements(topLib: SmoLibrary) {\r\n const elements: LibraryDefinition = JSON.parse(JSON.stringify(SuiLibraryDialog.dialogElements));\r\n const tree = elements.elements[0];\r\n tree.root = topLib.url!;\r\n (tree.options as any) = SuiLibraryAdapter.createOptions(topLib);\r\n return elements;\r\n }\r\n static _createAndDisplay(parameters: SuiDialogParams, adapter: SuiLibraryAdapter) {\r\n const elements = SuiLibraryDialog._createElements(adapter.topLib);\r\n const dg = new SuiLibraryDialog(parameters, elements, adapter);\r\n dg.display();\r\n }\r\n /** Library requires a load first, so createAndDisplayDialog won't work on it */\r\n static async createAndDisplay(parameters: SuiDialogParams, config: SmoUiConfiguration) {\r\n const adapter = new SuiLibraryAdapter(parameters.view, config);\r\n await adapter.initialize();\r\n SuiLibraryDialog._createAndDisplay(parameters, adapter);\r\n }\r\n constructor(parameters: SuiDialogParams, dialogElements: LibraryDefinition, adapter: SuiLibraryAdapter) {\r\n super(dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n if (this.adapter.selectedScore !== null) {\r\n await this.adapter._loadScore();\r\n } else {\r\n this.complete();\r\n }\r\n }\r\n get smoLibraryCtrl() {\r\n return this.cmap.smoLibraryCtrl as SuiTreeComponent;\r\n }\r\n async changed() {\r\n const okButton = $(this.dgDom.element).find('.ok-button');\r\n super.changed();\r\n if (this.adapter.selectedLib!.format === 'library') {\r\n $(okButton).prop('disabled', true);\r\n const options: TreeComponentOption[] = [];\r\n await this.adapter.loadOptions(options);\r\n this.smoLibraryCtrl.updateOptions(options);\r\n $(this.smoLibraryCtrl._getInputElement()).find('li[data-value=\"'+this.smoLibraryCtrl.getValue()+'\"] button.expander').click();\r\n } else {\r\n $(okButton).prop('disabled', false);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiLyricComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoSelector, SmoSelection } from '../../smo/xform/selections'\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SmoRenderConfiguration } from '../../render/sui/configuration';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n\r\nfunction isSmoLyric(modifier: any):modifier is SmoLyric {\r\n return modifier?.ctor === 'SmoLyric';\r\n}\r\nexport class SuiLyricDialog extends SuiDialogBase {\r\n static get ctor() {\r\n return 'SuiLyricDialog';\r\n }\r\n static get idleLyricTime() {\r\n return 5000;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Lyric Editor', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Verse',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }, {\r\n value: 3,\r\n label: '4'\r\n }\r\n ]\r\n }, {\r\n smoName: 'translateY',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'lyricEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiLyricComponent',\r\n label: 'Edit Lyrics',\r\n options: []\r\n },\r\n ], staticText: [\r\n { doneEditing: 'Done Editing Lyrics' },\r\n { undo: 'Undo Lyrics' },\r\n { label: 'Lyric Editor' }\r\n ]\r\n };\r\n originalRefreshTimer: number;\r\n modifier: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n config: SmoRenderConfiguration;\r\n verse: number = 0;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiLyricDialog.dialogElements, parameters);\r\n this.config = this.view.config;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n this.originalRefreshTimer = this.config.idleRedrawTime;\r\n this.config.idleRedrawTime = SuiLyricDialog.idleLyricTime;\r\n this.verse = 0;\r\n }\r\n get lyricEditorCtrl(): SuiLyricComponent {\r\n return this.cmap.lyricEditorCtrl as SuiLyricComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get verseCtrl(): SuiDropdownComponent {\r\n return this.cmap.verseCtrl as SuiDropdownComponent;\r\n }\r\n display() {\r\n super.display();\r\n $(this.dgDom.element).find('.smoControl').each((ix: number, ctrl: any) => {\r\n if (!$(ctrl).hasClass('cbLyricEdit')) {\r\n $(ctrl).addClass('fold-textedit');\r\n }\r\n });\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n\r\n if (this.lyricEditorCtrl.session && this.lyricEditorCtrl.session.lyric) {\r\n const lyric = this.lyricEditorCtrl.session.lyric;\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size,\r\n weight: 'normal'\r\n });\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.modifier = lyric;\r\n this.verse = lyric.verse;\r\n this.selector = selector;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n _focusSelection() {\r\n const selection = this.lyricEditorCtrl.session?.selection;\r\n const note = selection?.note;\r\n const box: SvgBox | null = note?.logicalBox ?? null;\r\n if (box) {\r\n this.view.scroller.scrollVisibleBox(this.view.renderer.pageMap.svgToClient(box));\r\n }\r\n }\r\n changed() {\r\n this.lyricEditorCtrl.verse = parseInt(this.verseCtrl.getValue().toString(), 10);\r\n\r\n // TODO: make these undoable\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setLyricFont({ 'family': fontInfo.family, size: fontInfo.size, weight: 'normal' });\r\n }\r\n if (this.translateYCtrl && this.modifier && this.selector) {\r\n this.modifier.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.modifier);\r\n }\r\n }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n this.lyricEditorCtrl.startEditSession();\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.lyricEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.lyricEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n _complete() {\r\n if (this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.endSession();\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.config.idleRedrawTime = this.originalRefreshTimer;\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoMeasureFormat, SmoMeasureFormatNumberAttributes, SmoMeasueFormatBooleanAttributes } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiMeasureFormatAdapter extends SuiComponentAdapter {\r\n format: SmoMeasureFormat;\r\n backup: SmoMeasureFormat;\r\n measure: SmoMeasure;\r\n renumberIndex: number;\r\n originalIndex: number;\r\n edited: boolean = false;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.format = measure.format;\r\n this.renumberIndex = this.originalIndex = measure.measureNumber.localIndex;\r\n this.backup = new SmoMeasureFormat(this.format);\r\n this.measure = measure;\r\n }\r\n writeNumber(param: SmoMeasureFormatNumberAttributes, value: number) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoMeasueFormatBooleanAttributes, value: boolean) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.edited) {\r\n await this.view.setMeasureFormat(this.backup);\r\n }\r\n if (this.localIndex !== this.originalIndex) {\r\n await this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.originalIndex);\r\n }\r\n }\r\n get padLeft() {\r\n return this.format.padLeft;\r\n }\r\n set padLeft(value: number) {\r\n if (value > 0) {\r\n $('.attributeDialog .attributeModal').addClass('pad-left-select');\r\n } else {\r\n $('.attributeDialog .attributeModal').removeClass('pad-left-select');\r\n }\r\n this.writeNumber('padLeft', value);\r\n }\r\n get skipMeasureCount() {\r\n return this.format.skipMeasureCount;\r\n }\r\n set skipMeasureCount(value: boolean) {\r\n this.writeBoolean('skipMeasureCount', value);\r\n }\r\n get localIndex(): number {\r\n return this.renumberIndex;\r\n }\r\n set localIndex(value: number) {\r\n if (this.renumberIndex !== value && value >= 0) {\r\n this.renumberIndex = value;\r\n this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.localIndex);\r\n }\r\n }\r\n get forceRest() {\r\n return this.format.forceRest;\r\n }\r\n set forceRest(value: boolean) {\r\n this.writeBoolean('forceRest', value);\r\n }\r\n get repeatSymbol() {\r\n return this.measure.repeatSymbol;\r\n }\r\n set repeatSymbol(value: boolean) {\r\n const repeatCount = value ? 1 : 0;\r\n this.view.updateRepeatCount(repeatCount);\r\n this.measure.repeatSymbol = value;\r\n this.measure.repeatCount = repeatCount;\r\n }\r\n get restBreak() {\r\n return this.format.restBreak;\r\n }\r\n set restBreak(value: boolean) {\r\n this.writeBoolean('restBreak', value);\r\n }\r\n get customStretch() {\r\n return this.format.customStretch;\r\n }\r\n set customStretch(value: number) {\r\n this.writeNumber('customStretch', value);\r\n }\r\n get customProportion() {\r\n return this.format.proportionality;\r\n }\r\n set customProportion(value: number) {\r\n this.writeNumber('proportionality', value);\r\n }\r\n get autoJustify() {\r\n return this.format.autoJustify;\r\n }\r\n set autoJustify(value: boolean) {\r\n this.writeBoolean('autoJustify', value);\r\n }\r\n get padAllInSystem() {\r\n return this.format.padAllInSystem;\r\n }\r\n set padAllInSystem(value: boolean) {\r\n this.writeBoolean('padAllInSystem', value);\r\n }\r\n get systemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n set systemBreak(value: boolean) {\r\n this.writeBoolean('systemBreak', value);\r\n }\r\n}\r\n// ## measureDialogs.js\r\n// This file contains dialogs that affect all measures at a certain position,\r\n// such as tempo or time signature.\r\nexport class SuiMeasureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Measure Properties',\r\n elements:\r\n [{\r\n smoName: 'padLeft',\r\n control: 'SuiRockerComponent',\r\n label: 'Pad Left (px)'\r\n }, {\r\n smoName: 'customStretch',\r\n control: 'SuiRockerComponent',\r\n label: 'Stretch Contents'\r\n }, {\r\n smoName: 'customProportion',\r\n control: 'SuiRockerComponent',\r\n increment: 10,\r\n label: 'Proportionalality'\r\n }, {\r\n smoName: 'localIndex',\r\n control: 'SuiRockerComponent',\r\n increment: 1,\r\n label: 'Measure Number'\r\n }, {\r\n smoName: 'padAllInSystem',\r\n control: 'SuiToggleComponent',\r\n label: 'Pad all measures in system'\r\n }, {\r\n smoName: 'autoJustify',\r\n control: 'SuiToggleComponent',\r\n label: 'Justify Columns'\r\n }, {\r\n smoName: 'restBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'Break Multimeasure Rest in Part'\r\n }, {\r\n smoName: 'forceRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Force Multimeasure Rest'\r\n }, {\r\n smoName: 'repeatSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Repeat Symbol'\r\n }, {\r\n smoName: 'skipMeasureCount',\r\n control: 'SuiToggleComponent',\r\n label: 'Skip in max measure count'\r\n }, {\r\n smoName: 'systemBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'System break before this measure'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n const adapter = new SuiMeasureFormatAdapter(parameters.view, measure);\r\n super(SuiMeasureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiNewPartAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n alignWithPreviousVal: boolean = true;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n }\r\n set alignWithPrevious(val: boolean) {\r\n this.alignWithPreviousVal = val;\r\n }\r\n get alignWithPrevious() {\r\n return this.alignWithPreviousVal;\r\n }\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n }\r\n async commit() {\r\n const staffParams: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n staffParams.staffId = this.view.storeScore.staves.length;\r\n staffParams.measureInstrumentMap[0] = this.instrument;\r\n staffParams.alignWithPrevious = this.alignWithPreviousVal;\r\n await this.view.addStaff(staffParams);\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiNewPartDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'alignWithPrevious',\r\n control: 'SuiToggleComponent',\r\n label: 'Align Notes with Previous Staff'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [ {\r\n label: 'Treble Clef Staff',\r\n value: 'treble'\r\n }, {\r\n label: 'Bass Clef Staff',\r\n value: 'bass'\r\n }, {\r\n label: 'Alto Clef Staff',\r\n value: 'alto'\r\n }, {\r\n label: 'Tenor',\r\n value: 'tenor'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }] \r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiNewPartAdapter(parameters.view);\r\n super(SuiNewPartDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoPageLayout, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPageLayoutAdapter extends SuiComponentAdapter {\r\n static get layoutTypes(): Record {\r\n return {\r\n 'all': -1,\r\n 'remaining': -2,\r\n 'page': -3\r\n }\r\n }\r\n layouts: SmoPageLayout[];\r\n backup: SmoPageLayout[] = [];\r\n currentPage: number;\r\n changed: boolean = false;\r\n currentLayout: SmoPageLayout;\r\n layoutManager: SmoLayoutManager;\r\n view: SuiScoreViewOperations\r\n applyTo: number = SuiPageLayoutAdapter.layoutTypes.all;\r\n options: DialogDefinitionOption[] = [];\r\n async updateLayouts() {\r\n let i = 0;\r\n let startPage = this.currentPage;\r\n let endPage = this.layouts.length;\r\n if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.page) {\r\n endPage = startPage;\r\n } else if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.all) {\r\n startPage = 0;\r\n }\r\n await this.view.setPageLayouts(this.currentLayout, startPage, endPage);\r\n this.changed = true;\r\n }\r\n get enablePages() {\r\n return this.layouts.length > 1;\r\n }\r\n get applyToPage() {\r\n return this.applyTo;\r\n }\r\n set applyToPage(value: number) {\r\n this.applyTo = value;\r\n this.updateLayouts();\r\n }\r\n set leftMargin(value: number) {\r\n this.currentLayout.leftMargin = value;\r\n this.updateLayouts();\r\n }\r\n get leftMargin() {\r\n return this.currentLayout.leftMargin;\r\n }\r\n get rightMargin() {\r\n return this.currentLayout.rightMargin;\r\n }\r\n set rightMargin(value: number) {\r\n this.currentLayout.rightMargin = value;\r\n this.updateLayouts();\r\n }\r\n get topMargin() {\r\n return this.currentLayout.topMargin;\r\n }\r\n set topMargin(value) {\r\n this.currentLayout.topMargin = value;\r\n this.updateLayouts();\r\n }\r\n get bottomMargin() {\r\n return this.currentLayout.bottomMargin;\r\n }\r\n set bottomMargin(value) {\r\n this.currentLayout.bottomMargin = value;\r\n this.updateLayouts();\r\n }\r\n get interGap() {\r\n return this.currentLayout.interGap;\r\n }\r\n set interGap(value) {\r\n this.currentLayout.interGap = value;\r\n this.updateLayouts();\r\n }\r\n get intraGap() {\r\n return this.currentLayout.intraGap;\r\n }\r\n set intraGap(value) {\r\n this.currentLayout.intraGap = value;\r\n this.updateLayouts();\r\n }\r\n async cancel() {\r\n let i = 0;\r\n if (!this.changed) {\r\n return;\r\n }\r\n for (i = 0; i < this.backup.length; ++i) {\r\n // Avoid multiple page rerender...\r\n this.view._setPageLayout(this.backup[i], i);\r\n }\r\n await this.view.refreshViewport();\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n let i = 0;\r\n this.view = view;\r\n this.layoutManager = this.view.score.layoutManager!;\r\n this.currentPage = this.view.getFocusedPage();\r\n for (i = 0; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.backup.push(new SmoPageLayout(this.layoutManager.pageLayouts[i]));\r\n }\r\n for (i = 1; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.options.push({ value: i + 1, label: 'Page ' + (i + 1) });\r\n }\r\n this.layouts = this.layoutManager.getPageLayouts();\r\n this.currentLayout = this.layoutManager.pageLayouts[this.currentPage];\r\n if (this.layoutManager.pageLayouts.length === 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n } else {\r\n if (this.currentPage >= 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.remaining;\r\n } else {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n }\r\n }\r\n }\r\n}\r\n// ## SuiLayoutDialog\r\n// The layout dialog has page-specific layout parameters\r\nexport class SuiPageLayoutDialog extends SuiDialogAdapterBase {\r\n static get layoutParams() {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Page Layouts', elements:\r\n [{\r\n smoName: 'applyToPage',\r\n defaultValue: -1,\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply to Page',\r\n dataType: 'int',\r\n options: [{\r\n value: -1,\r\n label: 'All'\r\n }, {\r\n value: -2,\r\n label: 'All Remaining'\r\n }, {\r\n value: 1,\r\n label: 'Page 1'\r\n }]\r\n }, {\r\n smoName: 'leftMargin',\r\n defaultValue: SmoPageLayout.defaults.leftMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Margin (px)'\r\n }, {\r\n smoName: 'rightMargin',\r\n defaultValue: SmoPageLayout.defaults.rightMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Margin (px)'\r\n }, {\r\n smoName: 'topMargin',\r\n defaultValue: SmoPageLayout.defaults.topMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Top Margin (px)'\r\n }, {\r\n smoName: 'bottomMargin',\r\n defaultValue: SmoPageLayout.defaults.bottomMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Bottom Margin (px)'\r\n }, {\r\n smoName: 'interGap',\r\n defaultValue: SmoPageLayout.defaults.interGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Inter-System Margin'\r\n }, {\r\n smoName: 'intraGap',\r\n defaultValue: SmoPageLayout.defaults.intraGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Intra-System Margin'\r\n }],\r\n staticText: [\r\n { all: 'Entire Score' },\r\n { remaining: 'Remaining Pages' },\r\n { current: 'Current Page' }\r\n ]\r\n };\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPageLayoutAdapter(params.view);\r\n super(SuiPageLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoPartInfo, SmoPartInfoStringType } from '../../smo/data/partInfo';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPartInfoAdapter extends SuiComponentAdapter {\r\n partInfo: SmoPartInfo;\r\n backup: SmoPartInfo;\r\n selection: SmoSelection;\r\n changed: boolean = false;\r\n currentView: ViewMapEntry[] = [];\r\n resetPart: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n const selector = SmoSelector.default;\r\n this.selection = SmoSelection.measureSelection(this.view.score, selector.staff, selector.measure)!;\r\n this.partInfo = new SmoPartInfo(this.selection.staff.partInfo);\r\n this.backup = new SmoPartInfo(this.selection.staff.partInfo);\r\n }\r\n async update() {\r\n this.changed = true; \r\n // Since update will change the displayed score, wait for any display change to complete first.\r\n await this.view.renderer.updatePromise();\r\n await this.view.updatePartInfo(this.partInfo);\r\n }\r\n writeLayoutValue(attr: GlobalLayoutAttributes, value: number) {\r\n // no change?\r\n if (this.partInfo.layoutManager.globalLayout[attr] === value) {\r\n return;\r\n }\r\n this.partInfo.layoutManager.globalLayout[attr] = value;\r\n this.update();\r\n }\r\n writeStringValue(attr: SmoPartInfoStringType, value: string) {\r\n if (this.partInfo[attr] === value) {\r\n return;\r\n }\r\n this.partInfo[attr] = value;\r\n this.changed = true;\r\n }\r\n get expandMultimeasureRest() {\r\n return this.partInfo.expandMultimeasureRests;\r\n }\r\n set expandMultimeasureRest(value: boolean) {\r\n this.partInfo.expandMultimeasureRests = value;\r\n this.resetPart = true;\r\n this.update();\r\n }\r\n get noteSpacing() {\r\n return this.partInfo.layoutManager.globalLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeLayoutValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.partInfo.layoutManager.globalLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeLayoutValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.partInfo.layoutManager.globalLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeLayoutValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.partInfo.layoutManager.globalLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeLayoutValue('svgScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.partInfo.layoutManager.globalLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeLayoutValue('maxMeasureSystem', value);\r\n }\r\n get zoomScale() {\r\n return this.partInfo.layoutManager.globalLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeLayoutValue('zoomScale', value);\r\n }\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.partInfo.layoutManager.globalLayout.pageWidth, this.partInfo.layoutManager.globalLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.partInfo.layoutManager.globalLayout.pageWidth = dims.width;\r\n this.partInfo.layoutManager.globalLayout.pageHeight = dims.height;\r\n }\r\n this.update();\r\n }\r\n get partName(): string {\r\n return this.partInfo.partName;\r\n }\r\n set partName(value: string) {\r\n this.writeStringValue('partName', value);\r\n }\r\n get partAbbreviation(): string {\r\n return this.partInfo.partAbbreviation;\r\n }\r\n set partAbbreviation(value: string) {\r\n this.writeStringValue('partAbbreviation', value);\r\n }\r\n get includeNext(): boolean {\r\n return this.partInfo.stavesAfter === 1 && this.partInfo.stavesBefore === 0;\r\n }\r\n set includeNext(value: boolean) {\r\n const oldValue = this.partInfo.stavesAfter;\r\n if (value) {\r\n this.partInfo.stavesAfter = 1;\r\n } else {\r\n this.partInfo.stavesAfter = 0;\r\n }\r\n if (oldValue !== this.partInfo.stavesAfter) {\r\n // special case for a 2-stave score. The score and the part are the same so we stick to \r\n // score view.\r\n if (this.partInfo.stavesAfter === 1 && this.view.storeScore.staves.length === 2) {\r\n this.update().then(() => {\r\n this.view.viewAll();\r\n });\r\n return;\r\n }\r\n }\r\n this.update();\r\n }\r\n get cueInScore(): boolean {\r\n return this.partInfo.cueInScore;\r\n }\r\n set cueInScore(value: boolean) {\r\n this.partInfo.cueInScore = value;\r\n this.update();\r\n }\r\n get preserveTextGroups(): boolean {\r\n return this.partInfo.preserveTextGroups;\r\n }\r\n set preserveTextGroups(value: boolean) {\r\n if (value === true && this.partInfo.textGroups.length === 0) {\r\n this.view.score.textGroups.forEach((tg) => {\r\n const ngrp: SmoTextGroup = SmoTextGroup.deserializePreserveId(tg.serialize()) as SmoTextGroup;\r\n this.partInfo.textGroups.push(ngrp);\r\n });\r\n }\r\n this.partInfo.preserveTextGroups = value;\r\n this.update();\r\n }\r\n async commit() {\r\n if (this.changed) {\r\n await this.update();\r\n }\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.partInfo = this.backup;\r\n await this.update();\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiPartInfoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Part Settings', elements:\r\n [{\r\n smoName: 'partName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'partAbbreviation',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Abbrev.'\r\n }, {\r\n smoName: 'preserveTextGroups',\r\n control: 'SuiToggleComponent',\r\n label: 'Part-specific text'\r\n }, {\r\n smoName: 'cueInScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Show as Cues in score'\r\n }, {\r\n smoName: 'includeNext',\r\n control: 'SuiToggleComponent',\r\n label: 'Include Next Staff in Part'\r\n }, {\r\n smoName: 'expandMultimeasureRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Expand Multimeasure Rests'\r\n }, {\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measures/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPartInfoAdapter(params.view);\r\n super(SuiPartInfoDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n if (this.cmap.includeNextCtrl.changeFlag) {\r\n const includeNext = this.cmap.includeNextCtrl as SuiToggleComponent;\r\n if (includeNext.getValue()) {\r\n const partMap = this.view.getPartMap();\r\n if (this.view.storeScore.staves.length === 2) {\r\n this.complete();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScorePreferences } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\n\r\nexport class SuiScorePreferencesAdapter extends SuiComponentAdapter {\r\n preferences: SmoScorePreferences;\r\n backup: SmoScorePreferences;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.preferences = new SmoScorePreferences(view.score.preferences);\r\n this.backup = JSON.parse(JSON.stringify(this.preferences));\r\n }\r\n get autoAdvance(): boolean {\r\n return this.preferences.autoAdvance;\r\n }\r\n set autoAdvance(value: boolean) {\r\n this.preferences.autoAdvance = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get autoPlay(): boolean {\r\n return this.preferences.autoPlay;\r\n }\r\n set autoPlay(value: boolean) {\r\n this.preferences.autoPlay = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get showPiano(): boolean {\r\n return this.preferences.showPiano;\r\n }\r\n set showPiano(value: boolean) {\r\n this.preferences.showPiano = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get hideEmptyLines(): boolean {\r\n return this.preferences.hideEmptyLines;\r\n }\r\n set hideEmptyLines(value: boolean) {\r\n this.preferences.hideEmptyLines = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultDupleDuration() {\r\n return this.preferences.defaultDupleDuration;\r\n }\r\n set defaultDupleDuration(value: number) {\r\n this.preferences.defaultDupleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultTripleDuration() {\r\n return this.preferences.defaultTripleDuration;\r\n }\r\n set defaultTripleDuration(value: number) {\r\n this.preferences.defaultTripleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get transposingScore() {\r\n return this.preferences.transposingScore;\r\n }\r\n set transposingScore(value: boolean) {\r\n this.preferences.transposingScore = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n async cancel() {\r\n const p1 = JSON.stringify(this.preferences);\r\n const p2 = JSON.stringify(this.backup);\r\n if (p1 !== p2) {\r\n await this.view.updateScorePreferences(this.backup);\r\n }\r\n }\r\n commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiScorePreferencesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences',\r\n elements: [{\r\n smoName: 'autoAdvance',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-advance after pitch'\r\n }, {\r\n smoName: 'autoPlay',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-play sounds for note entry'\r\n }, {\r\n smoName: 'showPiano',\r\n control: 'SuiToggleComponent',\r\n label: 'Show Piano widget'\r\n }, {\r\n smoName: 'transposingScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Tranpose Score'\r\n }, {\r\n smoName: 'hideEmptyLines',\r\n control: 'SuiToggleComponent',\r\n label: 'Hide Empty Lines'\r\n }, {\r\n smoName: 'defaultDupleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (even meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 4096,\r\n label: '1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }, {\r\n smoName: 'defaultTripleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (triple meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 6144,\r\n label: 'dotted 1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScorePreferencesAdapter(params.view);\r\n super(SuiScorePreferencesDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreInfo, SmoScoreInfoKeys } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupPurpose } from '../../smo/data/scoreText';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { TextCheckPair } from './components/textCheck';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiScoreIdentificationAdapter extends SuiComponentAdapter {\r\n scoreInfo: SmoScoreInfo;\r\n backup: SmoScoreInfo;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreInfo = this.view.score.scoreInfo;\r\n this.backup = JSON.parse(JSON.stringify(this.scoreInfo));\r\n }\r\n get title(): string {\r\n return this.scoreInfo.title;\r\n }\r\n set title(value: string) {\r\n this.scoreInfo.title = value;\r\n }\r\n get subTitle(): string {\r\n return this.scoreInfo.subTitle;\r\n }\r\n set subTitle(value: string) {\r\n this.scoreInfo.subTitle = value;\r\n }\r\n get composer(): string {\r\n return this.scoreInfo.composer;\r\n }\r\n set composer(value: string) {\r\n this.scoreInfo.composer = value;\r\n }\r\n get copyright(): string {\r\n return this.scoreInfo.copyright;\r\n }\r\n set copyright(value: string) {\r\n this.scoreInfo.copyright = value;\r\n }\r\n get name() {\r\n return this.scoreInfo.name;\r\n }\r\n set name(value: string) {\r\n this.scoreInfo.name = value;\r\n }\r\n async commit() {\r\n await this.view.updateScoreInfo(this.scoreInfo);\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n// ## SuiScoreIdentificationDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiScoreIdentificationDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences', elements:\r\n [{\r\n smoName: 'name',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Score Name',\r\n }, {\r\n smoName: 'title',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Title',\r\n }, {\r\n smoName: 'subTitle',\r\n control: 'SuiTextInputComponent',\r\n label: 'Sub Title',\r\n }, {\r\n smoName: 'composer',\r\n control: 'SuiTextInputComponent',\r\n label: 'Composer',\r\n }, {\r\n smoName: 'copyright',\r\n control: 'SuiTextInputComponent',\r\n label: 'Copyright'\r\n }],\r\n staticText: [\r\n { titleText: 'Title' },\r\n { subTitleText: 'Sub-title' },\r\n { copyrightText: 'Copyright' },\r\n { composerText: 'Composer' },\r\n { show: 'Show' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreIdentificationDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreIdentificationAdapter(params.view);\r\n super(SuiScoreIdentificationDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { StaffCheckComponent } from './components/staffComponents';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\nexport class SuiScoreViewAdapter extends SuiComponentAdapter {\r\n originalView: ViewMapEntry[];\r\n currentView: ViewMapEntry[];\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n this.originalView = JSON.parse(JSON.stringify(this.currentView));\r\n }\r\n async cancel() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.originalView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async commit() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.currentView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get scoreView(): ViewMapEntry[] {\r\n return this.currentView;\r\n }\r\n set scoreView(value: ViewMapEntry[]) {\r\n this.currentView = value;\r\n }\r\n}\r\n// ## SuiScoreViewDialog\r\n// decide which rows of the score to look at\r\nexport class SuiScoreViewDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score View', elements:\r\n [{\r\n smoName: 'scoreView',\r\n control: 'StaffCheckComponent',\r\n label: 'Show staff',\r\n }],\r\n staticText: []\r\n };\r\n originalValue: number[];\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiScoreViewAdapter(parameters.view);\r\n super(SuiScoreViewDialog.dialogElements, { adapter, ...parameters });\r\n this.originalValue = JSON.parse(JSON.stringify(this.view.getView()));\r\n }\r\n get scoreViewCtrl() {\r\n return this.cmap.scoreViewCtrl as StaffCheckComponent;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSlur, SlurNumberParams } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SlurNumber = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' | 'position_end' | 'cp1x'\r\n| 'cp1y' | 'cp2x' | 'cp2y';\r\nexport type SlurBool = 'invert';\r\nexport class SuiSlurAdapter extends SuiComponentAdapter {\r\nslur: SmoSlur;\r\nbackup: SmoSlur;\r\nchanged: boolean = false;\r\nupdating: boolean = false;\r\nconstructor(view: SuiScoreViewOperations, slur: SmoSlur) {\r\n super(view);\r\n this.slur = slur;\r\n this.view = view;\r\n this.backup = new SmoSlur(this.slur);\r\n // Set the same id so the erase works\r\n this.backup.attrs.id = slur.attrs.id;\r\n this.backup.associatedStaff = this.slur.associatedStaff;\r\n}\r\nwriteSlurNumber(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurNumber, value: number) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nwriteSlurBool(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurBool, value: boolean) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nasync cancel() {\r\n if (!this.changed) {\r\n return;\r\n }\r\n await this.view.addOrUpdateStaffModifier(this.slur, this.backup);\r\n}\r\nasync commit() {\r\n return PromiseHelpers.emptyPromise();\r\n}\r\nget resetAll(): boolean {\r\n return false;\r\n}\r\nset resetAll(value: boolean) {\r\n this.resetDefaults = value;\r\n const slurs: SmoSlur[] = [];\r\n const self = this;\r\n this.updating = true;\r\n const updateSlur = async (score: SmoScore, slur: SmoSlur) => {\r\n const params = SmoOperation.getDefaultSlurDirection(score, slur.startSelector, slur.endSelector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n const original = new SmoSlur(slur);\r\n SlurNumberParams.forEach((key) => {\r\n slur[key] = params[key]; \r\n });\r\n await self.view.addOrUpdateStaffModifier(original, slur);\r\n }\r\n new Promise((resolve) => {\r\n const nextSlur = () => {\r\n setTimeout(() => {\r\n if (slurs.length) {\r\n const slur = slurs.pop();\r\n updateSlur(self.view.score, slur!).then(() => {\r\n nextSlur();\r\n });\r\n } else {\r\n self.updating = false;\r\n resolve();\r\n }\r\n }, 1);\r\n }\r\n nextSlur();\r\n });\r\n this.view.score.staves.forEach((staff) => {\r\n staff.modifiers.filter((x) => x.ctor === 'SmoSlur').forEach((smoObj) => {\r\n const slur = smoObj as SmoSlur;\r\n slurs.push(slur);\r\n });\r\n });\r\n this.changed = true;\r\n}\r\nget resetDefaults(): boolean {\r\n return false;\r\n}\r\nset resetDefaults(value: boolean) {\r\n const params = SmoOperation.getDefaultSlurDirection(this.view.score, this.slur.startSelector, this.slur.endSelector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n SlurNumberParams.forEach((key) => {\r\n this.slur[key] = params[key]; \r\n });\r\n this.view.addOrUpdateStaffModifier(this.backup, this.slur);\r\n this.changed = true;\r\n}\r\nget cp2y(): number {\r\n return this.slur.cp2y;\r\n}\r\nset cp2y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2y', value);\r\n} \r\nget cp2x(): number {\r\n return this.slur.cp2x;\r\n}\r\nset cp2x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2x', value);\r\n} \r\nget cp1y(): number {\r\n return this.slur.cp1y;\r\n}\r\nset cp1y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1y', value);\r\n} \r\nget cp1x(): number {\r\n return this.slur.cp1x;\r\n}\r\nset cp1x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1x', value);\r\n} \r\nget invert(): boolean {\r\n return this.slur.invert;\r\n}\r\nset invert(value: boolean) {\r\n this.writeSlurBool(this.view, this.slur, 'invert', value);\r\n}\r\nget position_end(): number {\r\n return this.slur.position_end;\r\n}\r\nset position_end(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position_end', value);\r\n}\r\nget position(): number {\r\n return this.slur.position;\r\n}\r\nset position(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position', value);\r\n}\r\nget yOffset(): number {\r\n return this.slur.yOffset;\r\n}\r\nset yOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'yOffset', value);\r\n}\r\nget xOffset(): number {\r\n return this.slur.xOffset;\r\n}\r\nset xOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'xOffset', value);\r\n}\r\nget thickness(): number {\r\n return this.slur.thickness;\r\n}\r\nset thickness(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'thickness', value);\r\n}\r\nget spacing(): number {\r\n return this.slur.spacing;\r\n}\r\nset spacing(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'spacing', value);\r\n}\r\nasync remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n}\r\n}\r\nexport class SuiSlurAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = { \r\n label: 'Slur Properties', elements: [{\r\n smoName: 'spacing',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing'\r\n }, {\r\n smoName: 'thickness',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Thickness'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'position',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Start Position'\r\n }, {\r\n smoName: 'position_end',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'End Position'\r\n }, {\r\n smoName: 'invert',\r\n control: 'SuiToggleComponent',\r\n label: 'Invert'\r\n }, {\r\n smoName: 'resetDefaults',\r\n control: 'SuiToggleComponent',\r\n label: 'Defaults'\r\n }, {\r\n smoName: 'resetAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Reset All Slurs'\r\n }, {\r\n smoName: 'cp1x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 X'\r\n }, {\r\n smoName: 'cp1y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 Y'\r\n }, {\r\n smoName: 'cp2x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 X'\r\n }, {\r\n smoName: 'cp2y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 Y'\r\n }], staticText: []\r\n };\r\n disableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', true);\r\n }\r\n enableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', false);\r\n }\r\n modalPromise() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n const checkComplete = () => {\r\n setTimeout(() => {\r\n if (self.adapter.updating === false) { \r\n resolve();\r\n } else {\r\n checkComplete();\r\n } \r\n }, 200);\r\n };\r\n checkComplete();\r\n });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.adapter.updating) {\r\n const self = this;\r\n this.disableClose();\r\n this.modalPromise().then(() => {\r\n self.enableClose();\r\n });\r\n }\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSlurAdapter(parameters.view, parameters.modifier);\r\n super(SuiSlurAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffGroupDialogAdapter extends SuiComponentAdapter {\r\n staffGroup: SmoSystemGroup;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n // Reset the view so we can see all the staves\r\n this.view.viewAll();\r\n const staffGroup = this.view.score.getSystemGroupForStaff(selection);\r\n if (!staffGroup) {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(selection.selector));\r\n this.staffGroup = new SmoSystemGroup(params);\r\n } else {\r\n this.staffGroup = staffGroup;\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get leftConnector() {\r\n return this.staffGroup.leftConnector;\r\n }\r\n set leftConnector(val: number) {\r\n this.staffGroup.leftConnector = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n get staffGroups() {\r\n return this.staffGroup;\r\n }\r\n set staffGroups(val: SmoSystemGroup) {\r\n this.staffGroup = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n}\r\n// ## SuiStaffGroupDialog\r\n// A staff group is a grouping of staves that can be bracketed and justified\r\nexport class SuiStaffGroupDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Staff Group', elements:\r\n [{\r\n smoName: 'staffGroups',\r\n control: 'StaffAddRemoveComponent',\r\n label: 'Staves in Group',\r\n }, {\r\n smoName: 'leftConnector',\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Left Connector',\r\n options: [\r\n {\r\n value: SmoSystemGroup.connectorTypes.bracket,\r\n label: 'Bracket'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.brace,\r\n label: 'Brace'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.single,\r\n label: 'Single'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.double,\r\n label: 'Double'\r\n }]\r\n }],\r\n staticText: [\r\n { includeStaff: 'Include Staff' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiStaffGroupDialog(parameters);\r\n dg.display();\r\n }\r\n getModifier() {\r\n return this.adapter.staffGroups;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiStaffGroupDialogAdapter(parameters.view);\r\n super(SuiStaffGroupDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTempoText, SmoTempoNumberAttribute, SmoTempoStringAttribute, SmoTempoBooleanAttribute } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n\r\n\r\nexport class SuiTempoAdapter extends SuiComponentAdapter {\r\n smoTempoText: SmoTempoText;\r\n backup: SmoTempoText;\r\n applyToAllVal: boolean = false; \r\n applyToSelection: boolean = false;\r\n edited: boolean = false;\r\n measure: SmoMeasure;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.measure = measure;\r\n this.smoTempoText = new SmoTempoText(measure.tempo);\r\n this.backup = new SmoTempoText(this.smoTempoText);\r\n }\r\n writeNumber(param: SmoTempoNumberAttribute, value: number) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoTempoBooleanAttribute, value: boolean) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeString(param: SmoTempoStringAttribute, value: string) {\r\n (this.smoTempoText as any)[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async remove() {\r\n await this.view.removeTempo(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n }\r\n async cancel() {\r\n await this.view.updateTempoScore(this.measure, this.backup, this.applyToAll, this.applyToSelection);\r\n }\r\n get applyToAll() {\r\n return this.applyToAllVal;\r\n }\r\n set applyToAll(val: boolean) {\r\n this.applyToAllVal = val;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get tempoText() {\r\n return this.smoTempoText.tempoText;\r\n }\r\n set tempoText(value: string) {\r\n this.writeString('tempoText', value);\r\n }\r\n get tempoMode() {\r\n return this.smoTempoText.tempoMode;\r\n }\r\n set tempoMode(value: string) {\r\n this.writeString('tempoMode', value);\r\n }\r\n get customText() {\r\n return this.smoTempoText.customText;\r\n }\r\n set customText(value: string) {\r\n this.writeString('customText', value);\r\n }\r\n get bpm() {\r\n return this.smoTempoText.bpm;\r\n }\r\n set bpm(value: number) {\r\n this.writeNumber('bpm', value);\r\n }\r\n get display() {\r\n return this.smoTempoText.display;\r\n }\r\n set display(value: boolean) {\r\n this.writeBoolean('display', value);\r\n }\r\n get beatDuration() {\r\n return this.smoTempoText.beatDuration;\r\n }\r\n set beatDuration(value: number) {\r\n this.writeNumber('beatDuration', value);\r\n }\r\n get yOffset() {\r\n return this.smoTempoText.yOffset;\r\n }\r\n set yOffset(value: number) {\r\n this.writeNumber('yOffset', value);\r\n }\r\n}\r\n// ## SuiTempoDialog\r\n// Allow user to choose a tempo or tempo change.\r\nexport class SuiTempoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Tempo Properties',\r\n elements: [\r\n {\r\n smoName: 'tempoMode',\r\n defaultValue: SmoTempoText.tempoModes.durationMode,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Mode',\r\n options: [{\r\n value: 'duration',\r\n label: 'Duration (Beats/Minute)'\r\n }, {\r\n value: 'text',\r\n label: 'Tempo Text'\r\n }, {\r\n value: 'custom',\r\n label: 'Specify text and duration'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'customText',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom Text',\r\n classes: 'hide-when-text-mode'\r\n },\r\n {\r\n smoName: 'bpm',\r\n defaultValue: 120,\r\n control: 'SuiRockerComponent',\r\n label: 'Notes/Minute'\r\n },\r\n {\r\n smoName: 'beatDuration',\r\n defaultValue: 4096,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Unit for Beat',\r\n options: [{\r\n value: 4096,\r\n label: 'Quarter Note',\r\n }, {\r\n value: 2048,\r\n label: '1/8 note'\r\n }, {\r\n value: 6144,\r\n label: 'Dotted 1/4 note'\r\n }, {\r\n value: 8192,\r\n label: '1/2 note'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'tempoText',\r\n defaultValue: SmoTempoText.tempoTexts.allegro,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Text',\r\n classes: 'hide-when-not-text-mode',\r\n options: [{\r\n value: SmoTempoText.tempoTexts.larghissimo,\r\n label: 'Larghissimo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.grave,\r\n label: 'Grave'\r\n }, {\r\n value: SmoTempoText.tempoTexts.lento,\r\n label: 'Lento'\r\n }, {\r\n value: SmoTempoText.tempoTexts.largo,\r\n label: 'Largo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.larghetto,\r\n label: 'Larghetto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagio,\r\n label: 'Adagio'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagietto,\r\n label: 'Adagietto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante_moderato,\r\n label: 'Andante moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante,\r\n label: 'Andante'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andantino,\r\n label: 'Andantino'\r\n }, {\r\n value: SmoTempoText.tempoTexts.moderator,\r\n label: 'Moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegretto,\r\n label: 'Allegretto',\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegro,\r\n label: 'Allegro'\r\n }, {\r\n value: SmoTempoText.tempoTexts.vivace,\r\n label: 'Vivace'\r\n }, {\r\n value: SmoTempoText.tempoTexts.presto,\r\n label: 'Presto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.prestissimo,\r\n label: 'Prestissimo'\r\n }\r\n ]\r\n }, {\r\n smoName: 'applyToAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to all future measures?'\r\n }, {\r\n smoName: 'applyToSelection',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to selection?'\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display Tempo'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }\r\n ],\r\n staticText: []\r\n };\r\n showHideCustom(): void {\r\n if (this.adapter.tempoMode === 'custom') {\r\n this.cmap.customTextCtrl.show();\r\n } else {\r\n this.cmap.customTextCtrl.hide();\r\n }\r\n }\r\n changed() {\r\n super.changed();\r\n this.showHideCustom();\r\n }\r\n initialValue() {\r\n super.initialValue();\r\n this.showHideCustom();\r\n }\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n const measures = SmoSelection.getMeasureList(parameters.view.tracker.selections)\r\n .map((sel) => sel.measure);\r\n const measure = measures[0];\r\n const adapter = new SuiTempoAdapter(parameters.view, measure);\r\n super(SuiTempoDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\n\r\nimport { closeDialogPromise } from '../../common/htmlHelpers';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers, OutlineInfo } from '../../render/sui/svgHelpers';\r\nimport { SuiTextEditor } from '../../render/sui/textEdit';\r\n\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiDragText } from './components/dragText';\r\nimport { SuiTextInPlace } from './components/textInPlace';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SuiHelp } from '../help';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SuiTextBlockComponent } from './components/textInPlace';\r\n\r\nimport { EventHandler } from '../eventSource';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBlockDialog extends SuiDialogBase {\r\n get textEditorCtrl(): SuiTextInPlace {\r\n return this.cmap.textEditorCtrl as SuiTextInPlace;\r\n }\r\n get insertCodeCtrl(): SuiDropdownComponent {\r\n return this.cmap.insertCodeCtrl as SuiDropdownComponent;\r\n }\r\n get textDraggerCtrl(): SuiDragText {\r\n return this.cmap.textDraggerCtrl as SuiDragText;\r\n }\r\n get yCtrl(): SuiRockerComponent {\r\n return this.cmap.yCtrl as SuiRockerComponent;\r\n }\r\n get xCtrl(): SuiRockerComponent {\r\n return this.cmap.xCtrl as SuiRockerComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get textBlockCtrl(): SuiTextBlockComponent {\r\n return this.cmap.textBlockCtrl as SuiTextBlockComponent;\r\n }\r\n get paginationCtrl(): SuiDropdownComponent {\r\n return this.cmap.paginationCtrl as SuiDropdownComponent;\r\n }\r\n get attachToSelectorCtrl(): SuiToggleComponent {\r\n return this.cmap.attachToSelectorCtrl as SuiToggleComponent;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Properties', elements:\r\n [{\r\n smoName: 'textEditor',\r\n defaultValue: 0,\r\n control: 'SuiTextInPlace',\r\n classes: 'show-always hide-when-moving',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'insertCode',\r\n classes: 'show-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Insert Special',\r\n options: [\r\n { value: '@@@', label: 'Pages' },\r\n { value: '###', label: 'Page Number' }\r\n ]\r\n }, {\r\n smoName: 'textDragger',\r\n classes: 'hide-when-editing show-when-moving',\r\n defaultValue: 0,\r\n control: 'SuiDragText',\r\n label: 'Move Text',\r\n options: []\r\n }, {\r\n smoName: 'x',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'X Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'y',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: SmoScoreText.fontFamilies.times,\r\n control: 'SuiFontComponent',\r\n label: 'Font Information'\r\n },\r\n {\r\n smoName: 'textBlock',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: '',\r\n control: 'SuiTextBlockComponent',\r\n label: 'Text Block Properties'\r\n },\r\n { // {every:'every',even:'even',odd:'odd',once:'once'}\r\n smoName: 'pagination',\r\n defaultValue: SmoTextGroup.paginations.ONCE,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Behavior',\r\n startRow: true,\r\n options: [{ value: SmoTextGroup.paginations.ONCE, label: 'Once' },\r\n { value: SmoTextGroup.paginations.EVERY, label: 'Every' },\r\n { value: SmoTextGroup.paginations.ODD, label: 'Odd' },\r\n { value: SmoTextGroup.paginations.SUBSEQUENT, label: 'Subsequent' }\r\n ]\r\n }, {\r\n smoName: 'attachToSelector',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Attach to Selection'\r\n }],\r\n staticText: [\r\n { label: 'Text Properties' },\r\n { editorLabel: 'Done Editing Text' },\r\n { draggerLabel: 'Done Dragging Text' }\r\n ]\r\n };\r\n edited: boolean;\r\n isNew: boolean;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n textElement: any;\r\n mouseMoveHandler: EventHandler | null;\r\n mouseUpHandler: EventHandler | null;\r\n mouseDownHandler: EventHandler | null;\r\n mouseClickHandler: EventHandler | null;\r\n outlineRect: OutlineInfo | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n let edited = false;\r\n let isNew = false;\r\n const tracker = parameters.view.tracker;\r\n ['staffModifier', 'suggestion'].forEach((outlineType) => {\r\n if (tracker.outlines[outlineType]) {\r\n SvgHelpers.eraseOutline(tracker.outlines[outlineType]);\r\n }\r\n });\r\n const layout = parameters.view.score.layoutManager!.getGlobalLayout();\r\n\r\n // Create a new text modifier, if this is new text. Else use selection\r\n if (!parameters.modifier) {\r\n isNew = true;\r\n const textParams = SmoScoreText.defaults;\r\n const newText = new SmoScoreText(textParams);\r\n // convert scroll from screen coord to svg coord\r\n const svgScroll = tracker.renderer.pageMap.clientToSvg(SvgHelpers.smoBox(tracker.scroller.scrollState));\r\n newText.y += svgScroll.y;\r\n newText.x += svgScroll.x;\r\n if (tracker.selections.length > 0) {\r\n const sel = tracker.selections[0].measure.svg;\r\n if (typeof (sel.logicalBox) !== 'undefined') {\r\n if (sel.logicalBox.y >= newText.y) {\r\n newText.y = sel.logicalBox.y;\r\n newText.x = sel.logicalBox.x;\r\n }\r\n }\r\n }\r\n const grpParams = SmoTextGroup.defaults;\r\n grpParams.textBlocks = [{ text: newText, position: SmoTextGroup.relativePositions.LEFT, activeText: true }];\r\n const newGroup = new SmoTextGroup(grpParams);\r\n parameters.modifier = newGroup;\r\n parameters.modifier.setActiveBlock(newText);\r\n parameters.view.addTextGroup(parameters.modifier);\r\n edited = true;\r\n } else {\r\n // Make sure there is a score text to start the editing.\r\n parameters.modifier.setActiveBlock(parameters.modifier.textBlocks[0].text);\r\n }\r\n super(SuiTextBlockDialog.dialogElements, parameters);\r\n this.isNew = isNew;\r\n this.modifier = parameters.modifier;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS']\r\n this.edited = edited;\r\n this.view.groupUndo(true);\r\n this.activeScoreText = this.modifier.getActiveBlock();\r\n this.mouseMoveHandler = null;\r\n this.mouseUpHandler = null;\r\n this.mouseDownHandler = null;\r\n this.mouseClickHandler = null;\r\n }\r\n populateInitial() {\r\n this.textBlockCtrl.setValue({\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n });\r\n const fontFamily = this.activeScoreText.fontInfo.family;\r\n const fontSize = this.activeScoreText.fontInfo.size;\r\n this.fontCtrl.setValue({\r\n family: fontFamily,\r\n size: fontSize,\r\n style: this.activeScoreText.fontInfo.style,\r\n weight: this.activeScoreText.fontInfo.weight\r\n });\r\n this.attachToSelectorCtrl.setValue(this.modifier.attachToSelector);\r\n const ul = this.modifier.ul();\r\n this.xCtrl.setValue(ul.x);\r\n this.yCtrl.setValue(ul.y);\r\n this.paginationCtrl.setValue(this.modifier.pagination);\r\n this.highlightActiveRegion();\r\n }\r\n display() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n this.textElement = $(svg).find('.' + this.activeScoreText.attrs.id)[0];\r\n $('body').addClass('showAttributeDialog');\r\n $('body').addClass('textEditor');\r\n this.applyDisplayOptions();\r\n this.populateInitial();\r\n this.bindElements();\r\n if (!this.modifier.logicalBox) {\r\n this.view.renderer.renderTextGroup(this.modifier);\r\n }\r\n\r\n // If this control has not been edited this session, assume they want to\r\n // edit the text and just right into that.\r\n if (!this.modifier.edited) {\r\n this.modifier.edited = true;\r\n layoutDebug.addDialogDebug('text transform db: startEditSession');\r\n this.textEditorCtrl.startEditSession();\r\n }\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseUpHandler = this.eventSource.bindMouseUpHandler(this, 'mouseUp');\r\n this.mouseDownHandler = this.eventSource.bindMouseDownHandler(this, 'mouseDown');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n }\r\n _resetAttachToSelector() {\r\n this.modifier.attachToSelector = false;\r\n this.modifier.selector = SmoTextGroup.defaults.selector;\r\n this.modifier.musicXOffset = SmoTextGroup.defaults.musicXOffset;\r\n this.modifier.musicYOffset = SmoTextGroup.defaults.musicYOffset;\r\n }\r\n _activateAttachToSelector() {\r\n this.modifier.attachToSelector = true;\r\n this.modifier.selector = JSON.parse(JSON.stringify(this.view.tracker.selections[0].selector));\r\n if (this.modifier.logicalBox) {\r\n this.modifier.musicXOffset = this.modifier.logicalBox.x - this.view.tracker.selections[0].measure.svg.logicalBox.x;\r\n this.modifier.musicYOffset = this.modifier.logicalBox.y - this.view.tracker.selections[0].measure.svg.logicalBox.y;\r\n }\r\n }\r\n\r\n changed() {\r\n this.edited = true;\r\n if (this.insertCodeCtrl.changeFlag && this.textEditorCtrl.session) {\r\n const val = this.insertCodeCtrl.getValue().toString().split('');\r\n val.forEach((key) => {\r\n this.evKey({ key });\r\n });\r\n this.insertCodeCtrl.unselect();\r\n }\r\n\r\n if (this.textBlockCtrl.changeFlag) {\r\n const nval = this.textBlockCtrl.getValue();\r\n this.activeScoreText = nval.activeScoreText;\r\n this.highlightActiveRegion();\r\n }\r\n if (this.textEditorCtrl.changeFlag) {\r\n this.highlightActiveRegion();\r\n }\r\n\r\n if (this.attachToSelectorCtrl.changeFlag) {\r\n const toSet = this.attachToSelectorCtrl.getValue();\r\n if (toSet) {\r\n this._activateAttachToSelector();\r\n this.paginationCtrl.setValue(SmoTextGroup.paginations.ONCE);\r\n this.modifier.pagination = SmoTextGroup.paginations.ONCE;\r\n } else {\r\n this._resetAttachToSelector();\r\n }\r\n }\r\n\r\n const pos = this.modifier.ul();\r\n\r\n // position can change from drag or by dialog - only update from\r\n // dialog entries if that changed.\r\n if (this.xCtrl.changeFlag) {\r\n this.modifier.offsetX(this.xCtrl.getValue() - pos.x);\r\n }\r\n if (this.yCtrl.changeFlag) {\r\n this.modifier.offsetY(this.yCtrl.getValue() - pos.y);\r\n }\r\n if (this.textDraggerCtrl.changeFlag) {\r\n this.xCtrl.setValue(pos.x);\r\n this.yCtrl.setValue(pos.y);\r\n }\r\n\r\n if (this.paginationCtrl.changeFlag) {\r\n this.modifier.pagination = parseInt(this.paginationCtrl.getValue().toString(), 10);\r\n // Pagination and attach to measure don't mix.\r\n this._resetAttachToSelector();\r\n this.attachToSelectorCtrl.setValue(false);\r\n }\r\n\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.activeScoreText.fontInfo.family = fontInfo.family;\r\n // transitioning away from non-point-based font size units\r\n this.activeScoreText.fontInfo.size = fontInfo.size;\r\n this.activeScoreText.fontInfo.weight = fontInfo.weight;\r\n this.activeScoreText.fontInfo.style = fontInfo.style;\r\n }\r\n // Use layout context because render may have reset svg.\r\n this.view.updateTextGroup(this.modifier);\r\n }\r\n highlightActiveRegion() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n if (this.activeScoreText.logicalBox) {\r\n const stroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: pageContext,\r\n classes: '',\r\n stroke,\r\n box: this.activeScoreText.logicalBox,\r\n scroll: this.scroller.scrollState,\r\n timeOff: 1000\r\n };\r\n }\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect.box = this.activeScoreText.logicalBox;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n this.textEditorCtrl.evKey(evdata);\r\n }\r\n }\r\n\r\n // ### Event handlers, passed from dialog\r\n mouseUp() {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseUp(null);\r\n }\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseMove(ev);\r\n } else if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n\r\n mouseDown(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseDown(ev);\r\n }\r\n }\r\n\r\n _complete() {\r\n this.view.groupUndo(false);\r\n this.modifier.setActiveBlock(null);\r\n this.view.tracker.updateMap(); // update the text map\r\n this.view.renderer.setDirty();\r\n if (this.mouseDownHandler) {\r\n this.eventSource.unbindMouseDownHandler(this.mouseDownHandler);\r\n }\r\n if (this.mouseUpHandler) {\r\n this.eventSource.unbindMouseUpHandler(this.mouseUpHandler);\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n }\r\n // Hack - this comes from SuiInlineText and SuiTextEdit.\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n _removeText() {\r\n this.view.removeTextGroup(this.modifier);\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.updateTextGroup(this.modifier);\r\n this._complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.edited) {\r\n this.modifier.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n this.modifier.elements = [];\r\n this.view.undo();\r\n }\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this._removeText();\r\n this._complete();\r\n });\r\n }\r\n}\r\n\r\nexport class helpModal {\r\n static createAndDisplay() {\r\n SuiHelp.displayHelp();\r\n return closeDialogPromise();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffTextBracket, SmoTextBracketNumberType, SmoTextBracketStringType} from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBracketAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffTextBracket;\r\n bracket: SmoStaffTextBracket;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, bracket: SmoStaffTextBracket) {\r\n super(view);\r\n this.bracket = bracket;\r\n this.view = view;\r\n this.backup = new SmoStaffTextBracket(this.bracket);\r\n this.backup.attrs.id = bracket.attrs.id;\r\n this.backup.associatedStaff = bracket.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.removeTextBracket(this.bracket);\r\n await this.view.addOrReplaceTextBracket(this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.bracket);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoTextBracketNumberType, val: number) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = parseInt(val.toString(), 10);\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n async updateText(param: SmoTextBracketStringType, val: string) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n get text() {\r\n return this.bracket.text;\r\n }\r\n set text(val: string) {\r\n this.updateText('text', val);\r\n }\r\n get superscript() {\r\n return this.bracket.superscript;\r\n }\r\n set superscript(val: string) {\r\n this.updateText('superscript', val);\r\n }\r\n get position() {\r\n return this.bracket.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n get line() {\r\n return this.bracket.line;\r\n }\r\n set line(val: number) {\r\n this.updateValue('line', val);\r\n }\r\n}\r\nexport class SuiTextBracketDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Bracket Properties', elements:\r\n [{\r\n smoName: 'line',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'Line'\r\n }, {\r\n smoName: 'position',\r\n control: 'SuiDropdownComponent',\r\n label: 'Position',\r\n options: [\r\n {\r\n value: '1',\r\n label: 'Above'\r\n }, {\r\n value: '-1',\r\n label: 'Below'\r\n }]\r\n }, {\r\n smoName: 'text',\r\n control: 'SuiTextInputComponent',\r\n label: 'Text'\r\n }, {\r\n smoName: 'superscript',\r\n control: 'SuiTextInputComponent',\r\n label: 'SubText'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTextBracketAdapter(parameters.view, parameters.modifier);\r\n super(SuiTextBracketDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoTie, TieLine } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type TieNumber = 'tie_spacing' | 'cp1' | 'cp2' | 'first_x_shift' | 'last_x_shift' | 'y_shift';\r\n\r\nexport class SuiTieAdapter extends SuiComponentAdapter {\r\n tie: SmoTie;\r\n backup: SmoTie;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, tie: SmoTie) {\r\n super(view);\r\n this.tie = tie;\r\n this.backup = new SmoTie(tie);\r\n // Make it have same ID so remove works.\r\n this.backup.attrs.id = tie.attrs.id;\r\n this.backup.associatedStaff = tie.associatedStaff;\r\n }\r\n writeTieNumber(value: number, param: TieNumber) {\r\n this.tie[param] = value;\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n this.changed = true;\r\n }\r\n get lines(): TieLine[] {\r\n return this.tie.lines;\r\n }\r\n set lines(value: TieLine[]) {\r\n this.tie.lines = JSON.parse(JSON.stringify(value));\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n }\r\n get tie_spacing(): number {\r\n return this.tie.tie_spacing;\r\n }\r\n set tie_spacing(value: number) {\r\n this.writeTieNumber(value, 'tie_spacing');\r\n } \r\n get first_x_shift(): number {\r\n return this.tie.first_x_shift;\r\n }\r\n set first_x_shift(value: number) {\r\n this.writeTieNumber(value, 'first_x_shift');\r\n } \r\n get last_x_shift(): number {\r\n return this.tie.last_x_shift;\r\n }\r\n set last_x_shift(value: number) {\r\n this.writeTieNumber(value, 'last_x_shift');\r\n } \r\n get y_shift(): number {\r\n return this.tie.y_shift;\r\n }\r\n set y_shift(value: number) {\r\n this.writeTieNumber(value, 'y_shift');\r\n } \r\n get cp1(): number {\r\n return this.tie.cp1;\r\n }\r\n set cp1(value: number) {\r\n this.writeTieNumber(value, 'cp1');\r\n }\r\n get cp2(): number {\r\n return this.tie.cp2;\r\n }\r\n set cp2(value: number) {\r\n this.writeTieNumber(value, 'cp2');\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.backup, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n }\r\n}\r\nexport class SuiTieAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Tie Properties',\r\n\r\n staticText: [\r\n { label: 'Tie Properties' },\r\n { fromNote: 'From Note' },\r\n { toNote: 'To Note' }\r\n ], elements: [{\r\n smoName: 'lines',\r\n control: 'TieMappingComponent',\r\n label: 'Lines'\r\n }, {\r\n smoName: 'cp1',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1'\r\n }, {\r\n smoName: 'cp2',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2'\r\n }, {\r\n smoName: 'first_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 1'\r\n }, {\r\n smoName: 'last_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 2'\r\n }, {\r\n smoName: 'y_shift',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'tie_spacing',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Tie Spacing'\r\n }],\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n if (!parameters.modifier) {\r\n throw new Error('modifier attribute dialog must have modifier');\r\n }\r\n const tie = parameters.modifier as SmoTie;\r\n const adapter = new SuiTieAdapter(parameters.view, tie);\r\n super(SuiTieAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureAdapter extends SuiComponentAdapter {\r\n measure: SmoMeasure;\r\n backup: TimeSignature;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.measure = this.view.tracker.selections[0].measure;\r\n this.backup = new TimeSignature(this.measure.timeSignature);\r\n }\r\n get numerator() {\r\n return this.measure.timeSignature.actualBeats;\r\n }\r\n set numerator(value: number) {\r\n this.measure.timeSignature.actualBeats = value;\r\n }\r\n get denominator() {\r\n return this.measure.timeSignature.beatDuration;\r\n }\r\n set denominator(value: number) {\r\n this.measure.timeSignature.beatDuration = value;\r\n }\r\n get display() {\r\n return this.measure.timeSignature.display;\r\n }\r\n set display(value: boolean) {\r\n this.measure.timeSignature.display = value;\r\n }\r\n get useSymbol() {\r\n return this.measure.timeSignature.useSymbol;\r\n }\r\n set useSymbol(value: boolean) {\r\n this.measure.timeSignature.useSymbol = value;\r\n }\r\n get customString() {\r\n return this.measure.timeSignature.displayString;\r\n }\r\n set customString(value: string) {\r\n const tr = value.trim();\r\n if (!(tr.indexOf('/') >= 0)) {\r\n if (tr === 'C' || tr === 'C|') {\r\n this.measure.timeSignature.displayString = tr;\r\n return;\r\n }\r\n }\r\n const ar = tr.split('/');\r\n if (isNaN(parseInt(ar[0], 10)) || isNaN(parseInt(ar[1], 10))) {\r\n this.measure.timeSignature.displayString = '';\r\n return;\r\n }\r\n this.measure.timeSignature.displayString = tr;\r\n }\r\n async commit() {\r\n await this.view.setTimeSignature(this.measure.timeSignature);\r\n }\r\n async cancel() {\r\n this.measure.timeSignature = this.backup;\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiTimeSignatureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Custom Time Signature',\r\n elements:\r\n [\r\n {\r\n smoName: 'numerator',\r\n defaultValue: 3,\r\n control: 'SuiRockerComponent',\r\n label: 'Beats/Measure',\r\n },\r\n {\r\n smoName: 'denominator',\r\n defaultValue: 8,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Beat Value',\r\n options: [{\r\n value: 16,\r\n label: '16',\r\n }, {\r\n value: 8,\r\n label: '8',\r\n }, {\r\n value: 4,\r\n label: '4'\r\n }, {\r\n value: 2,\r\n label: '2'\r\n }]\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display',\r\n }, {\r\n smoName: 'useSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Common/Cut',\r\n }, {\r\n smoName: 'customString',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom',\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTimeSignatureAdapter(parameters.view);\r\n super(SuiTimeSignatureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTransposeScoreAdapter extends SuiComponentAdapter {\r\n transposeOffset: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n get offset() {\r\n return this.transposeOffset;\r\n }\r\n set offset(value: number) {\r\n if (value > -13 && value < 13) {\r\n this.transposeOffset = value;\r\n }\r\n }\r\n async commit() { \r\n if (this.transposeOffset !== 0) {\r\n this.view.transposeScore(this.transposeOffset);\r\n }\r\n }\r\n async cancel() {\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiTransposeScoreDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Transpose Score', elements:\r\n [{\r\n smoName: 'offset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose (1/2 steps)'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiTransposeScoreAdapter(params.view);\r\n super(SuiTransposeScoreDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition,SuiDialogParams } from './dialog';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport type SmoVoltaNumberParam = 'startBar' | 'endBar' | 'xOffsetStart' | 'xOffsetEnd' | 'yOffset' | 'number';\r\n\r\nexport class SuiVoltaAdapter extends SuiComponentAdapter {\r\n volta: SmoVolta;\r\n backup: SmoVolta;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, volta: SmoVolta) {\r\n super(view);\r\n this.volta = volta;\r\n this.backup = new SmoVolta(this.volta); \r\n }\r\n async remove() {\r\n await this.view.removeEnding(this.volta);\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.updateEnding(this.backup);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n updateVolta(param: SmoVoltaNumberParam, value: number) {\r\n this.volta[param] = value;\r\n this.view.updateEnding(this.volta);\r\n this.changed = true;\r\n }\r\n get startBar() {\r\n return this.volta.startBar;\r\n }\r\n set startBar(val: number) {\r\n this.updateVolta('startBar', val);\r\n }\r\n get endBar() {\r\n return this.volta.endBar;\r\n }\r\n set endBar(val: number) {\r\n this.updateVolta('endBar', val);\r\n }\r\n get xOffsetStart() {\r\n return this.volta.xOffsetStart;\r\n }\r\n set xOffsetStart(val: number) {\r\n this.updateVolta('xOffsetStart', val);\r\n }\r\n get xOffsetEnd() {\r\n return this.volta.xOffsetEnd;\r\n }\r\n set xOffsetEnd(val: number) {\r\n this.updateVolta('xOffsetEnd', val);\r\n }\r\n get yOffset() {\r\n return this.volta.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateVolta('yOffset', val);\r\n }\r\n get number() {\r\n return this.volta.number;\r\n }\r\n set number(val: number) {\r\n this.updateVolta('number', val);\r\n }\r\n} \r\n// ## SuiVoltaAttributeDialog\r\n// aka first and second endings\r\nexport class SuiVoltaAttributeDialog extends SuiDialogAdapterBase {\r\n\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Volta Properties', elements:\r\n [{\r\n smoName: 'number',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'number'\r\n }, {\r\n smoName: 'xOffsetStart',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X1 Offset'\r\n }, {\r\n smoName: 'xOffsetEnd',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X2 Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n if (parameters.modifier.logicalBox === null) {\r\n return null;\r\n }\r\n const dg = new SuiVoltaAttributeDialog(parameters);\r\n dg.display();\r\n return dg;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiVoltaAdapter(parameters.view, parameters.modifier)\r\n super(SuiVoltaAttributeDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\ndeclare var $: any;\r\nimport { scoreChangeEvent } from '../render/sui/renderState';\r\n\r\n/**\r\n * Event handler for smoosic. Any UI element can have any number\r\n * of event handlers. For modals, event handlers are added/removed \r\n * as the gain/relinquish control\r\n * @param sink - an object that implements:\r\n * @param method - the callback method on sink\r\n * @param symbol - used to distinguish handler instances of the same type\r\n */\r\nexport interface EventHandler {\r\n sink: any,\r\n method: string,\r\n symbol: Symbol\r\n}\r\n/**\r\n * This is the event generating interface for Smoosic. It is kept as \r\n * skeletal as possible so applications can call event handling methods from\r\n * their own event logic.\r\n * @category SuiUiBase\r\n */\r\nexport class BrowserEventSource {\r\n keydownHandlers: EventHandler[];\r\n mouseMoveHandlers: EventHandler[];\r\n mouseClickHandlers: EventHandler[];\r\n mouseUpHandlers: EventHandler[];\r\n mouseDownHandlers: EventHandler[];\r\n scoreChangeHandlers: EventHandler[] = [];\r\n domTriggers: EventHandler[];\r\n handleMouseMove: ((ev: any) => void) | null = null;\r\n handleMouseClick: ((ev: any) => void) | null = null;\r\n handleMouseUp: ((ev: any) => void) | null = null;\r\n handleMouseDown: ((ev: any) => void) | null = null;\r\n\r\n handleKeydown: (ev: KeyEvent) => void;\r\n handleScoreChangeEvent: (ev: KeyEvent) => void;\r\n renderElement: any;\r\n constructor() {\r\n this.keydownHandlers = [];\r\n this.mouseMoveHandlers = [];\r\n this.mouseClickHandlers = [];\r\n this.mouseUpHandlers = [];\r\n this.mouseDownHandlers = [];\r\n this.domTriggers = [];\r\n this.handleKeydown = this.evKey.bind(this);\r\n this.handleScoreChangeEvent = this.evScoreChange.bind(this);\r\n window.addEventListener(\"keydown\", this.handleKeydown as any, true);\r\n window.addEventListener(scoreChangeEvent, this.handleScoreChangeEvent as any, true);\r\n }\r\n\r\n async evKey(event: KeyEvent) {\r\n let i = 0;\r\n for (i = 0; i < this.keydownHandlers.length; ++i) {\r\n const handler = this.keydownHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n async evScoreChange(event: any) {\r\n let i = 0;\r\n for (i = 0; i < this.scoreChangeHandlers.length; ++i) {\r\n const handler = this.scoreChangeHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n mouseMove(event: any) {\r\n this.mouseMoveHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseClick(event: any) {\r\n this.mouseClickHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseDown(event: any) {\r\n this.mouseDownHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseUp(event: any) {\r\n this.mouseUpHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n setRenderElement(renderElement: any) {\r\n this.renderElement = renderElement;\r\n var self = this;\r\n this.handleMouseMove = this.mouseMove.bind(this);\r\n this.handleMouseClick = this.mouseClick.bind(this);\r\n this.handleMouseUp = this.mouseUp.bind(this);\r\n this.handleMouseDown = this.mouseDown.bind(this);\r\n $(document)[0].addEventListener(\"mousemove\", this.handleMouseMove);\r\n $(this.renderElement)[0].addEventListener(\"click\", this.handleMouseClick);\r\n $(document)[0].addEventListener(\"mouseup\", this.handleMouseUp);\r\n $(document)[0].addEventListener(\"mousedown\", this.handleMouseDown);\r\n }\r\n\r\n _unbindHandlerArray(arSrc: EventHandler[], arDest: EventHandler[], handler: EventHandler) {\r\n arSrc.forEach((htest) => {\r\n if (handler.symbol !== htest.symbol) {\r\n arDest.push(htest);\r\n }\r\n });\r\n }\r\n\r\n unbindMouseMoveHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseMoveHandlers, handlers, handler);\r\n this.mouseMoveHandlers = handlers;\r\n }\r\n unbindMouseDownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseDownHandlers, handlers, handler);\r\n this.mouseDownHandlers = handlers;\r\n }\r\n unbindMouseUpHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseUpHandlers, handlers, handler);\r\n this.mouseUpHandlers = handlers;\r\n }\r\n unbindMouseClickHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseClickHandlers, handlers, handler);\r\n this.mouseClickHandlers = handlers;\r\n }\r\n\r\n unbindKeydownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.keydownHandlers, handlers, handler);\r\n this.keydownHandlers = handlers;\r\n } \r\n\r\n bindScroller() { }\r\n\r\n // ### bindKeydownHandler\r\n // add a handler for the evKey event, for keyboard data.\r\n bindKeydownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.keydownHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseMoveHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseMoveHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseUpHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseUpHandlers.push(handler);\r\n return handler;\r\n }\r\n bindScoreChangeHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.scoreChangeHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseDownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseDownHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseClickHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseClickHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n domClick(selector: string, sink: any, method: string, args: any) {\r\n $(selector).off('click').on('click', function (ev: any) {\r\n sink[method](ev, args);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SuiEventHandler } from '../application/eventHandler';\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\ndeclare var $: any;\r\n\r\nexport class SuiExceptionHandler {\r\n view: SuiScoreView;\r\n thrown: boolean;\r\n static _instance: SuiExceptionHandler;\r\n constructor(params: any) {\r\n this.view = params.view;\r\n this.thrown = false;\r\n SuiExceptionHandler._instance = this;\r\n }\r\n static get instance() {\r\n return SuiExceptionHandler._instance;\r\n }\r\n exceptionHandler(e: any) {\r\n let stack = '';\r\n let doing = '';\r\n let scoreString = '';\r\n if (this.thrown) {\r\n return;\r\n }\r\n this.thrown = true;\r\n if (SuiEventHandler.reentry) {\r\n return;\r\n }\r\n\r\n SuiEventHandler.reentry = true;\r\n scoreString = 'Could not serialize score.';\r\n try {\r\n scoreString = JSON.stringify(this.view.score.serialize(), null, ' ');\r\n } catch (e: any) {\r\n if (e.message) {\r\n scoreString += ' ' + e.message;\r\n }\r\n }\r\n const message = e.message;\r\n stack = 'No stack trace available';\r\n\r\n try {\r\n if (e.error && e.error.stack) {\r\n stack = e.error.stack;\r\n } else if (e.stack) {\r\n stack = e.stack;\r\n }\r\n } catch (e2: any) {\r\n stack = 'Error with stack: ' + e2.message;\r\n }\r\n doing = 'Last operation not available.';\r\n\r\n const lastOp = this.view.storeUndo.peek();\r\n if (lastOp) {\r\n doing = lastOp.title;\r\n }\r\n const url = 'https://github.com/AaronDavidNewman/Smoosic/issues';\r\n const bodyObject = JSON.stringify({\r\n message,\r\n stack,\r\n lastOperation: doing,\r\n scoreString\r\n }, null, ' ');\r\n createTopDomContainer('.bugDialog');\r\n const b = buildDom;\r\n const r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', '../styles/images/logo.png').classes('bug-logo'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('span').classes('bug-title').text('oh nooooo! You\\'ve found a bug'))\r\n .append(b('p').text('It would be helpful if you would submit a bug report, and copy the data below into an issue'))\r\n .append(b('div')\r\n .append(b('textarea').attr('id', 'bug-text-area').text(bodyObject))\r\n .append(\r\n b('div').classes('button-container').append(b('button').classes('bug-submit-button').text('Submit Report'))));\r\n\r\n $('.bugDialog').html('');\r\n $('.bugDialog').append(r.dom());\r\n\r\n $('.bug-dismiss-button').off('click').on('click', () => {\r\n $('body').removeClass('bugReport');\r\n if (lastOp) {\r\n this.view.storeUndo.undo(this.view.score, {}, true);\r\n this.view.renderer.render();\r\n SuiEventHandler.reentry = false;\r\n }\r\n });\r\n $('.bug-submit-button').off('click').on('click', () => {\r\n $('#bug-text-area').select();\r\n document.execCommand('copy');\r\n window.open(url, 'Report Smoosic issues');\r\n });\r\n $('body').addClass('bugReport');\r\n if (!this.thrown) {\r\n this.thrown = true;\r\n throw (e);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\ndeclare var JSZip: any;\r\n// ## SuiFileInput\r\n// Get a string or binary file from a file input control and transparently\r\n// decompress it if it's mxml file (compressed). This will read any text or\r\n// binary file,\r\n// but it will only unzip .mxml files first and has a consistent async interface\r\nexport class SuiFileInput {\r\n compressed: boolean = false;\r\n binary: boolean = false;\r\n value: any;\r\n event: any;\r\n constructor(evt: any) {\r\n this.compressed = false;\r\n this.binary = false;\r\n this.value = null;\r\n this.event = evt;\r\n if (evt.target.files[0].name.endsWith('.mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (evt.target.files[0].name.endsWith('.mid')) {\r\n this.binary = true;\r\n }\r\n }\r\n _handleZip() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n JSZip.loadAsync(self.value).then((zip: any) => {\r\n // Find the real xml file in the zip (not metadata)\r\n const filename =\r\n Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n zip.file(filename).async('text').then((str: any) => {\r\n self.value = str;\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n loadAsync() {\r\n const self = this;\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (file) => {\r\n if (file === null || file.target === null || file.target.result === null) {\r\n reject();\r\n return;\r\n }\r\n self.value = file.target.result;\r\n if (!self.compressed) {\r\n resolve();\r\n } else {\r\n self._handleZip().then(() => {\r\n resolve();\r\n });\r\n }\r\n };\r\n if (self.binary) {\r\n reader.readAsArrayBuffer(self.event.target.files[0])\r\n } else {\r\n reader.readAsText(self.event.target.files[0]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiXhrLoader } from './xhrLoader';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\ninterface kvPair { [key: string]: string }\r\nexport interface LibraryParams {\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined;\r\n format: string;\r\n metadata: kvPair;\r\n children: SmoLibrary[];\r\n data: any;\r\n}\r\n\r\n// ## SmoLibrary\r\n// A class to organize smoosic files (or any format smoosic accepts) into libraries.\r\nexport class SmoLibrary {\r\n static _defaults: Partial;\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined = '';\r\n format: string = 'smo';\r\n metadata: kvPair = {};\r\n children: SmoLibrary[] = [];\r\n constructor(parameters: Partial) {\r\n this.loaded = false;\r\n this.parentLib = {};\r\n if (parameters.url) {\r\n this.url = parameters.url;\r\n } else if (parameters.data) {\r\n this.initialize(parameters.data);\r\n }\r\n }\r\n initialize(parameters: LibraryParams) {\r\n smoSerialize.serializedMerge(\r\n SmoLibrary.parameterArray, SmoLibrary.defaults, this);\r\n // if the object was loaded from URL, use that.\r\n if (!this.url) {\r\n this.url = parameters.url;\r\n }\r\n this.format = parameters.format;\r\n Object.keys(parameters.metadata).forEach((key: string) => {\r\n this.metadata[key] = parameters.metadata[key];\r\n });\r\n this.children = [];\r\n if (typeof(parameters.children) !== 'undefined') {\r\n parameters.children.forEach((childLib: SmoLibrary) => {\r\n this.children.push(new SmoLibrary({ data: childLib }));\r\n });\r\n }\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n static get metadataNames() {\r\n return ['name', 'icon', 'tags', 'composer', 'artist', 'copyright',\r\n 'title', 'subtitle', 'movement', 'source'];\r\n }\r\n static get formatTypes() {\r\n return ['smoosic', 'library', 'mxml', 'midi', 'abc'];\r\n }\r\n static get libraryTypes() {\r\n return ['work', 'transcription', 'library', 'collection'];\r\n }\r\n static get defaults() {\r\n if (typeof(SmoLibrary._defaults) === 'undefined') {\r\n SmoLibrary._defaults = { children: [], metadata: {} };\r\n }\r\n return SmoLibrary._defaults;\r\n }\r\n static get parameterArray() {\r\n return ['children', 'metadata', 'format', 'url'];\r\n }\r\n load() {\r\n const self = this;\r\n if (this.loaded) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const loader = new SuiXhrLoader(this.url!);\r\n return new Promise((resolve) => {\r\n loader.loadAsync().then(() => {\r\n const jsonObj = JSON.parse(loader.value);\r\n self.initialize(jsonObj);\r\n self.loaded = true;\r\n resolve();\r\n });\r\n });\r\n }\r\n _inheritMetadata(parent: any) {\r\n // eslint-disable-next-line\r\n for (const key in parent) {\r\n if (typeof(this.metadata[key]) === 'undefined') {\r\n this.metadata[key] = parent[key];\r\n }\r\n }\r\n this.parentLib = { name: parent.metadata.name, value: parent };\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * Load a file. Guess based on the extension whether the file is string or binary\r\n */\r\nexport class SuiXhrLoader {\r\n compressed: boolean = false;\r\n value: any = null;\r\n path: string;\r\n binary: boolean = false;\r\n isMidi: boolean = false;\r\n constructor(path: string) {\r\n this.path = path;\r\n if (path.endsWith('mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (path.endsWith('mid')) {\r\n this.isMidi = true;\r\n this.binary = true;\r\n }\r\n }\r\n async _uncompress(result: any): Promise {\r\n const self = this;\r\n const zip = await JSZip.loadAsync(result);\r\n // Find the real xml file in the zip (not metadata)\r\n const filename = Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n self.value = await zip.file(filename).async('text');\r\n return self.value\r\n }\r\n /**\r\n * \r\n * @returns promise resolved when the target file is loaded\r\n */\r\n loadAsync(): Promise {\r\n const req = new XMLHttpRequest();\r\n const self = this;\r\n const promise = new Promise((resolve) => {\r\n req.addEventListener('load', () => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', async () => {\r\n if (self.isMidi) {\r\n self.value = new Uint8Array(reader.result as ArrayBuffer);\r\n resolve(self.value);\r\n }\r\n else if (!self.compressed) {\r\n self.value = reader.result;\r\n resolve(self.value);\r\n } else {\r\n self.value = await self._uncompress(reader.result);\r\n resolve(self.value);\r\n }\r\n });\r\n if (this.isMidi) {\r\n reader.readAsArrayBuffer(req.response);\r\n }\r\n else if (this.binary) {\r\n reader.readAsBinaryString(req.response);\r\n } else {\r\n reader.readAsText(req.response);\r\n }\r\n });\r\n });\r\n req.responseType = 'blob';\r\n req.open('GET', this.path);\r\n req.send();\r\n return promise;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, draggable, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SmoLanguage } from './i18n/language';\r\ndeclare var $: any;\r\n\r\nexport interface HtmlHelpBlock {\r\n title: string,\r\n html: string,\r\n index: number\r\n}\r\nexport type HelpMode = 'cards' | 'expand';\r\nexport class SuiHelp {\r\n static helpMode: HelpMode = 'cards';\r\n static created = false;\r\n static currentCard: number = 0;\r\n static displayHelp() {\r\n $('body').addClass('showHelpDialog');\r\n if (!SuiHelp.created) {\r\n createTopDomContainer('helpDialog');\r\n SuiHelp.created = true;\r\n }\r\n $('.helpDialog').html('');\r\n $('.helpDialog').append(SuiHelp.closeButton.dom());\r\n SuiHelp.helpHtml.forEach((cat, catIx) => {\r\n const r = SuiHelp._buildElements(cat);\r\n $('.helpDialog').append(r.dom());\r\n });\r\n $('button.help-title').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).closest('div.helpLine').toggleClass('showSection');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-plus');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-minus');\r\n });\r\n $('.helpDialog button.icon-cross').off('click').on('click', () => {\r\n $('body').removeClass('showHelpDialog');\r\n $('.workspace').css('height', '');\r\n });\r\n const wsh = window.innerHeight;\r\n $('.workspace').css('height', '' + wsh + 'px');\r\n const cb = () => {};\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.helpDialog'),\r\n handle: $('.helpDialog').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n SuiHelp.setCards();\r\n }\r\n static setCards() {\r\n $('.helpDialog').addClass('card-view');\r\n const lines = $('.helpDialog .helpLine');\r\n const numLines = $(lines).length;\r\n $(lines).each((ix: number, line: any) => {\r\n const lineno = parseInt($(line).attr('data-index'));\r\n if (lineno !== SuiHelp.currentCard) {\r\n $(line).addClass('hide');\r\n } else {\r\n $(line).removeClass('hide');\r\n const prevButton = $(line).find('button.prev-topic');\r\n const nextButton = $(line).find('button.next-topic');\r\n if (lineno === numLines - 1) {\r\n $(nextButton).addClass('hide');\r\n }\r\n if (lineno === 0) {\r\n $(prevButton).addClass('hide');\r\n }\r\n $(prevButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + (numLines - 1)) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n $(nextButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + 1) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n }\r\n });\r\n }\r\n\r\n static get closeButton() {\r\n const b = buildDom;\r\n const r = b('div').append(b('span').classes('icon icon-move')).append('div').classes('help-closer').append(\r\n b('button').classes('icon-cross close'));\r\n return r;\r\n }\r\n\r\n static _buildElements(helps: HtmlHelpBlock) {\r\n const b = buildDom;\r\n const r = b('div').classes('helpLine').attr('data-index', helps.index.toString())\r\n .append(b('div').classes('help-category-button')\r\n .append(b('button')\r\n .append(b('span').classes('icon icon-plus')).classes('help-title')\r\n .append(b('span').classes('help-category-text').text(helps.title))))\r\n .append(b('h3').text(helps.title)) \r\n .append(b('div').classes('help-content').html(helps.html))\r\n .append(b('div').classes('button-container')\r\n .append(b('button').classes('prev-topic')\r\n .append(b('span').classes('icon icon-arrow-left'))\r\n .append(b('span').classes('prev-topic-text').text('Previous Topic')))\r\n .append(b('button').classes('next-topic')\r\n .append(b('span').classes('next-topic-text').text('Next Topic'))\r\n .append(b('span').classes(' icon icon-arrow-right'))));\r\n return r;\r\n }\r\n\r\n static get helpHtml() {\r\n /* [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardVoicesHiddenNotesHtmlEn\r\n]; */\r\n const cards = [\r\n { title: 'Keys', html: SmoLanguage.getHelpFile('cardKeysHtml') },\r\n { title: 'Notes - letter notes', html: SmoLanguage.getHelpFile('cardNotesLetterHtml') },\r\n { title: 'Notes - chromatic and octave', html: SmoLanguage.getHelpFile('cardNotesChromaticHtml') },\r\n { title: 'Notes - chords', html: SmoLanguage.getHelpFile('cardNotesChordsHtml') },\r\n { title: 'Notes - rests', html: SmoLanguage.getHelpFile('cardNotesRestsHtml') },\r\n { title: 'Duration', html: SmoLanguage.getHelpFile('cardDurationNotesHtml') },\r\n { title: 'Duration - tuplets', html: SmoLanguage.getHelpFile('cardDurationTupletsHtml') },\r\n { title: 'Selections - notes', html: SmoLanguage.getHelpFile('cardSelectionsNotesHtml') },\r\n { title: 'Selections - modifiers', html: SmoLanguage.getHelpFile('cardSelectionsModifiersHtml') },\r\n { title: 'Selections - non-selectable modifiers', html: SmoLanguage.getHelpFile('cardSelectionsNonSelectableHtml') },\r\n { title: 'Selections - slash menus', html: SmoLanguage.getHelpFile('cardSelectionsSlashHtml') },\r\n { title: 'Beams and Stems - direction', html: SmoLanguage.getHelpFile('cardBeamsAndStemsDirectionHtml') },\r\n { title: 'Beams and Stems - grouping', html: SmoLanguage.getHelpFile('cardBeamsAndStemsGroupingHtml') },\r\n { title: 'Measures - insert and delete', html: SmoLanguage.getHelpFile('cardMeasuresAddDeleteHtml') },\r\n { title: 'Staves - add and delete', html: SmoLanguage.getHelpFile('cardPartAddDeleteHtml') },\r\n { title: 'Voices - create and delete', html: SmoLanguage.getHelpFile('cardVoicesCreateDeleteHtml') },\r\n ];\r\n const blocks: HtmlHelpBlock[] = [];\r\n cards.forEach((card, cardIx) => {\r\n blocks.push({ index: cardIx, ...card});\r\n });\r\n return blocks;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoLanguageStringAr } from './language_ar';\r\nimport { smoLanguageStringDe } from './language_de';\r\nimport { smoLanguageStringEn } from './language_en';\r\nimport { MenuChoiceDefinition, MenuDefinition, MenuTranslation } from '../menus/menu';\r\nimport { ButtonLabel } from '../buttons/button';\r\nimport { RibbonButtons } from '../buttons/ribbon';\r\nimport { DialogTranslation } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport interface TranslationStrings {\r\n dialogs: DialogTranslation[],\r\n menus: MenuTranslation[],\r\n buttonText: ButtonLabel[]\r\n}\r\nexport type languageDirection = 'ltr' | 'rtl';\r\nexport interface LanguageTranslation {\r\n dir: languageDirection, strings: TranslationStrings, helpHtml: any\r\n}\r\nexport class SmoTranslator {\r\n static dialogs: any[] = [];\r\n\r\n static menus: any[] = [];\r\n\r\n static registerMenu(_class: any) {\r\n if (!SmoTranslator.menus[_class]) {\r\n SmoTranslator.menus[_class] = true;\r\n }\r\n }\r\n static registerDialog(_class: any) {\r\n if (!SmoTranslator.dialogs[_class]) {\r\n SmoTranslator.dialogs[_class] = true;\r\n }\r\n }\r\n\r\n static printLanguages() {\r\n const dialogs: any[] = [];\r\n const menus: any[] = [];\r\n SmoTranslator.allDialogs.forEach((key) => {\r\n SmoTranslator.registerDialog(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n dialogs.push(translatable.printTranslate(key));\r\n });\r\n SmoTranslator.allMenus.forEach((key) => {\r\n SmoTranslator.registerMenu(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n menus.push(translatable.printTranslate(key));\r\n });\r\n const buttonText: any[] = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n\r\n console.log(JSON.stringify({ dialogs, menus, buttonText }, null, ' '));\r\n }\r\n\r\n static _updateDialog(dialogStrings: DialogTranslation, _dialogClass: any, dialogClass: string) {\r\n if (!dialogStrings) {\r\n console.log('no strings for Dialog ' + dialogClass);\r\n return;\r\n }\r\n _dialogClass.label = dialogStrings.label;\r\n const staticText = dialogStrings.staticText;\r\n if (staticText || _dialogClass.dialogElements.staticText) {\r\n const keys = Object.keys(staticText);\r\n keys.forEach((key) => {\r\n _dialogClass.dialogElements.staticText[key] = staticText[key];\r\n });\r\n }\r\n _dialogClass.dialogElements.label = dialogStrings.label;\r\n _dialogClass.dialogElements.elements.forEach((component: any) => {\r\n const componentStrings = dialogStrings.dialogElements.find((ds: any) => ds.id === component.smoName);\r\n if (componentStrings) {\r\n component.label = componentStrings.label;\r\n if (component.options) {\r\n component.options.forEach((option: any) => {\r\n const optionString = componentStrings!.options!.find((cs: any) => cs.value === option.value);\r\n if (!optionString) {\r\n console.log('no string for option ' + option.value + ' in component ' + component.smoName + ' in dialog ' + dialogClass);\r\n } else {\r\n option.label = optionString.label;\r\n }\r\n });\r\n }\r\n } else {\r\n console.log('Untranslated component in ' + dialogClass);\r\n }\r\n });\r\n }\r\n\r\n static _updateMenu(menuStrings: MenuTranslation, _menuClass: any, menuClass: string) {\r\n if (!menuStrings) {\r\n console.log('no strings for Menu ' + menuClass);\r\n return;\r\n }\r\n const defaults = _menuClass.defaults as MenuDefinition;\r\n defaults.menuItems.forEach((menuItem: MenuChoiceDefinition) => {\r\n const val = menuItem.value;\r\n const nvPair = menuStrings.menuItems.find((ff: any) => ff.value === val);\r\n if (!nvPair) {\r\n console.log('no xlate for ' + val + ' in menu ' + menuClass);\r\n } else {\r\n menuItem.text = nvPair.text;\r\n console.log('setting menu item value ' + val + ' to ' + nvPair.text);\r\n }\r\n });\r\n }\r\n\r\n static setLanguage(language: string) {\r\n if (!(SmoLanguage as any)[language]) {\r\n return; // no xlate exists\r\n }\r\n const trans = (SmoLanguage as any)[language] as LanguageTranslation;\r\n // Set the text in all the menus\r\n SmoTranslator.allMenus.forEach((menuClass) => {\r\n const _class = eval('globalThis.Smo.' + menuClass);\r\n const menuStrings = trans.strings.menus.find((mm: MenuTranslation) => mm.ctor === menuClass);\r\n if (menuStrings) {\r\n SmoTranslator._updateMenu(menuStrings, _class, menuClass);\r\n\r\n // Set text in ribbon buttons that invoke menus\r\n const menuButton = $('.ribbonButtonContainer button.' + menuClass).find('.left-text .text-span');\r\n if (menuButton.length && menuStrings) {\r\n $(menuButton).text(menuStrings.label);\r\n }\r\n }\r\n });\r\n\r\n SmoTranslator.allDialogs.forEach((dialogClass) => {\r\n const _class = eval('globalThis.Smo.' + dialogClass);\r\n const dialogStrings = trans.strings.dialogs.find((mm: any) => mm.ctor === dialogClass);\r\n if (typeof (_class) === 'undefined') {\r\n console.log('no eval for class ' + dialogClass);\r\n return;\r\n }\r\n if (!dialogStrings) {\r\n return;\r\n }\r\n // Set text in ribbon buttons that invoke menus\r\n const dialogButton = $('.ribbonButtonContainer button.' + dialogClass).find('.left-text .text-span');\r\n if (dialogButton.length && dialogStrings) {\r\n $(dialogButton).text(dialogStrings.label);\r\n }\r\n\r\n SmoTranslator._updateDialog(dialogStrings, _class, dialogClass);\r\n });\r\n\r\n // Translate the buttons on the ribbon\r\n const langButtons = trans.strings.buttonText;\r\n if (langButtons) {\r\n RibbonButtons.translateButtons.forEach((button: any) => {\r\n const langButton = langButtons.find((lb: any) => lb.buttonId === button.buttonId);\r\n if (langButton) {\r\n const buttonDom = $('.ribbonButtonContainer #' + button.buttonId);\r\n if (buttonDom.length) {\r\n $(buttonDom).find('.left-text').text(langButton.buttonText);\r\n }\r\n }\r\n });\r\n }\r\n // Handle rtl languages\r\n $('body').find('.language-dir').each((ix: number, dd: any) => { $(dd).attr('dir', trans.dir); });\r\n }\r\n\r\n static get allMenus() {\r\n return [\r\n 'SuiDynamicsMenu',\r\n 'SuiFileMenu',\r\n 'SuiKeySignatureMenu',\r\n 'SuiLanguageMenu',\r\n 'SuiMeasureMenu',\r\n 'SuiPartMenu',\r\n 'SuiScoreMenu',\r\n 'SuiStaffModifierMenu',\r\n 'SuiTimeSignatureMenu',\r\n ];\r\n }\r\n\r\n static get allDialogs() {\r\n return [\r\n // file dialogs\r\n 'SuiChordChangeDialog',\r\n 'SuiDynamicModifierDialog',\r\n 'SuiGlobalLayoutDialog',\r\n 'SuiHairpinAttributesDialog',\r\n 'SuiInsertMeasures',\r\n 'SuiInstrumentDialog',\r\n 'SuiLoadFileDialog',\r\n 'SuiLoadMxmlDialog',\r\n 'SuiLyricDialog',\r\n 'SuiMeasureDialog',\r\n 'SuiPageLayoutDialog',\r\n 'SuiPartInfoDialog',\r\n 'SuiPrintFileDialog',\r\n 'SuiSaveFileDialog',\r\n 'SuiSaveMidiDialog',\r\n 'SuiSaveXmlDialog',\r\n 'SuiScoreFontDialog',\r\n 'SuiScorePreferencesDialog',\r\n 'SuiScoreIdentificationDialog',\r\n 'SuiScoreViewDialog',\r\n 'SuiSlurAttributesDialog',\r\n 'SuiStaffGroupDialog',\r\n 'SuiTempoDialog',\r\n 'SuiTextBlockDialog',\r\n 'SuiTieAttributesDialog',\r\n 'SuiTimeSignatureDialog',\r\n 'SuiVoltaAttributeDialog'\r\n ];\r\n }\r\n}\r\n\r\nexport class SmoLanguage {\r\n static getHelpFile(category: any) {\r\n // TODO: how to express language if it is not part of the config?\r\n return eval('globalThis.Smo.' + category + 'En');\r\n }\r\n static get en(): LanguageTranslation {\r\n const strings: TranslationStrings = JSON.parse(smoLanguageStringEn) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get ar(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringAr) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'rtl', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get de(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringDe) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n}\r\n","\r\nexport const smoLanguageStringAr = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"وضع الإيقاع\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"وحدة لكل ضربه\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"ملف\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"جديدe\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"فتح\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"حفظ\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"طباعه\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"إلغاء\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"الدليل\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"وزن الإيقاع\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"خطوط\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"تصاعد\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"تهابط\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"طمس / تعادل\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"النهاية التاسعة\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"ملف\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\n\r\nexport const quickStartHtmlar = `(Arabic)\r\n

Quick start guide

\r\n

If you don't like to read instructions, this cook's tour of Smoosic was made for you.

\r\n
    \r\n
  • One of buttons on the left is called 'File'. Click on it. The menu items before 'cancel' are pre-canned projects that you can use as a template to get you started.

    \r\n
  • \r\n
  • The cursor keys will navigate you to the different notes.

    \r\n
  • \r\n
  • Letters a-g on the computer keyboard change the note to those pitches

    \r\n
  • \r\n
  • 'Insert' adds a new, blank measure.

    \r\n
  • \r\n
  • The ribbon of thick blue buttons on the top expand to button groups, that contain most of the functionality of Smoosic.

    \r\n
  • \r\n
  • The buttons on the left bring up menus or dialogs that do basically what the buttons say.

    \r\n
  • \r\n
  • There are a few 'instant gratification' buttons for playing the music, refreshing the screen or changing the zoom level on the left part of the ribbon.

    \r\n
  • \r\n
  • The piano tool is an alternate way of entering music, or can be dismissed by the close button in the lower left.

    \r\n
  • \r\n
\r\n

\"\"

\r\n`;\r\n\r\n\r\nexport const selectionHtmlar = `(Arabic)\r\n

Selecting things

\r\n

Almost all operations in Smoosic act on the selected music. You can select notes in different ways:

\r\n
    \r\n
  1. with the computer mouse
  2. \r\n
  3. with the keyboard's navigation keys
  4. \r\n
  5. with the navigation keys on the ribbon
  6. \r\n
  7. with the piano tool, to some extent.
  8. \r\n
\r\n

\"\"

\r\n

You can select multiple things with the keyboard navigation keys, by selecting 'shift-arrow', just like many applications. There is a similar control for selection in the navigation ribbon. Some operations, like changing pitch for instance, act on all the selected notes.

\r\n

Sometimes a selection of one line affects all the measures in that column (or all the measures of the system, if you like). When you change the key, for instance, the selection determines where the key change starts. If you have multiple measures selected, it applies to those measures, and then changes back to whatever it was before.

\r\n`;\r\n\r\n\r\nexport const enterDurationsHtmlar = `(Arabic)\r\n

Note duration in Smoosic is done by changing the duration of an existing note. Usually, doubling the duration or cutting it in two, or adding a dot - duration to a note. You can also create tuplets for uneven sets of notes (3, 5, or 7).

\r\n

There are actually 3 ways to do many duration operations - using the piano tool, using the computer keyboard, or using the button ribbon. Like with many things, you should find entering duration using the keyboard fastest, once you have some experience with Smoosic. But the ribbon or the

\r\n

Changing note length with the keyboard

\r\n

You can change the length of notes using the ',' and '.' (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 3/4 for the second dot, if you like to think of it that way) or remove a dot, using the '>' and '<'. The mnemonic device for these is '>' makes note duration greater. '<' makes note duration...less. (On most QWERTY keyboards, comma shifted is '<' and period shifted is '>').

\r\n

\"\"

\r\n

Note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had. You can use the cursor navigation keys to move to a specific selected note.

\r\n

\"\"

\r\n

When you increase the length of a note, Smoosic always 'borrows' from the next note in the measure that is eligible. So when you double the length of the 8th note, it combines the 16th, and 2 32nd notes, and collapses them into a single quarter. If Smoosic can't honor the request, it does nothing. For instance, it can't remove the dot from a note with no dot, and it can't extend beyond the length of the measure.

\r\n

You can create tuplets from the keyboard by typing Ctrl-3, Ctrl-5 or Ctrl-7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys '-' (minus) and '=' (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl-0.

\r\n

\"\"

\r\n

Changing note length with piano widget

\r\n

The piano widget is shown when the application starts, and can be restored from the left menu 'Piano' button when closed.

\r\n

You can double or halve note duration, or add dot duration, to a note using the piano tool.

\r\n

\"\"

\r\n

Changing note length from the button ribbon

\r\n

All the duration commands can be accomplished from the ribbon buttons.

\r\n

\"\"

\r\n

Note that the equivalent keyboard commands are also indicated on the right of each button, when it's available. (there are only so many keys, so there are some ribbon buttons with no key shortcut).

\r\n`;\r\n\r\n\r\nexport const enterPitchesHtmlar = `(Arabic)\r\n

There are a few ways to enter notes in Smoosic. You can click on the piano widget keys, or you can enter notes directly from the keyboard.

\r\n

Your first Smoosical notes

\r\n

Notes from the keyboard

\r\n

The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff (Most key commands in Smoosic have a mnemonic device). The default behavior is for the cursor to advance when a note is entered in this way. (Future behavior, auto-advance can be overridden). You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

You change the octave from the keyboard using the '_' and '+' (underscore, aka shift-minus, and plus), and change notes chromatically using '-' and '=' key. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the 'Shift-E' (mnemonic: E for enharmonic - get it?). And Shift-F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The '3' key makes a third, the '4' key a fourth, and so on. Shift+number gives you the interval down.

\r\n

\"\"

\r\n

Note that the interval starts from the highest note in the chord, for intervals going up, and the lowest note in the chord, for intervals going down. You can select individual pitches in the chord using 'Shift-Up Arrow' as shown. This is similar to how modifiers like dynamics are selected. Once you have the pitch selected, you can change it using the up-down commands shows above, or change the enharmonic spelling.

\r\n

There is currently no way to remove a single pitch from the chord. If you want to collapse the chord, just type a letter a-g on the keyboard, and it will be replaced with a single note.

\r\n

Notes from the piano tool

\r\n

You can also add notes to your score with the piano tool, by clicking on the corresponding notes.

\r\n

\"\"

\r\n

Clicking on the piano gives the selected note the piano pitch. The octave of the note is based on the clef, so for treble clef, the 'C' is middle 'C'. You can change the octave of the note, and move the pitch up and down. The top buttons affect the pitch, and the bottom buttons navigate or change the length of the note. Clicking on the chord button acts like a 'sustain' that puts additional notes in chords.

\r\n

Everything that can be done from the piano widget, and most things in Smoosic generally, can be done more efficiently with keyboard commands. Once you are comfortable with the computer keyboard, you can free up some screen real-estate by closing the piano widget (cross control in lower left). You can bring it up again with the piano menu button on the left.

\r\n`;\r\n","\r\nexport const smoLanguageStringDe = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Datei laden\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Takt Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Takt Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Modus\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Dauer (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Text und Dauer festlegen\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Einheit für Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Seitengröße\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Brief\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Brief (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"benutzerdefiniert\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Schriftart\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Schriftart\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Startposition\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Endposition\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"Datei\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"Neu\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Öffnen\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Schnellspeichern\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Speichern\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Drucken\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Tonlage\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Taktzeit\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"benutzerdefiniert\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Bogen/Bindung\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth Ende\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n}`;\r\n","\r\nexport const smoLanguageStringEn = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Mode\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Unit for Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"File\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"New Score\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Open\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Print\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }, \r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Key\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Time Sig\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Slur\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth ending\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\nexport const cardKeysHtmlEn = `\r\n

Welcome to Smoosic

\r\n

Smoosic was designed to allow you to enter music as fast as you can type, once you learn some basic commands and patterns. While music can be entered in multiple ways, the fastest/easiest way to create or edit in Smoosic is to use some basic keyboard shortcuts.

\r\n

You can customize the key bindings (which keys do what) by changing the files in src/ui/keyBindings/ directory, or by providing your own bindings. See the custom-keybinding.html in the project that demonstrates how to create your own key bindings.\r\n\"\"

\r\n`;\r\n\r\nexport const cardNotesLetterHtmlEn = `\r\n

Most key commands in Smoosic have a mnemonic device. The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff. The default behavior is for the cursor to advance when a note is entered in this way. This can be overridden in the 'Score Preferences' dialog. You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

Some conventions used in this documentation:

\r\n

Keystrokes are specified in bold, e.g. x means the 'x' key. Shift+E means to press the Shift and E keys at the same time.

\r\n

Key sequences are specified on their own line:

\r\n

/ a

\r\n

means to press the / key followed by the a key.

\r\n`;\r\n\r\nexport const cardNotesChromaticHtmlEn = `\r\n

You change notes chromatically using - and = key. You can change the octave using the _ (underscore) and + (plus) keys. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the Shift+E (mnemonic: E for enharmonic - get it?). And Shift+F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesChordsHtmlEn = `\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The 3 key makes a third, the 4 key a fourth, and so on. Shift+3 gives you the 3rd below.

\r\n

You can toggle selection to individual pitches by using Shift+UpArrow. So to create a G triad, starting with g, hit 3 for the 'B', 3 again for the 'D'. So far, we have G major. To lower the 3rd, Shift+up to select the 'B', then - to lower the pitch.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesRestsHtmlEn = `\r\n

You can toggle notes to rests by pressing r or Delete.

\r\n

In Smoosic, you can't truly delete a note - a 4/4 bar will always have 4 beats of music. But you can 'hide' notes by creating invisible rests. This is another use of Delete.

\r\n

Delete follows standard toggle behavior - deleted notes become rests, and delete rests become invisible rests. Hitting Delete a third time restores the note.

\r\n

Invisible rests show up as partially opaque in the display. But when printed, they are truly invisible.

\r\n

\"\"

\r\n`\r\nexport const cardDurationNotesHtmlEn = `\r\n

Changing duration is a little different in Smoosic than other programs. Rather than selecting a duration (quarter note, etc.), you change (increase/decrease) the duration of existing notes.

\r\n

You can change the length of notes using the , and . (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 5/4 for the second dot, if you like to think of it that way) or remove a dot, using the > (Shift+,) and ,. The mnemonic device for these is > makes note duration greater. < makes note duration less. (On most QWERTY keyboards, comma shifted is < and period shifted is >).

\r\n

\"\"

`;\r\n\r\nexport const cardDurationTupletsHtmlEn = `\r\n

You can create tuplets from the keyboard by typing Ctrl+3, Ctrl+5 or Ctrl+7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys - (minus) and = (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl+0.

\r\n

\"\"

`;\r\n\r\nexport const cardSelectionsNotesHtmlEn = `

Many operations in Smoosic act on the selected music. You select the music the way you select text in a text app, with the to move right, to move left. Shift+→ expands the selection left, etc.

\r\n

\"\"

\r\n

In the last example, note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had when the music changes.\r\nYou can also use the mouse to select notes. Selecting a range across multiple staves is not supported (yet). But you can use Control+click to select notes in multiple staves.

\r\n`;\r\nexport const cardSelectionsModifiersHtmlEn = ` \r\n

A modifier is anything that affects a note, such as an articulation or dynamic. Many modifiers, especially those that affect multiple notes, can be selected with the keyboard. To select a modifier such as a slur, crescendo, or ending, use 'Alt-left arrow' or 'Alt-right arrow' when the first or last note of the modifier is selected. This will move the selecttion between modifiers that apply to that note.

\r\n

You can also select modifiers with the mouse.

\r\n

Once selected, you can bring up the modifier dialog by hitting 'Enter'.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardSelectionsNonSelectableHtmlEn = `\r\n

Some modifiers, such as articulations, aren't selectable. The keys h, i, j, and k bring up articulations that aren't selectable, but are placed on the note automatically. You can toggle position and on/off by repeating the key.

\r\n

Additional articulations are available from the of articulation button group.

\r\n

You can customize the articulations selected by the key bindings by changing the ui/keyBindings/editorKeys.ts file, or by providing your own bindings. See the custom-keybinding.html example in the project.

\r\n

\"\"

`;\r\n\r\n\r\nexport const cardSelectionsSlashHtmlEn = `\r\n

The buttons on the left (for L-to-R languages) bring up menus and dialogs. These dialogs can also be accessed via the 'Slash' menus.

\r\n

For instance, slurs, ties, hairpins and other modifiers that work on a range of music are created from the 'Lines' menu. You can access this via the slash menu:

\r\n

/ l (el, not one) 2

\r\n

Then you can use the modifier selection to edit the phrase marking to your taste.

\r\n

You can also select modifiers or any menu option with the mouse.

\r\n

\"\"

`;\r\n\r\nexport const cardBeamsAndStemsDirectionHtmlEn = `\r\n

Beams and Stems part 1: Direction

\r\n

The direction of beams and stems is controlled selecting the notes you want to affect and typing Shift+B. The selection will be toggled between auto (default), up, and down. 'Auto' means stems are up if the notes are below 3rd line, so the beam direction will change if the notes do.

\r\n

Note that there are 3 settings, even though only 2 will produce a visible change for any given stem, since 'auto' will be either up or down.

\r\n

\"\"

\r\n`;\r\nexport const cardBeamsAndStemsGroupingHtmlEn = `\r\n

By default, notes are auto-beamed so that a 1/4 note is beamed. So 1/8 notes in 4/4 time will be beamed in 2's, 16th notes in 4's etc. In triple time (e.g. 6/8, 9/8), 1/8 notes are beamed in 3's. You can change this default in the Score Preferences.

\r\n

You can split a beam at any point using the x (mnemonic: x to cancel beaming. You can create a beam by selecting the notes and typing Shift-X. Only notes with 1/8 note duration or less can be beamed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardMeasuresAddDeleteHtmlEn = `\r\n

You can add a single measure at the current selection point by pressing Insert. Shift+Insert appends the new measure to the selected measure.

\r\n

To add many measures, you can do this from the 'Add Measures' dialog. This can be brought up through the 'Measure' button on the left, or by pressing

\r\n

/ a 0 (zero)

\r\n

Deleting the selected measures can be done from the 'Measures' menu on the left, or by pressing

\r\n

/ a 1.

\r\n

Note the insert and delete key behavior is asymmetric. The Delete key is used to toggle notes to rests, and also I thought this made it too easy to accidentally delete a lot of music.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardVoicesCreateDeleteHtmlEn = `\r\n

If you need different rhythms in the same stave, you can do this by creating multiple voices. You add a voice to a measure using the voice buttons - you can have up to 4 voices in a measure.

\r\n

You can select a differnt voice using the voice buttons also.

\r\n

You can delete any voice except voice 1 by selecting the voice, and selecting the Vx button. When a voice is deleted, any voices with a higher number are bumped down - e.g., if you delete voice 2, voice 3 becomes voice 2, etc.

\r\n

By default, the odd-numbered voices (indexed from 1) have stems that point up. You can use the Ctrl+B to change the staff direction if you want.

\r\n

Notes in voices > 1 have different colors in the editor. This is to make editing easier. All voices are black when the music is printed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardPartAddDeleteHtmlEn = `

You can add a new stave/part from the parts menu.

\r\n

/ p 0 (zero)

\r\n

From the dialog, you can select the initial properties of the new stave, such as the clef and transposition.

\r\n

To delete the selected staves:\r\n/ p 1 (zero)

\r\n

Note that you can't delete the only stave - the music will always contain at least one stave.

\r\n

Note: The 'Part' menu may show different options depending on what else is in the score. Other characteristics of the part and staff are covered in the 'Working with Scores' section.

\r\n

\"\"

\r\n`;\r\n\r\nexport const helpCards = [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n];","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from \"../../common/htmlHelpers\";\r\nimport { SmoLanguage, SmoTranslator, TranslationStrings } from \"./language\";\r\nimport { RibbonButtons } from \"../buttons/ribbon\";\r\nimport { ButtonLabel } from \"../buttons/button\";\r\nimport { DialogTranslation, DialogDefinition } from \"../dialogs/dialog\";\r\nimport { DialogDefinitionElement, DialogDefinitionOption } from \"../dialogs/components/baseComponent\";\r\n\r\ndeclare var $: any;\r\n\r\n// ## SmoTranslationEditor\r\n// Create a somewhat user-friendly editor DOM to translate SMO\r\n// dialogs and menus, and any subset, into other languages.\r\nexport class SmoTranslationEditor {\r\n // ### _getHtmlTextInput\r\n // All the editable text elements contain: the code label or value from the\r\n // UI element, the En string, and the translated string, or a copy of the\r\n // EN string if the string has not been translated.\r\n static _getHtmlTextInput(dbLabel: string, enLabel: string, langLabel: string, labelType: string, labelId: string) {\r\n var b = buildDom;\r\n\r\n const compHtml = b('div').classes('dialog-element-container')\r\n .attr('data-' + labelType, labelId).append(\r\n b('div').classes('dialog-component-label').append(\r\n b('span').classes('trans-label').append(\r\n b('span').classes('trans-db-text').text(dbLabel)\r\n ).append(\r\n b('span').classes('trans-en-text').text(enLabel)\r\n ).append(\r\n b('input').classes('trans-label-input')\r\n ).append(\r\n b('span').classes('plaintext-translate hide').text(langLabel)\r\n )\r\n )\r\n ).dom();\r\n return compHtml;\r\n }\r\n\r\n // ### _getMenuTextDialogHtml\r\n // Get all the menu item labels for translation\r\n static _getMenuTextDialogHtml(menuCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n const menuClass = eval('globalThis.Smo.' + menuCtor);\r\n const menuItems = menuClass['defaults'].menuItems;\r\n var enMenu = enStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n\r\n // Get the JSON EN menu, or copy the DB strings if it doesn't exist\r\n if (!enMenu) {\r\n enMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n enMenu!.ctor = menuCtor;\r\n }\r\n // Get the JSON language menu strings, or copy the EN strings if it doesn't exist\r\n var langMenu = langStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n if (!langMenu) {\r\n langMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n langMenu!.ctor = menuCtor;\r\n }\r\n\r\n // create the DOM menu container\r\n var b = buildDom;\r\n const container = b('div').classes('menu-translate-container')\r\n .attr('data-menucontainer', menuCtor).append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('menu-translate-title').text(menuCtor)\r\n ).dom();\r\n const menuItemsDom = b('div').classes('menu-element-container').dom();\r\n\r\n // create the label editor\r\n const menuLabel = SmoTranslationEditor._getHtmlTextInput(menuClass['defaults'].label, enMenu!.label, langMenu!.label,\r\n 'menulabel', menuCtor);\r\n $(menuItemsDom).append(menuLabel);\r\n $(container).append(menuItemsDom);\r\n\r\n // create the editor for each item\r\n menuItems.forEach((item: any) => {\r\n var enItem = enMenu!.menuItems.find((mi: any) => mi.value === item.value);\r\n if (!enItem) {\r\n enItem = JSON.parse(JSON.stringify(item));\r\n }\r\n var langItem = langMenu!.menuItems!.find((mi: any) => mi.value === item.value);\r\n if (!langItem) {\r\n langItem = JSON.parse(JSON.stringify(item));\r\n }\r\n const menuItemDom = b('div').classes('menu-item-container').dom();\r\n const itemEditDom = SmoTranslationEditor._getHtmlTextInput(\r\n item.value, enItem!.text, langItem!.text,\r\n 'itemtext', item.value);\r\n $(menuItemDom).append(itemEditDom);\r\n $(menuItemsDom).append(menuItemDom);\r\n });\r\n return container;\r\n }\r\n static getButtonTranslateHtml(enStrings: TranslationStrings, langStrings: TranslationStrings, transContainer: HTMLElement) {\r\n var b = buildDom;\r\n var buttonDom: HTMLElement = b('div').classes('ribbon-translate-container')\r\n .attr('data-ribbon-translate', 'buttons').append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('ribbon-translate-title').text('Button Text')\r\n ).dom() as HTMLElement;\r\n\r\n var enKeys: ButtonLabel[] = enStrings.buttonText;\r\n if (!enKeys) {\r\n enKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n var langKeys = langStrings.buttonText;\r\n if (!langKeys) {\r\n langKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n enKeys.forEach((button: ButtonLabel) => {\r\n const langObj = langKeys.find((langText: any) => langText.buttonId === button.buttonId);\r\n const langString = langObj ? langObj.buttonText : button.buttonText;\r\n var buttonContainer: HTMLElement = b('div').classes('ribbon-button-container')\r\n .attr('data-buttoncontainer', button.buttonId).dom();\r\n $(buttonContainer).append(\r\n SmoTranslationEditor._getHtmlTextInput(button.buttonId, button.buttonText, langString, 'ribbon-button', button.buttonId)\r\n );\r\n $(buttonDom).append(buttonContainer);\r\n });\r\n $(transContainer).append(buttonDom);\r\n }\r\n\r\n // ### _getStaticTextDialogHtml\r\n // create DOM for the static text section of the dialogs.\r\n static _getStaticTextDialogHtml(elements: DialogDefinition, enDb: Record, langDb: Record, htmlContainer: HTMLElement) {\r\n var b = buildDom;\r\n const keys = Object.keys(elements.staticText);\r\n const nodeContainer = b('div')\r\n .classes('dialog-element-container')\r\n .attr('data-component', 'staticText')\r\n .dom();\r\n elements.staticText.forEach((nv: any) => {\r\n const name = Object.keys(nv)[0];\r\n const value = nv[name];\r\n var enVal = enDb[name] ? enDb[name] : value;\r\n var langVal = langDb[name] ? langDb[name] : enDb[name];\r\n const translateElement = SmoTranslationEditor._getHtmlTextInput(\r\n name, enVal, langVal, 'statictext', name);\r\n $(nodeContainer).append(translateElement);\r\n });\r\n $(htmlContainer).append(nodeContainer);\r\n }\r\n static _getDialogComponentHtml(element: DialogDefinitionElement, enDb: DialogTranslation, langDb: DialogTranslation, container: HTMLElement) {\r\n var b = buildDom;\r\n var label = element.label;\r\n var smoName = element.smoName;\r\n if (typeof (enDb.dialogElements.find) !== 'function') {\r\n console.warn('no ENDB!');\r\n }\r\n var enComponent = enDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!enComponent) {\r\n enComponent = JSON.parse(JSON.stringify(element))\r\n }\r\n var langComponent = langDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!langComponent) {\r\n langComponent = JSON.parse(JSON.stringify(element));\r\n }\r\n const enLabel = enComponent!.label ? enComponent!.label : label;\r\n const langLabel = langComponent!.label ? langComponent!.label : label;\r\n const compHtml = SmoTranslationEditor._getHtmlTextInput(\r\n label, enLabel, langLabel, 'component', smoName);\r\n\r\n if (element.options) {\r\n const optionsHtml = b('div').classes('dialog-component-options').dom();\r\n $(compHtml).append(optionsHtml);\r\n if (!enComponent!.options) {\r\n enComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n if (!langComponent!.options) {\r\n langComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n\r\n element.options.forEach((option: DialogDefinitionOption) => {\r\n var enOption = enComponent!.options!.find((op: any) => op.value === option.value);\r\n var langOption = langComponent!.options!.find((op: any) => op.value === option.value);\r\n if (!enOption || !enOption.label) {\r\n enOption = JSON.parse(JSON.stringify(option));\r\n }\r\n if (!langOption || !langOption.label) {\r\n langOption = JSON.parse(JSON.stringify(option));\r\n }\r\n const optionHtml = SmoTranslationEditor._getHtmlTextInput(\r\n option.value.toString(), enOption!.label, langOption!.label, 'component-option', option!.value.toString());\r\n $(optionsHtml).append(optionHtml)\r\n });\r\n }\r\n $(container).append(compHtml);\r\n }\r\n\r\n static getDialogTranslationHtml(dialogCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('db-translate-container').attr('data-dbcontainer', dialogCtor)\r\n .append(b('button').classes('icon-plus trans-expander'))\r\n .append(b('span').classes('db-translate-title').text(dialogCtor)).dom() as HTMLElement;\r\n var ctor = eval('globalThis.Smo.' + dialogCtor);\r\n if (!ctor) {\r\n console.warn('Bad dialog in translate: ' + dialogCtor);\r\n return;\r\n }\r\n var elements = ctor.dialogElements as DialogDefinition;\r\n var enDb = enStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!enDb) {\r\n enDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }\r\n ));\r\n }\r\n var langDb = langStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!langDb) {\r\n langDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }));\r\n }\r\n const htmlText = SmoTranslationEditor._getHtmlTextInput(dialogCtor, enDb!.label, langDb!.label, 'dialog-label', dialogCtor);\r\n $(container).append(htmlText);\r\n if (elements.staticText) {\r\n SmoTranslationEditor._getStaticTextDialogHtml(elements, enDb!.staticText, langDb!.staticText, container);\r\n }\r\n elements.elements.forEach((element: DialogDefinitionElement) => {\r\n if (element.smoName && element.label) {\r\n SmoTranslationEditor._getDialogComponentHtml(element, enDb!, langDb!, container);\r\n }\r\n });\r\n return container;\r\n }\r\n static getAllTranslationHtml(lang: string) {\r\n const enStr: TranslationStrings = SmoLanguage.en.strings;\r\n const langStr: TranslationStrings = (SmoLanguage as any)[lang].strings;\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('top-translate-container')\r\n .attr('dir', (SmoLanguage as any)[lang].dir).dom() as HTMLElement;\r\n SmoTranslator.allDialogs.forEach((dialog) => {\r\n const htmlDom: HTMLElement | undefined = SmoTranslationEditor.getDialogTranslationHtml(dialog, enStr, langStr);\r\n if (htmlDom) {\r\n $(container).append(htmlDom);\r\n }\r\n });\r\n SmoTranslator.allMenus.forEach((menu) => {\r\n $(container).append(SmoTranslationEditor._getMenuTextDialogHtml(menu, enStr, langStr));\r\n });\r\n SmoTranslationEditor.getButtonTranslateHtml(enStr, langStr, container);\r\n var resultDom = b('div').classes('translation-json-container').append(\r\n b('textarea').classes('translation-json-text')).append(\r\n b('div').append(\r\n b('button').classes('translate-submit-button').text('Submit')\r\n )\r\n ).dom() as HTMLElement;\r\n $(container).append(resultDom);\r\n return container;\r\n }\r\n static parseDom() {\r\n var json = [];\r\n // $('.top-translate-container .db-translate-container[data-dbcontainer] [data-component=\"staticText\"]')\r\n $('.top-translate-container .db-translate-container[data-dbcontainer]').each((ix: number, dbEl: any) => {\r\n var db = $(dbEl).attr('data-dbcontainer');\r\n var obj: any = { ctor: db };\r\n var elements: any[] = [];\r\n var domComponents = $(dbEl).find('[data-component]');\r\n $(domComponents).each(function (ix: number, domComponent: any) {\r\n const compType = $(domComponent).attr('data-component');\r\n if (compType === 'staticText') {\r\n var stElements: any[] = [];\r\n $(domComponent).find('[data-statictext]').each((ix: number, stDom: any) => {\r\n const key = $(stDom).attr('data-statictext');\r\n const value = $(stDom).find('input.trans-label-input').val();\r\n const stNode = JSON.parse('{\"' + key + '\":\"' + value + '\"}');\r\n stElements.push(stNode);\r\n });\r\n elements.push({ staticText: stElements });\r\n } else {\r\n var dbComponent = { id: compType, label: '', options: {} };\r\n dbComponent.label = $(domComponent).find('input.trans-label-input').val();\r\n var compOptions: any[] = [];\r\n $(domComponent).find('[data-component-option]').each(function (ix: number, optionDom: any) {\r\n const value = $(optionDom).find('.trans-db-text').text();\r\n const label = $(optionDom).find('input.trans-label-input').val();\r\n compOptions.push({ value: value, label: label });\r\n });\r\n dbComponent.options = compOptions;\r\n elements.push(dbComponent);\r\n }\r\n });\r\n obj.dialogElements = elements;\r\n json.push(obj);\r\n });\r\n $('.menu-translate-container[data-menucontainer]').each((ix: number, menuEl: any) => {\r\n var menuId = $(menuEl).attr('data-menucontainer');\r\n var obj = { ctor: menuId, label: '', options: {}, menuItems: {} };\r\n const menuLabel = $(menuEl)\r\n .find('.dialog-element-container[data-menulabel] .trans-label-input')\r\n .val();\r\n obj.label = menuLabel;\r\n var menuItems: any[] = [];\r\n var itemsDom = $(menuEl).find('.menu-item-container .dialog-element-container');\r\n $(itemsDom).each((ix: number, itemDom: any) => {\r\n const value = $(itemDom).find('.trans-db-text').text();\r\n const text = $(itemDom).find('input.trans-label-input').val();\r\n menuItems.push({ value: value, text: text });\r\n });\r\n obj.menuItems = menuItems;\r\n json.push(obj);\r\n });\r\n var ribbonText: any[] = [];\r\n $('.ribbon-translate-container .ribbon-button-container').each((ix: number, buttonEl: any) => {\r\n const buttonId = $(buttonEl).find('.trans-db-text').text();\r\n const buttonText = $(buttonEl).find('input.trans-label-input').val();\r\n ribbonText.push({ buttonId: buttonId, buttonText: buttonText });\r\n });\r\n json.push({ ribbonText: ribbonText });\r\n return json;\r\n }\r\n static startEditor(lang: string) {\r\n createTopDomContainer('.translation-editor');\r\n var transDom = SmoTranslationEditor.getAllTranslationHtml(lang);\r\n $('.translation-editor').append(transDom);\r\n $('body').addClass('translation-mode');\r\n $('.plaintext-translate').each(function (ix: number, el: any) {\r\n var txt = $(el).text();\r\n $(el).closest('.trans-label').find('input.trans-label-input').val(txt);\r\n });\r\n\r\n $('.db-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.db-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.menu-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.menu-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.ribbon-translate-container button.trans-expander').off('click').on('click', function () {\r\n const dom = $('.ribbon-translate-container button.trans-expander');\r\n var exp = $(dom).closest('.ribbon-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(dom).removeClass('icon-minus');\r\n $(dom).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(dom).addClass('icon-minus');\r\n $(dom).removeClass('icon-plus');\r\n }\r\n });\r\n $('.translate-submit-button').off('click').on('click', () => {\r\n var json = SmoTranslationEditor.parseDom();\r\n $('.translation-json-text').val(JSON.stringify(json, null, ' '));\r\n });\r\n\r\n\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultEditorKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"=\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"-\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"+\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"upOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"_\",\r\n ctrlKey:false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"downOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"F\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleCourtesyAccidental\"\r\n }, {\r\n event: \"keydown\",\r\n key: \".\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"doubleDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \",\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"halveDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \">\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"dotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"<\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"undotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"a\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"A\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"slashGraceNotes\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"b\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"G\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"removeGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"e\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"f\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeRest\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"rerender\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"p\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"playScore\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"P\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"pausePlayer\"\r\n },\r\n { event: \"keydown\",\r\n key: \" \",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"togglePlayer\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"s\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"stopPlayer\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"t\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"tempoDialog\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n },\r\n // interval commands\r\n {\r\n event: \"keydown\",\r\n key: \"2\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"4\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"6\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"@\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"$\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"#\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"%\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"^\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"&\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"*\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"0\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"unmakeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"B\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleBeamDirection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Delete\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"z\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"undo\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"copy\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"x\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"toggleBeamGroup\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"X\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"beamSelections\"\r\n },{\r\n event: \"keydown\",\r\n key: \"v\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"paste\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"h\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"j\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"k\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"l\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemovePizzicato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"H\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"J\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"K\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"L\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemovePizzicato\"\r\n },{\r\n event: \"keydown\",\r\n key: \"E\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleEnharmonic\"\r\n }\r\n ];\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultTrackerKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeftMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchUp\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchDown\"\r\n }\r\n ];\r\n }\r\n}\r\n","import { SmoDynamicText } from '../../smo/data/noteModifiers';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiDynamicsMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Dynamics',\r\n menuItems: [{\r\n icon: 'pianissimo',\r\n text: 'Pianissimo',\r\n value: 'pp'\r\n }, {\r\n icon: 'piano',\r\n text: 'Piano',\r\n value: 'p'\r\n }, {\r\n icon: 'mezzopiano',\r\n text: 'Mezzo-piano',\r\n value: 'mp'\r\n }, {\r\n icon: 'mezzoforte',\r\n text: 'Mezzo-forte',\r\n value: 'mf'\r\n }, {\r\n icon: 'forte',\r\n text: 'Forte',\r\n value: 'f'\r\n }, {\r\n icon: 'fortissimo',\r\n text: 'Fortissimo',\r\n value: 'ff'\r\n }, {\r\n icon: 'sfz',\r\n text: 'sfortzando',\r\n value: 'sfz'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiDynamicsMenu.defaults;\r\n }\r\n\r\n selection(ev: any) {\r\n const text: string = $(ev.currentTarget).attr('data-value');\r\n const props = SmoDynamicText.defaults;\r\n props.text = text;\r\n const dynamic = new SmoDynamicText(props);\r\n this.view.addDynamic(this.tracker.selections[0], dynamic);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {\r\n SuiSaveFileDialog, SuiPrintFileDialog, \r\n // SuiSaveActionsDialog, SuiLoadActionsDialog, \r\n SuiLoadFileDialog, SuiLoadMidiDialog,\r\n SuiSaveXmlDialog, SuiSaveMidiDialog, SuiLoadMxmlDialog, SuiSaveVexDialog\r\n} from '../dialogs/fileDialogs';\r\nimport { SmoScore } from '../../smo/data/score';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiFileMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults = {\r\n label: 'File',\r\n menuItems: [{\r\n icon: 'folder-new',\r\n text: 'New Score',\r\n value: 'newFile'\r\n }, {\r\n icon: 'folder-open',\r\n text: 'Open',\r\n value: 'openFile'\r\n }, {\r\n icon: '',\r\n text: 'Quick Save',\r\n value: 'quickSave'\r\n }, {\r\n icon: 'folder-save',\r\n text: 'Save',\r\n value: 'saveFile'\r\n }, {\r\n icon: '',\r\n text: 'Print',\r\n value: 'printScore'\r\n }, {\r\n icon: '',\r\n text: 'Import MusicXML',\r\n value: 'importMxml'\r\n }, {\r\n icon: '',\r\n text: 'Export MusicXML',\r\n value: 'exportXml'\r\n }, {\r\n icon: '',\r\n text: 'Export Midi',\r\n value: 'exportMidi'\r\n }, {\r\n icon: '',\r\n text: 'Import Midi',\r\n value: 'importMidi'\r\n }, {\r\n icon: '',\r\n text: 'Export Vex',\r\n value: 'exportVex'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiFileMenu.defaults;\r\n }\r\n systemPrint() {\r\n window.print();\r\n createAndDisplayDialog(SuiPrintFileDialog, {\r\n ctor: 'SuiPrintFileDialog',\r\n id: 'print',\r\n eventSource: this.eventSource,\r\n modifier: null,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n tracker: this.tracker\r\n });\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n const self = this;\r\n if (text === 'saveFile') {\r\n createAndDisplayDialog(SuiSaveFileDialog, {\r\n ctor: 'SuiSaveFileDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'openFile') {\r\n createAndDisplayDialog(SuiLoadFileDialog, {\r\n ctor: 'SuiLoadFileDialog',\r\n id: 'loadFile',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'newFile') {\r\n const score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n this.view.changeScore(score);\r\n } else if (text === 'quickSave') {\r\n this.view.quickSave();\r\n } else if (text === 'printScore') {\r\n const systemPrint = () => {\r\n self.systemPrint();\r\n };\r\n this.view.renderer.renderForPrintPromise().then(systemPrint);\r\n } else if (text === 'exportXml') {\r\n createAndDisplayDialog(SuiSaveXmlDialog, {\r\n ctor: 'SuiSaveXmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportVex') {\r\n createAndDisplayDialog(SuiSaveVexDialog, {\r\n ctor: 'SuiSaveVexDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportMidi') {\r\n createAndDisplayDialog(SuiSaveMidiDialog, {\r\n ctor: 'SuiSaveMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'importMxml') {\r\n createAndDisplayDialog(SuiLoadMxmlDialog, {\r\n ctor: 'SuiLoadMxmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n }); \r\n } else if (text === 'importMidi') {\r\n createAndDisplayDialog(SuiLoadMidiDialog, {\r\n ctor: 'SuiLoadMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiKeySignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiKeySignatureMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Key',\r\n menuItems: [{\r\n icon: 'key-sig-c',\r\n text: 'C Major',\r\n value: 'KeyOfC',\r\n }, {\r\n icon: 'key-sig-f',\r\n text: 'F Major',\r\n value: 'KeyOfF',\r\n }, {\r\n icon: 'key-sig-g',\r\n text: 'G Major',\r\n value: 'KeyOfG',\r\n }, {\r\n icon: 'key-sig-bb',\r\n text: 'Bb Major',\r\n value: 'KeyOfBb'\r\n }, {\r\n icon: 'key-sig-d',\r\n text: 'D Major',\r\n value: 'KeyOfD'\r\n }, {\r\n icon: 'key-sig-eb',\r\n text: 'Eb Major',\r\n value: 'KeyOfEb'\r\n }, {\r\n icon: 'key-sig-a',\r\n text: 'A Major',\r\n value: 'KeyOfA'\r\n }, {\r\n icon: 'key-sig-ab',\r\n text: 'Ab Major',\r\n value: 'KeyOfAb'\r\n }, {\r\n icon: 'key-sig-e',\r\n text: 'E Major',\r\n value: 'KeyOfE'\r\n }, {\r\n icon: 'key-sig-bd',\r\n text: 'Db Major',\r\n value: 'KeyOfDb'\r\n }, {\r\n icon: 'key-sig-b',\r\n text: 'B Major',\r\n value: 'KeyOfB'\r\n }, {\r\n icon: 'key-sig-fs',\r\n text: 'F# Major',\r\n value: 'KeyOfF#'\r\n }, {\r\n icon: 'key-sig-cs',\r\n text: 'C# Major',\r\n value: 'KeyOfC#'\r\n },\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiKeySignatureMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n let keySig = $(ev.currentTarget).attr('data-value');\r\n keySig = (keySig === 'cancel' ? keySig : keySig.substring(5, keySig.length));\r\n if (keySig === 'cancel') {\r\n return;\r\n }\r\n this.view.addKeySignature(keySig);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoTranslator } from '../i18n/language';\r\n\r\ndeclare var $: any;\r\nexport class SuiLanguageMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiLanguageMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Language',\r\n menuItems: [{\r\n icon: '',\r\n text: 'English',\r\n value: 'en'\r\n }, {\r\n icon: '',\r\n text: 'Deutsch',\r\n value: 'de'\r\n }, {\r\n icon: '',\r\n text: 'اَلْعَرَبِيَّةُ',\r\n value: 'ar'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n getDefinition() {\r\n return SuiLanguageMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n\r\n SmoTranslator.setLanguage(op);\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier, ModalComponent } from '../common';\r\nimport { BrowserEventSource, EventHandler } from '../eventSource';\r\nimport { KeyBinding } from '../../application/common';\r\nimport { Qwerty } from '../qwerty';\r\nimport { SuiMenuBase, SuiMenuParams } from './menu';\r\ndeclare var $: any;\r\n\r\nexport interface SuiMenuManagerParams {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer?: HTMLElement;\r\n}\r\n\r\nexport class SuiMenuManager {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer: HTMLElement;\r\n bound: boolean = false;\r\n hotkeyBindings: Record = {};\r\n closeMenuPromise: Promise | null = null;\r\n menu: SuiMenuBase | null = null;\r\n keydownHandler: EventHandler | null = null;\r\n menuPosition: SvgBox = { x: 250, y: 40, width: 1, height: 1 };\r\n tracker: SuiTracker;\r\n menuBind: KeyBinding[] = SuiMenuManager.menuKeyBindingDefaults;\r\n constructor(params: SuiMenuManagerParams) {\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.bound = false; \r\n this.menuContainer = params.menuContainer ?? createTopDomContainer('.menuContainer');\r\n this.completeNotifier = params.completeNotifier;\r\n this.undoBuffer = params.undoBuffer;\r\n this.tracker = params.view.tracker;\r\n }\r\n\r\n static get defaults() {\r\n return {\r\n menuBind: SuiMenuManager.menuKeyBindingDefaults,\r\n menuContainer: '.menuContainer'\r\n };\r\n }\r\n\r\n get closeModalPromise() {\r\n return this.closeMenuPromise;\r\n }\r\n\r\n setController(c: CompleteNotifier) {\r\n this.completeNotifier = c;\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n // ### Description:\r\n // slash ('/') menu key bindings. The slash key followed by another key brings up\r\n // a menu.\r\n static get menuKeyBindingDefaults(): KeyBinding[] {\r\n return [\r\n {\r\n event: 'keydown',\r\n key: 'n',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiLanguageMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'k',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiKeySignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'p',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'l',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiStaffModifierMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'd',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiDynamicsMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'f',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiFileMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'm',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiTimeSignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'a',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiMeasureMenu'\r\n }, {\r\n event: 'partSelection',\r\n key: '',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartSelectionMenu'\r\n }\r\n ];\r\n }\r\n _advanceSelection(inc: number) {\r\n if (!this.menu) {\r\n return;\r\n }\r\n const options = $('.menuContainer ul.menuElement li.menuOption');\r\n inc = inc < 0 ? options.length - 1 : 1;\r\n this.menu.focusIndex = (this.menu.focusIndex + inc) % options.length;\r\n $(options[this.menu.focusIndex]).find('button').focus();\r\n }\r\n\r\n unattach() {\r\n if (!this.keydownHandler) {\r\n return;\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n $('body').removeClass('modal');\r\n $(this.menuContainer).html('');\r\n $('body').off('dismissMenu');\r\n this.bound = false;\r\n this.menu = null;\r\n }\r\n\r\n attach() {\r\n if (!this.menu) {\r\n return;\r\n }\r\n let hotkey = 0;\r\n\r\n $(this.menuContainer).html('');\r\n $(this.menuContainer).attr('z-index', '12');\r\n const b = buildDom;\r\n const r = b('ul').classes('menuElement').attr('size', this.menu.menuItems.length.toString())\r\n .css('left', '' + this.menuPosition.x + 'px')\r\n .css('top', '' + this.menuPosition.y + 'px');\r\n this.menu.menuItems.forEach((item) => {\r\n var vkey = (hotkey < 10) ? String.fromCharCode(48 + hotkey) :\r\n String.fromCharCode(87 + hotkey);\r\n\r\n r.append(\r\n b('li').classes('menuOption').append(\r\n b('button').attr('data-value', item.value).append(\r\n b('span').classes('menuText').text(item.text))\r\n .append(b('span').classes('icon icon-' + item.icon))\r\n .append(b('span').classes('menu-key').text('' + vkey))));\r\n item.hotkey = vkey;\r\n hotkey += 1;\r\n });\r\n $(this.menuContainer).append(r.dom());\r\n $('body').addClass('modal');\r\n this.bindEvents();\r\n }\r\n\r\n slashMenuMode(completeNotifier: CompleteNotifier) {\r\n var self = this;\r\n if (this.closeMenuPromise) {\r\n console.log('menu already open, skipping');\r\n return;\r\n }\r\n this.bindEvents();\r\n layoutDebug.addDialogDebug('slash menu creating closeMenuPromise');\r\n // A menu asserts this event when it is done.\r\n this.closeMenuPromise = new Promise((resolve) => {\r\n $('body').off('menuDismiss').on('menuDismiss', () => {\r\n layoutDebug.addDialogDebug('menuDismiss received, resolve closeMenuPromise');\r\n self.unattach();\r\n $('body').removeClass('slash-menu');\r\n self.closeMenuPromise = null;\r\n resolve();\r\n });\r\n });\r\n // take over the keyboard\r\n if (this.closeModalPromise) {\r\n completeNotifier.unbindKeyboardForModal(this as ModalComponent);\r\n }\r\n }\r\n\r\n dismiss() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n displayMenu(menu: SuiMenuBase | null) {\r\n this.menu = menu;\r\n if (!this.menu) {\r\n return;\r\n }\r\n this.menu.preAttach();\r\n this.attach();\r\n this.menu!.menuItems.forEach((item) => {\r\n if (typeof(item.hotkey) !== 'undefined') {\r\n this.hotkeyBindings[item.hotkey] = item.value;\r\n }\r\n });\r\n }\r\n\r\n createMenu(action: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menuPosition = { x: 250, y: 40, width: 1, height: 1 };\r\n // If we were called from the ribbon, we notify the controller that we are\r\n // taking over the keyboard. If this was a key-based command we already did.\r\n layoutDebug.addDialogDebug('createMenu creating ' + action);\r\n const ctor = eval('globalThis.Smo.' + action);\r\n const params: SuiMenuParams = \r\n {\r\n position: this.menuPosition,\r\n tracker: this.tracker,\r\n score: this.score,\r\n completeNotifier: this.completeNotifier,\r\n closePromise: this.closeMenuPromise,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n undoBuffer: this.undoBuffer,\r\n ctor: action\r\n };\r\n this.displayMenu(new ctor(params));\r\n }\r\n\r\n // ### evKey\r\n // We have taken over menu commands from controller. If there is a menu active, send the key\r\n // to it. If there is not, see if the keystroke creates one. If neither, dismissi the menu.\r\n evKey(event: any) {\r\n Qwerty.handleKeyEvent(event);\r\n if (['Tab', 'Enter'].indexOf(event.code) >= 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (event.code === 'Escape') {\r\n this.dismiss();\r\n }\r\n if (this.menu) {\r\n if (event.code === 'ArrowUp') {\r\n this._advanceSelection(-1);\r\n } else if (event.code === 'ArrowDown') {\r\n this._advanceSelection(1);\r\n } else if (this.hotkeyBindings[event.key]) {\r\n $('button[data-value=\"' + this.hotkeyBindings[event.key] + '\"]').click();\r\n } else {\r\n this.menu.keydown();\r\n }\r\n return;\r\n }\r\n const binding = this.menuBind.find((ev) =>\r\n ev.key === event.key\r\n );\r\n if (!binding) {\r\n this.dismiss();\r\n return;\r\n }\r\n this.createMenu(binding.action);\r\n }\r\n\r\n bindEvents() {\r\n this.hotkeyBindings = { };\r\n $('body').addClass('slash-menu');\r\n // We need to keep track of is bound, b/c the menu can be created from\r\n // different sources.\r\n if (!this.bound) {\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n this.bound = true;\r\n }\r\n $(this.menuContainer).find('button').off('click').on('click', (ev: any) => {\r\n if ($(ev.currentTarget).attr('data-value') === 'cancel') {\r\n this.menu!.complete();\r\n return;\r\n }\r\n this.menu!.selection(ev);\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiInsertMeasures } from '../dialogs/addMeasure';\r\nimport { SuiMeasureDialog } from '../dialogs/measureFormat';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\nexport class SuiMeasureMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Add Measures',\r\n value: 'addMenuCmd'\r\n }, {\r\n icon: 'icon-cross',\r\n text: 'Delete Selected Measures',\r\n value: 'deleteSelected'\r\n }, {\r\n icon: '',\r\n text: 'Format Measure',\r\n value: 'formatMeasureDialog'\r\n }, {\r\n icon: '',\r\n text: 'Remove system breaks selection',\r\n value: 'removeSystemBreaks'\r\n }, {\r\n icon: '',\r\n text: 'Reset formatting selection',\r\n value: 'resetFormatting'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n getDefinition() {\r\n return SuiMeasureMenu.defaults;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'formatMeasureDialog') {\r\n createAndDisplayDialog(SuiMeasureDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'measure-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n return;\r\n }\r\n if (text === 'addMenuCmd') {\r\n createAndDisplayDialog(SuiInsertMeasures, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n }\r\n if (text === 'addMenuAfterCmd') {\r\n this.view.addMeasure(true);\r\n this.complete();\r\n }\r\n if (text === 'deleteSelected') {\r\n this.view.deleteMeasure();\r\n }\r\n if (text === 'removeSystemBreaks') {\r\n this.view.removeSystemBreaks();\r\n }\r\n if (text === 'resetFormatting') {\r\n this.view.setMeasureFormat(new SmoMeasureFormat(SmoMeasureFormat.defaults));\r\n }\r\n this.complete();\r\n }\r\n}","import { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { CompleteNotifier } from '../common';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SmoTranslator } from '../i18n/language';\r\ndeclare var $: any;\r\n/**\r\n * Data for a menu choice. 'value' indicates which options selected\r\n * @param icon - .icon class will be added to the choice\r\n * @param text - text to describe the choice\r\n * @param value - the value received by the menu loop\r\n * @param hotkey - optional key binding, if not supplied one is selected\r\n */\r\nexport interface MenuChoiceDefinition {\r\n icon: string,\r\n text: string,\r\n value: string,\r\n hotkey?: string\r\n}\r\n/**\r\n * Menu just array of choices\r\n * @param label - Not currently displayed\r\n * @param menuItems - list of choices\r\n */\r\nexport interface MenuDefinition {\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\nexport interface MenuTranslation {\r\n ctor: string,\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\n/**\r\n * All menus take the same options. Menu choices can alter the score\r\n * directly, or call dialogs or even other menus\r\n * @param ctor dialog constructor\r\n * @param position - menu position\r\n * @param view the MVVM object to change the score\r\n * @param score SmoScore, could also be read from the view\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param closePromise resolved when the menu closes, used to syncronize with other modals\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n*/\r\nexport interface SuiMenuParams {\r\n ctor: string,\r\n position: SvgBox,\r\n tracker: SuiTracker,\r\n score: SmoScore,\r\n completeNotifier: CompleteNotifier,\r\n closePromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer: UndoBuffer\r\n}\r\nexport abstract class SuiMenuBase {\r\n label: string;\r\n menuItems: MenuChoiceDefinition[];\r\n ctor: string;\r\n completeNotifier: CompleteNotifier;\r\n score: SmoScore;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n focusIndex: number = -1;\r\n closePromise: Promise | null;\r\n tracker: SuiTracker;\r\n constructor(params: SuiMenuParams) {\r\n this.ctor = params.ctor;\r\n const definition: MenuDefinition = this.getDefinition();\r\n this.label = definition.label;\r\n this.menuItems = definition.menuItems;\r\n this.completeNotifier = params.completeNotifier;\r\n this.score = params.score;\r\n this.view = params.view;\r\n this.undoBuffer = params.undoBuffer;\r\n this.eventSource = params.eventSource;\r\n this.closePromise = params.closePromise;\r\n this.tracker = params.tracker;\r\n SmoTranslator.registerMenu(this.ctor);\r\n }\r\n abstract selection(ev: any): void;\r\n abstract getDefinition(): MenuDefinition;\r\n /**\r\n * Base class can override this, called before display and event binding to \r\n * add or remove options from the static list\r\n */\r\n preAttach() { }\r\n static printTranslate(_class: string): MenuTranslation {\r\n const xx: any = eval('Smo.' + _class);\r\n const items: MenuChoiceDefinition[] = xx.defaults.menuItems as MenuChoiceDefinition[];\r\n const rvItems: MenuChoiceDefinition[] = [];\r\n items.forEach((item) => {\r\n rvItems.push({ value: item.value, text: item.text, icon: '' });\r\n });\r\n return { ctor: _class, label: xx.defaults.label, menuItems: items };\r\n }\r\n\r\n complete() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n // Most menus don't process their own events\r\n keydown() {}\r\n}","import { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {SuiScoreArpeggioDialog } from '../dialogs/arpeggio';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiNoteMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Toggle Cue',\r\n value: 'toggleCueCmd'\r\n }, {\r\n icon: '',\r\n text: 'Arpeggio',\r\n value: 'arpeggioDialog'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n getDefinition() {\r\n return SuiNoteMenu.defaults;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'toggleCueCmd') {\r\n await this.view.toggleCue();\r\n } else if (text === 'arpeggioDialog') {\r\n createAndDisplayDialog(SuiScoreArpeggioDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiArpeggioDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n }\r\n this.complete(); \r\n }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartSelectionMenu extends SuiMenuBase {\r\n partMap: { keys: number[], partMap: Record } = { keys: [], partMap: {} };\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartSelectionMenu.defaults;\r\n }\r\n selectPart(val: number) {\r\n if (val < 0) {\r\n this.view.viewAll();\r\n this.complete();\r\n return;\r\n }\r\n const partInfo = this.partMap.partMap[val];\r\n this.view.exposePart(this.view.storeScore.staves[partInfo.associatedStaff]);\r\n this.complete();\r\n } \r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.partMap = this.view.getPartMap();\r\n if (this.view.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push({\r\n icon: '',\r\n text: 'View All',\r\n value: '-1'\r\n });\r\n }\r\n this.partMap.keys.forEach((key) => {\r\n defs.push({\r\n icon: '',\r\n text: this.partMap.partMap[key].partName,\r\n value: key.toString()\r\n });\r\n });\r\n defs.push({\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n const choice = parseInt(op);\r\n if (isNaN(choice)) {\r\n this.complete(); // cancel\r\n }\r\n this.selectPart(choice);\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiScoreViewDialog } from '../dialogs/scoreView';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { SuiPartInfoDialog } from '../dialogs/partInfo';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiNewPartDialog } from '../dialogs/newPart';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Create New Part/Stave',\r\n value: 'createPart'\r\n }, {\r\n icon: 'cancel-circle',\r\n text: 'Remove Selected Parts/Staves',\r\n value: 'removePart'\r\n }, {\r\n icon: '',\r\n text: 'Part Properties',\r\n value: 'editPart'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'View Partial Score',\r\n value: 'view'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Instrument Properties',\r\n value: 'editInstrument'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartMenu.defaults;\r\n }\r\n createPart() {\r\n createAndDisplayDialog(SuiNewPartDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'newPartDialog',\r\n ctor: 'SuiNewPartDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execView() {\r\n createAndDisplayDialog(SuiScoreViewDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreViewDialog',\r\n ctor: 'SuiScoreViewDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n editPart() {\r\n const selection = this.view.tracker.selections[0];\r\n const self = this;\r\n\r\n if (this.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) {\r\n this.view.exposePart(selection.staff);\r\n }\r\n this.view.renderPromise().then(() => {\r\n createAndDisplayDialog(SuiPartInfoDialog,\r\n {\r\n completeNotifier: self.completeNotifier!,\r\n view: self.view,\r\n eventSource: self.eventSource,\r\n id: 'editPart',\r\n ctor: 'SuiPartInfoDialog',\r\n tracker: self.view.tracker,\r\n modifier: null,\r\n startPromise: self.closePromise\r\n }\r\n );\r\n });\r\n }\r\n editInstrument() {\r\n createAndDisplayDialog(SuiInstrumentDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'instrumentModal',\r\n ctor: 'SuiInstrumentDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n removePart() {\r\n this.view.removeStaff();\r\n this.complete();\r\n }\r\n pageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n preAttach() {\r\n const fullScore = this.view.score.staves.length < this.view.storeScore.staves.length;\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // Only show 'display all' if the full score is not already displayed\r\n if (item.value === 'viewAll') {\r\n if (!fullScore) {\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'pageLayout') {\r\n // only show the page layout in part menu if we are in part mode\r\n if (this.view.isPartExposed()) {\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'view') {\r\n if (this.view.isPartExposed() === false) {\r\n // don't let the user restrict the view if we are already viewing a part.\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'editPart') {\r\n if (this.view.isPartExposed()) {\r\n item.text = 'Part Properties';\r\n defs.push(item);\r\n }\r\n } else {\r\n defs.push(item);\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n if (op === 'pageLayout') {\r\n this.pageLayout();\r\n this.complete();\r\n } else if (op === 'view') {\r\n this.execView();\r\n this.complete();\r\n } else if (op === 'createPart') {\r\n this.createPart();\r\n this.complete();\r\n } else if (op === 'removePart') {\r\n this.removePart();\r\n this.complete();\r\n } else if (op === 'editPart') {\r\n this.editPart();\r\n this.complete();\r\n } else if (op === 'editInstrument') {\r\n this.editInstrument();\r\n this.complete();\r\n } else if (op === 'cancel') {\r\n this.complete();\r\n } else if (op === 'viewAll') {\r\n this.view.viewAll();\r\n this.complete();\r\n }\r\n }\r\n keydown() { }\r\n}\r\n","import { MenuDefinition, MenuChoiceDefinition, SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { SuiScorePreferencesDialog } from '../dialogs/preferences';\r\nimport { SuiScoreIdentificationDialog } from '../dialogs/scoreId';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiScoreFontDialog } from '../dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../dialogs/globalLayout';\r\nimport { SuiTransposeScoreDialog } from '../dialogs/transposeScore';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiStaffGroupDialog } from '../dialogs/staffGroup';\r\nimport { SuiAudioSettingsDialog } from '../dialogs/audioSettings';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Score Settings',\r\n menuItems: [{\r\n icon: '',\r\n text: 'Smoosic Preferences',\r\n value: 'preferences'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Global Layout',\r\n value: 'globalLayout'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'Audio Settings',\r\n value: 'audioSettings'\r\n }, {\r\n icon: '',\r\n text: 'System Groups',\r\n value: 'staffGroups'\r\n }, {\r\n icon: '',\r\n text: 'Score Fonts',\r\n value: 'fonts'\r\n }, {\r\n icon: '',\r\n text: 'Score Info',\r\n value: 'identification'\r\n }, {\r\n icon: '',\r\n text: 'Transpose Score',\r\n value: 'transposeScore'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiScoreMenu.defaults;\r\n }\r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // show these options no matter what\r\n if (['fonts', 'cancel', 'identification', 'preferences', 'audioSettings', 'transposeScore'].findIndex((x) => x === item.value) >= 0) {\r\n defs.push(item);\r\n } else if (item.value === 'pageLayout' || item.value === 'globalLayout' || item.value === 'staffGroups') {\r\n if (this.view.isPartExposed() === false) {\r\n // only show the page layout in score menu if we are in score mode\r\n defs.push(item);\r\n } \r\n } else if (item.value === 'viewAll') {\r\n // Only show 'view all' if we are not viewing all\r\n if (this.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push(item);\r\n }\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n execStaffGroups() {\r\n createAndDisplayDialog(SuiStaffGroupDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n }\r\n );\r\n }\r\n execScoreId() {\r\n SuiScoreIdentificationDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiScoreIdentificationDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execFonts() {\r\n SuiScoreFontDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'fontDialog',\r\n ctor: 'SuiScoreFontDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execGlobalLayout() {\r\n createAndDisplayDialog(SuiGlobalLayoutDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'globalLayout',\r\n ctor: 'SuiGlobalLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPreferences() {\r\n createAndDisplayDialog(SuiScorePreferencesDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'preferences',\r\n ctor: 'SuiScorePreferencesDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execAudioSettings() {\r\n createAndDisplayDialog(SuiAudioSettingsDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'audioSettings',\r\n ctor: 'SuiAudioSettingsDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execTransposeScore() {\r\n createAndDisplayDialog(SuiTransposeScoreDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiTransposeScoreDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'pageLayout') {\r\n this.execPageLayout();\r\n } else if (text === 'staffGroups') {\r\n this.execStaffGroups();\r\n } else if (text === 'preferences') {\r\n this.execPreferences();\r\n } else if (text === 'fonts') {\r\n this.execFonts();\r\n } else if (text === 'globalLayout') {\r\n this.execGlobalLayout();\r\n } else if (text === 'identification') {\r\n this.execScoreId();\r\n } else if (text === 'viewAll') {\r\n this.view.viewAll();\r\n } else if (text === 'audioSettings') {\r\n this.execAudioSettings();\r\n } else if (text === 'transposeScore') {\r\n this.execTransposeScore();\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SuiScoreView } from '../../render/sui/scoreView';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffModifierMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Lines',\r\n menuItems: [{\r\n icon: 'cresc',\r\n text: 'Cresc. Hairpin',\r\n value: 'crescendo'\r\n }, {\r\n icon: 'decresc',\r\n text: 'Dim. Hairpin',\r\n value: 'decrescendo'\r\n }, {\r\n icon: 'slur',\r\n text: 'Slur',\r\n value: 'slur'\r\n }, {\r\n icon: 'slur',\r\n text: 'Tie',\r\n value: 'tie'\r\n }, {\r\n icon: 'ending',\r\n text: 'nth ending',\r\n value: 'ending'\r\n }, {\r\n icon: '',\r\n text: 'Dim. Bracket',\r\n value: 'dimenuendo'\r\n }, {\r\n icon: '',\r\n text: 'Cresc. Bracket',\r\n value: 'crescendoBracket'\r\n }, {\r\n icon: '',\r\n text: 'Accelerando',\r\n value: 'accel'\r\n }, {\r\n icon: '',\r\n text: 'Ritard',\r\n value: 'ritard'\r\n }, {\r\n icon: 'slur',\r\n text: 'Reset slurs',\r\n value: 'resetSlurs'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiStaffModifierMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n if (op === 'ending') {\r\n this.view.addEnding();\r\n } else if (op === 'slur') {\r\n this.view.slur();\r\n } else if (op === 'tie') {\r\n this.view.tie();\r\n } else if (op === 'accel') {\r\n this.view.accelerando();\r\n } else if (op === 'dimenuendo') {\r\n this.view.dimenuendo();\r\n } else if (op === 'ritard') {\r\n this.view.ritard();\r\n } else if (op === 'crescendoBracket') {\r\n this.view.crescendoBracket();\r\n } else if (op === 'crescendo') {\r\n this.view.crescendo();\r\n } else if (op === 'decrescendo') {\r\n this.view.decrescendo();\r\n } else if (op === 'resetSlurs') {\r\n const self = this;\r\n this.view.refreshViewport().then(() => {\r\n self.complete();\r\n });\r\n return;\r\n }\r\n // else cancel...\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiTimeSignatureDialog } from '../dialogs/timeSignature';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Time Sig',\r\n menuItems: [{\r\n icon: 'sixeight',\r\n text: '6/8',\r\n value: '6/8',\r\n }, {\r\n icon: 'fourfour',\r\n text: '4/4',\r\n value: '4/4',\r\n }, {\r\n icon: 'threefour',\r\n text: '3/4',\r\n value: '3/4',\r\n }, {\r\n icon: 'twofour',\r\n text: '2/4',\r\n value: '2/4',\r\n }, {\r\n icon: 'twelveeight',\r\n text: '12/8',\r\n value: '12/8',\r\n }, {\r\n icon: 'seveneight',\r\n text: '7/8',\r\n value: '7/8',\r\n }, {\r\n icon: 'fiveeight',\r\n text: '5/8',\r\n value: '5/8',\r\n }, {\r\n icon: '',\r\n text: 'Other',\r\n value: 'TimeSigOther',\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiTimeSignatureMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'TimeSigOther') {\r\n createAndDisplayDialog(SuiTimeSignatureDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n this.complete();\r\n return;\r\n }\r\n this.view.setTimeSignature(SmoMeasure.convertLegacyTimeSignature(text));\r\n this.complete();\r\n }\r\n\r\n keydown() { }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer, draggable } from \"../common/htmlHelpers\";\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\nexport interface SuiKbRow {\r\n row: string, shifted: string;\r\n};\r\nexport interface SuiKbKey {\r\n icon: string, text: string, shifted: string, classes: string, dataKey: string\r\n};\r\ndeclare var $: any;\r\nexport class Qwerty {\r\n static _shiftTime: number = 0;\r\n static displayed: boolean = false;\r\n static created: boolean = false;\r\n static get navigationElements() {\r\n const kbRows: SuiKbRow[] =\r\n [\r\n { row: '1234567890-=',shifted:'!@#$%^&*()_+'},\r\n { row: 'QWERTYUIOP[]',shifted:'QWERTYUIOP{}'},\r\n { row:\"ASDFGHJKL;'\", shifted:'ASDFGHJKL:\"'},\r\n { row:'ZXCVBNM,./',shifted:'ZXCVBNM<>?'}\r\n ];\r\n const arrows: SuiKbKey[] = [\r\n {icon: 'icon-arrow-left',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowLeft'},\r\n {icon: 'icon-arrow-right',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowRight'},\r\n {icon:'',text:'Space',classes:'wideKey',shifted:'',dataKey:'Space'},\r\n {icon: 'icon-arrow-up',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowUp'},\r\n {icon: 'icon-arrow-down' ,text:'', shifted:'',classes:'helpKey',dataKey:'ArrowDown'},\r\n {icon: '' ,text:'Ins', shifted:'',classes:'helpKey',dataKey:'Insert'},\r\n {icon: '' ,text:'Del', shifted:'',classes:'helpKey',dataKey:'Delete'},\r\n {icon: '' ,text:'Enter', shifted:'',classes:'wideKey',dataKey:'Enter'}\r\n ];\r\n let keyRows: Record = {};\r\n const labels: string[] = ['topNumbers','keys1','keys2','keys3','arrows'];\r\n let j = 0;\r\n\r\n kbRows.forEach((kbRow) => {\r\n var str = kbRow.row;\r\n var shifted = kbRow.shifted;\r\n var keys: SuiKbKey[] = [];\r\n for (var i = 0;i < str.length;++i) {\r\n if (j === 2 && i === 0) {\r\n keys.push({icon:'',text:'Shift',shifted: '', classes:'wideKey',dataKey:'shift'});\r\n }\r\n if (j === 3 && i === 0) {\r\n keys.push({icon:'', text:'Ctrl',shifted: '', classes:'wideKey', dataKey:'ctrl'});\r\n keys.push({icon:'', text:'Alt', shifted: '',classes:'helpKey', dataKey:'alt'});\r\n }\r\n keys.push({icon:'', text:str[i], shifted:shifted[i], classes:'helpKey', dataKey:str[i]});\r\n }\r\n keyRows[labels[j]] = keys;\r\n j += 1;\r\n });\r\n keyRows[labels[j]] = arrows;\r\n return keyRows;\r\n }\r\n static flashShift() {\r\n if (Qwerty._shiftTime) {\r\n Qwerty._shiftTime = 0;\r\n setTimeout(function() {\r\n Qwerty.flashShift();\r\n }, 1000);\r\n } else {\r\n $('.kb-float').removeClass('shifted');\r\n }\r\n }\r\n\r\n static displayForDuration() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n $('#row-4').hide();\r\n }\r\n\r\n static displayForTuplet() {\r\n Qwerty.displayAll();\r\n $('#row-1').hide();\r\n $('#row-2').hide();\r\n }\r\n\r\n static displayForNav() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n }\r\n\r\n static displayAll() {\r\n $('#row-0').show();\r\n $('#row-1').show();\r\n $('#row-2').show();\r\n $('#row-3').show();\r\n $('#row-4').show();\r\n }\r\n\r\n static _flashButton(key: string) {\r\n var e = $('[data-key=\"'+key+'\"]');\r\n if (!e.length) {\r\n e = $('[data-shift=\"'+key+'\"]');\r\n }\r\n if (e.length) {\r\n $(e).removeClass('transition-button');\r\n $(e).addClass('reverse-button');\r\n setTimeout(function() {\r\n $(e).removeClass('reverse-button');\r\n $(e).addClass('transition-button');\r\n },750);\r\n }\r\n }\r\n static get editingKeys() {\r\n return ['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','Insert','Delete'];\r\n }\r\n static handleKeyEvent(evdata: KeyEvent) {\r\n if (Qwerty.editingKeys.indexOf(evdata.code) >= 0) {\r\n Qwerty._flashButton(evdata.code);\r\n } else if (evdata.key.length === 1\r\n && evdata.key.charCodeAt(0) > 32\r\n && evdata.key.charCodeAt(0) < 127) {\r\n Qwerty._flashButton(evdata.key.toUpperCase());\r\n }\r\n if (evdata.code === 'Space') {\r\n Qwerty._flashButton('Space');\r\n }\r\n if (evdata.code === 'Enter') {\r\n Qwerty._flashButton('Enter');\r\n }\r\n if (evdata.ctrlKey) {\r\n Qwerty._flashButton('ctrl');\r\n }\r\n if (evdata.shiftKey) {\r\n Qwerty._flashButton('shift');\r\n $('.kb-float').addClass('shifted');\r\n Qwerty._shiftTime = 1;\r\n Qwerty.flashShift();\r\n }\r\n if (evdata.altKey) {\r\n Qwerty._flashButton('alt');\r\n }\r\n }\r\n\r\n static _kbButton(buttons: SuiKbKey[]) {\r\n var b = buildDom;\r\n var r = b('span').classes('keyContainer');\r\n buttons.forEach((button) => {\r\n var text = button.text;\r\n var shiftedText = button.shifted ? button.shifted : text;\r\n r.append(b('span').classes(button.icon + ' ' + button.classes)\r\n .attr('data-key',button.dataKey).attr('data-shift',shiftedText)\r\n .append(b('span').classes('button-text').text(text))\r\n .append(b('span').classes('button-shifted').text(shiftedText))\r\n );\r\n });\r\n return r;\r\n }\r\n static _buttonBlock(buttons: SuiKbKey[], id: string) {\r\n var b = buildDom;\r\n var r = b('div').classes('keyBlock').attr('id', id);\r\n r.append(Qwerty._kbButton(buttons));\r\n return r;\r\n }\r\n\r\n static _buildElements(rows: Record) {\r\n const b = buildDom;\r\n const r = b('div').classes('buttonLine')\r\n .append(b('span').classes('icon icon-move'));\r\n const keys = Object.keys(rows);\r\n keys.forEach((key, rowIx) => {\r\n const row = rows[key];\r\n r.append(Qwerty._buttonBlock(row, 'row-'+rowIx));\r\n });\r\n return r;\r\n }\r\n static hideKb() {\r\n $('body').removeClass('showQwerty');\r\n Qwerty.displayed = false;\r\n }\r\n static displayKb() {\r\n if (Qwerty.created) {\r\n $('body').addClass('showQwerty');\r\n Qwerty.displayed = true;\r\n return;\r\n }\r\n createTopDomContainer('.qwertyKb');\r\n $('body').addClass('showQwerty');\r\n $('.qwertyKb').html('');\r\n var b = buildDom;\r\n var r = b('div').classes('kb-float');\r\n r.append(Qwerty._buildElements(Qwerty.navigationElements));\r\n $('.qwertyKb').append(r.dom());\r\n\r\n var cb = function (x: any, y: any ) {}\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.qwertyKb'),\r\n handle: $('.qwertyKb').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb: cb,\r\n moveParent: true\r\n });\r\n Qwerty.displayed = true;\r\n Qwerty.created = true;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class defaultRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = defaultRibbonLayout.leftRibbonIds;\r\n var top = defaultRibbonLayout.displayIds.concat(defaultRibbonLayout.noteButtonIds).concat(defaultRibbonLayout.navigateButtonIds)\r\n .concat(defaultRibbonLayout.articulateButtonIds).concat(defaultRibbonLayout.microtoneIds)\r\n .concat(defaultRibbonLayout.durationIds)\r\n .concat(defaultRibbonLayout.beamIds).concat(defaultRibbonLayout.measureIds)\r\n .concat(defaultRibbonLayout.staveIds)\r\n .concat(defaultRibbonLayout.textIds).concat(defaultRibbonLayout.playerIds)\r\n .concat(defaultRibbonLayout.voiceButtonIds).concat(defaultRibbonLayout.debugIds);\r\n\r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get ribbonButtons(): ButtonDefinition[] {\r\n return defaultRibbonLayout.leftRibbonButtons.concat(\r\n defaultRibbonLayout.navigationButtons).concat(\r\n defaultRibbonLayout.noteRibbonButtons).concat(\r\n defaultRibbonLayout.articulationButtons).concat(\r\n defaultRibbonLayout.microtoneButtons).concat(\r\n defaultRibbonLayout.chordButtons).concat(\r\n defaultRibbonLayout.durationRibbonButtons).concat(defaultRibbonLayout.beamRibbonButtons).concat(defaultRibbonLayout.measureRibbonButtons)\r\n .concat(defaultRibbonLayout.staveRibbonButtons)\r\n .concat(defaultRibbonLayout.textRibbonButtons).concat(defaultRibbonLayout.playerButtons)\r\n .concat(defaultRibbonLayout.voiceRibbonButtons).concat(defaultRibbonLayout.displayButtons).concat(defaultRibbonLayout.debugRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return ['helpDialog', 'languageMenu', 'fileMenu', 'libraryMenu',\r\n 'scoreMenu', 'partMenu', 'noteMenu', 'addStaffMenu', 'measureModal', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton', 'AddGraceNote', 'RemoveGraceNote', 'SlashGraceNote',\r\n 'XNoteHead', 'TriUpNoteHead', 'CircleXNoteHead', 'DiamondNoteHead',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n static get voiceButtonIds() {\r\n return ['VoiceButtons', 'V1Button', 'V2Button', 'V3Button', 'V4Button', 'VXButton'];\r\n }\r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n static get articulateButtonIds() {\r\n return ['articulationButtons', 'accentButton', 'tenutoButton', 'staccatoButton', 'marcatoButton', 'fermataButton', 'pizzicatoButton', 'mordentButton', 'mordentInvertedButton', 'trillButton'\r\n , 'scoopButton', 'dropButton', 'dropLongButton', 'doitButton', 'doitLongButton', 'flipButton', 'smearButton'];\r\n }\r\n\r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get debugIds() {\r\n return ['DebugGroup', 'DebugButton2'];\r\n }\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n static get measureIds() {\r\n return ['MeasureButtons', 'endRepeat', 'startRepeat', 'endBar', 'doubleBar', 'singleBarEnd', 'singleBarStart', 'nthEnding', 'dcAlCoda', 'dsAlCoda', 'dcAlFine', 'dsAlFine', 'coda', 'toCoda', 'segno', 'toSegno', 'fine'];\r\n }\r\n static get staveIds() {\r\n return ['StaveButtons', 'clefTreble', 'clefBass', 'clefAddRemove', 'clefMoveUp', 'clefMoveDown', 'moreStaffButtons',\r\n 'clefTenor', 'clefAlto', 'clefPercussion',\r\n 'staffBracketLower', 'staffBraceLower', 'staffDoubleConnectorLower', 'staffSingleConnectorLower'];\r\n }\r\n static get textIds() {\r\n return ['TextButtons', 'addTextMenu', 'rehearsalMark', 'lyrics', 'chordChanges', 'addDynamicsMenu'];\r\n }\r\n\r\n static get beamIds() {\r\n return ['BeamButtons', 'breakBeam', 'beamSelections', 'toggleBeamDirection'];\r\n }\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get microtoneIds() {\r\n return ['MicrotoneButtons', 'flat75sz', 'flat25sz', 'flat25ar', 'flat125ar', 'sharp75', 'sharp125', 'sharp25', 'sori', 'koron'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'selectPart', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n\r\n static get textRibbonButtons(): ButtonDefinition[] {\r\n return [\r\n {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent measure',\r\n icon: 'icon-text',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'textEdit',\r\n id: 'TextButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '/t',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-textBasic',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'addTextMenu'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-rehearsemark',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'rehearsalMark'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-lyric',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'lyrics'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-chordSymbol',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'chordChanges'\r\n }, {\r\n leftText: '',\r\n rightText: '/d',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-mezzopiano',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'addDynamicsMenu'\r\n }\r\n ];\r\n }\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'Select Part',\r\n classes: 'icon select-part-button',\r\n icon: 'icon-circle-down',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'selectPart'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get microtoneButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent microtones',\r\n icon: 'icon-microtone',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'microtone',\r\n id: 'MicrotoneButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat25sz',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat25sz'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat75sz',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat75sz'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat25ar',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat25ar'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp75',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp75'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp125',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp125'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp25',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp25'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sori',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sori'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-koron',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'koron'\r\n }];\r\n }\r\n\r\n static get staveRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent staves',\r\n icon: 'icon-treble',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'staves',\r\n id: 'StaveButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-treble',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefTreble'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-bass',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefBass'\r\n }, \r\n {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-arrow-up',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefMoveUp'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-arrow-down',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefMoveDown'\r\n },\r\n {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'staves',\r\n id: 'moreStaffButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-tenor',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefTenor'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-alto',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefAlto'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-percussion',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefPercussion'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-brace',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'staffBraceLower'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-bracket',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'staffBracketLower'\r\n }\r\n\r\n ];\r\n }\r\n\r\n static get beamRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent beams',\r\n icon: 'icon-flag',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'beams',\r\n id: 'BeamButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'x',\r\n icon: 'icon-beamBreak',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'breakBeam'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Shift-X',\r\n icon: 'icon-beam',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'beamSelections'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Shift-B',\r\n icon: 'icon-flagFlip',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'toggleBeamDirection'\r\n }\r\n ];\r\n }\r\n\r\n static get measureRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent measure',\r\n icon: 'icon-end_rpt',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'measure',\r\n id: 'MeasureButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-end_rpt',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'endRepeat'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-start_rpt',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'startRepeat'\r\n }\r\n ,\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-end_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'endBar'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-double_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'doubleBar'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-single_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'singleBarEnd'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-single_bar_start',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'singleBarStart'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-ending',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'nthEnding'\r\n },\r\n {\r\n leftText: 'DC Al Coda',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dcAlCoda'\r\n },\r\n {\r\n leftText: 'DS Al Coda',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dsAlCoda'\r\n },\r\n {\r\n leftText: 'DC Al Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dcAlFine'\r\n },\r\n {\r\n leftText: 'DS Al Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dsAlFine'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-coda',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'coda'\r\n },\r\n {\r\n leftText: 'to ',\r\n rightText: '',\r\n icon: 'icon-coda',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'toCoda'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-segno',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'segno'\r\n },\r\n {\r\n leftText: 'Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'fine'\r\n }\r\n ];\r\n }\r\n static get debugRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-new-tab',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'debug',\r\n id: 'DebugGroup'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed',\r\n icon: 'icon-new-tab',\r\n action: 'collapseChild',\r\n ctor: 'DebugButtons',\r\n group: 'debug',\r\n id: 'DebugButton2'\r\n }];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get voiceRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-Vo',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'voices',\r\n id: 'VoiceButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V1',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V1Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V2',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V2Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V3',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V3Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V4',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V4Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-Vx',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'VXButton'\r\n }\r\n ];\r\n }\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-bravura icon-accidentalFlat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get articulationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-articulation',\r\n classes: 'icon collapseParent articulation',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'articulations',\r\n id: 'articulationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'h',\r\n icon: 'icon-accent_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'accentButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'i',\r\n icon: 'icon-tenuto_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'tenutoButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'j',\r\n icon: 'icon-staccato_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'staccatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'k',\r\n icon: 'icon-marcato_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'marcatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fermata',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'fermataButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'l',\r\n icon: 'icon-pitz_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'pizzicatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-mordent-inv',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'mordentInvertedButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-mordent',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'mordentButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-trill',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'trillButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-scoop',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'scoopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-drop',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'dropButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-drop-long',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'dropLongButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-doit',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'doitButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-doit-long',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'doitLongButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-flip',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'flipButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-smear',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'smearButton'\r\n }\r\n ];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n static get chordButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: 'icon-chords',\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'chords',\r\n id: 'CreateChordButtons'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '2nd',\r\n rightText: '2',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '1',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SecondUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '2nd',\r\n rightText: 'Shift 2',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '1',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SecondDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '3rd',\r\n rightText: '3',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '2',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'ThirdUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '3rd',\r\n rightText: 'Shift 3',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '2',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'ThirdDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '4th',\r\n rightText: '4',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '3',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FourthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '4th',\r\n rightText: 'Shift 4',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '3',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FourthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '5th',\r\n rightText: '5',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '4',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FifthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '5th',\r\n rightText: 'Shift 5',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '4',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FifthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '6th',\r\n rightText: '6',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '5',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SixthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '6th',\r\n rightText: 'Shift 6',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '5',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SixthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '7th',\r\n rightText: '7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '6',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SeventhUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '7th',\r\n rightText: 'Shift 7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '6',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SeventhDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '8va',\r\n rightText: '8',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '7',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'OctaveUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '7th',\r\n rightText: 'Shift 7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '7',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'OctaveDownButton'\r\n }, {\r\n icon: '',\r\n leftText: 'Collapse',\r\n rightText: '',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'CollapseChordButton'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: '',\r\n leftText: 'Help',\r\n rightText: '?',\r\n classes: 'help-button',\r\n action: 'modal',\r\n ctor: 'helpModal',\r\n group: 'scoreEdit',\r\n id: 'helpDialog'\r\n }, {\r\n leftText: 'Language',\r\n rightText: '/n',\r\n icon: '',\r\n classes: 'language-select menu-select',\r\n action: 'menu',\r\n ctor: 'SuiLanguageMenu',\r\n group: 'scoreEdit',\r\n id: 'languageMenu'\r\n }, {\r\n leftText: 'File',\r\n rightText: '/f',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiFileMenu',\r\n group: 'scoreEdit',\r\n id: 'fileMenu'\r\n }, {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'scoreMenu'\r\n },\r\n {\r\n leftText: 'Parts',\r\n rightText: '/p',\r\n icon: '',\r\n classes: 'icon',\r\n action: 'menu',\r\n ctor: 'SuiPartMenu',\r\n group: 'scoreEdit',\r\n id: 'partMenu'\r\n }, {\r\n leftText: 'Notes',\r\n rightText: '',\r\n icon: 'icon-note',\r\n classes: 'icon',\r\n action: 'menu',\r\n ctor: 'SuiNoteMenu',\r\n group: 'scoreEdit',\r\n id: 'noteMenu'\r\n }, {\r\n leftText: 'Measure',\r\n rightText: '/a',\r\n icon: '',\r\n classes: 'icon menu-select',\r\n action: 'menu',\r\n ctor: 'SuiMeasureMenu',\r\n group: 'scoreEdit',\r\n id: 'measureModal'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n }, {\r\n leftText: 'Lines',\r\n rightText: '/l',\r\n icon: '',\r\n classes: 'icon note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiStaffModifierMenu',\r\n group: 'scoreEdit',\r\n id: 'staffModifierMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class simpleRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = simpleRibbonLayout.leftRibbonIds;\r\n var top = simpleRibbonLayout.displayIds.concat(simpleRibbonLayout.noteButtonIds).concat(simpleRibbonLayout.navigateButtonIds)\r\n .concat(simpleRibbonLayout.durationIds);\r\n \r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get simpleRibbonLayout(): ButtonDefinition[] {\r\n return simpleRibbonLayout.leftRibbonButtons.concat(\r\n simpleRibbonLayout.navigationButtons).concat(\r\n simpleRibbonLayout.noteRibbonButtons).concat(\r\n simpleRibbonLayout.durationRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return [ 'libraryMenu',\r\n 'layoutMenu', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n \r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n \r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-flat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [ {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'layoutMenu'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","import { SuiApplication } from '../src/application/application';\r\nimport { SmoToXml } from '../src/smo/mxml/smoToXml';\r\nimport { XmlToSmo } from '../src/smo/mxml/xmlToSmo';\r\nimport { SuiXhrLoader } from '../src/ui/fileio/xhrLoader';\r\nimport { MidiToSmo } from '../src/smo/midi/midiToSmo';\r\n\r\ndeclare var $: any;\r\ndeclare var parseMidi: any;\r\n\r\nexport function createLoadTests(): void {\r\n const jsonPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json';\r\n const midiTiesPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/ties.mid';\r\n const midiTripletPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/triplet.mid';\r\n const midiKeyPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/keytime.mid';\r\n var app = async (application: SuiApplication) => {\r\n const view = application.view!;\r\n await view.loadRemoteScore(jsonPath);\r\n await view.renderPromise();\r\n QUnit.test('loaded', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-lyric').length, 82);\r\n });\r\n const xml = SmoToXml.convert(view.score);\r\n const newScore = XmlToSmo.convert(xml);\r\n await view.changeScore(newScore);\r\n QUnit.test('loadXml', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-lyric').length, 82);\r\n });\r\n let midiData = new SuiXhrLoader(midiTiesPath);\r\n await midiData.loadAsync();\r\n let midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi1', assert => {\r\n assert.equal(midiScore.staves[0].getTiesEndingAt({ staff: 0, measure: 1, voice: 0, tick: 0, pitches: [] }).length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiTripletPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves[0].measures[0].tuplets.length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiKeyPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves.length, 2);\r\n assert.equal(midiScore.staves[0].measures[0].keySignature, 'eb');\r\n });\r\n // console.log('measures ' + view.score.staves[0].measures.length);\r\n };\r\n\r\n SuiApplication.configure({\r\n mode: 'library',\r\n idleRedrawTime: 5,\r\n scoreDomContainer: 'outer-container'\r\n }).then((application) => {\r\n app(application)\r\n });\r\n}","/*!\n * VexFlow 4.2.6 2023-12-13T04:36:51.063Z 31dca682bd9c2905c6d93075dcf115a5519cc175\n * Vexflow_smoosic, forked from :\n * Copyright (c) 2010 Mohit Muthanna Cheppudira \n * https://www.vexflow.com https://github.com/0xfe/vexflow\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/version.ts\":\n/*!************************!*\\\n !*** ./src/version.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DATE: () => (/* binding */ DATE),\n/* harmony export */ ID: () => (/* binding */ ID),\n/* harmony export */ VERSION: () => (/* binding */ VERSION)\n/* harmony export */ });\nconst VERSION = '4.2.6';\nconst ID = '31dca682bd9c2905c6d93075dcf115a5519cc175';\nconst DATE = '2023-12-13T04:36:51.063Z';\n\n\n/***/ }),\n\n/***/ \"./src/accidental.ts\":\n/*!***************************!*\\\n !*** ./src/accidental.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* binding */ Accidental)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/annotation.ts\":\n/*!***************************!*\\\n !*** ./src/annotation.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Annotation: () => (/* binding */ Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* binding */ AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* binding */ AnnotationVerticalJustify)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args);\n}\nvar AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nvar AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/articulation.ts\":\n/*!*****************************!*\\\n !*** ./src/articulation.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Articulation: () => (/* binding */ Articulation)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) ||\n (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n\n\n\n/***/ }),\n\n/***/ \"./src/barnote.ts\":\n/*!************************!*\\\n !*** ./src/barnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BarNote: () => (/* binding */ BarNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote;\n }\n constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/beam.ts\":\n/*!*********************!*\\\n !*** ./src/beam.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BEAM_BOTH: () => (/* binding */ BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* binding */ BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* binding */ BEAM_RIGHT),\n/* harmony export */ Beam: () => (/* binding */ Beam)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nconst BEAM_LEFT = 'L';\nconst BEAM_RIGHT = 'R';\nconst BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nclass Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group));\n }\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/bend.ts\":\n/*!*********************!*\\\n !*** ./src/bend.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Bend: () => (/* binding */ Bend)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/** Bend implements tablature bends. */\nclass Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/boundingbox.ts\":\n/*!****************************!*\\\n !*** ./src/boundingbox.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBox: () => (/* binding */ BoundingBox)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nclass BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/boundingboxcomputation.ts\":\n/*!***************************************!*\\\n !*** ./src/boundingboxcomputation.ts ***!\n \\***************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBoxComputation: () => (/* binding */ BoundingBoxComputation)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nclass BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/canvascontext.ts\":\n/*!******************************!*\\\n !*** ./src/canvascontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasContext: () => (/* binding */ CanvasContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nclass CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/chordsymbol.ts\":\n/*!****************************!*\\\n !*** ./src/chordsymbol.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChordSymbol: () => (/* binding */ ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* binding */ ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* binding */ ChordSymbolVerticalJustify),\n/* harmony export */ SymbolModifiers: () => (/* binding */ SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* binding */ SymbolTypes)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args);\n}\nvar ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nvar ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nvar SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nvar SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/clef.ts\":\n/*!*********************!*\\\n !*** ./src/clef.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Clef: () => (/* binding */ Clef)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/clefnote.ts\":\n/*!*************************!*\\\n !*** ./src/clefnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClefNote: () => (/* binding */ ClefNote)\n/* harmony export */ });\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\n\n\n\n\n/** ClefNote implements clef annotations in measures. */\nclass ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/crescendo.ts\":\n/*!**************************!*\\\n !*** ./src/crescendo.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Crescendo: () => (/* binding */ Crescendo)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/curve.ts\":\n/*!**********************!*\\\n !*** ./src/curve.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Curve: () => (/* binding */ Curve),\n/* harmony export */ CurvePosition: () => (/* binding */ CurvePosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\n\n\n\nvar CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nclass Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/dot.ts\":\n/*!********************!*\\\n !*** ./src/dot.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Dot: () => (/* binding */ Dot)\n/* harmony export */ });\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\n\n\n\nclass Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/easyscore.ts\":\n/*!**************************!*\\\n !*** ./src/easyscore.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Builder: () => (/* binding */ Builder),\n/* harmony export */ EasyScore: () => (/* binding */ EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* binding */ EasyScoreGrammar),\n/* harmony export */ Piece: () => (/* binding */ Piece)\n/* harmony export */ });\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args);\n}\nclass EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nclass Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nclass Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/element.ts\":\n/*!************************!*\\\n !*** ./src/element.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Element: () => (/* binding */ Element)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/factory.ts\":\n/*!************************!*\\\n !*** ./src/factory.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Factory: () => (/* binding */ Factory)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS;\n }\n else {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG;\n }\n }\n this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext();\n }\n ModifierContext() {\n return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes);\n pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/flow.ts\":\n/*!*********************!*\\\n !*** ./src/flow.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Flow: () => (/* binding */ Flow)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ \"./src/version.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION,\n /** git commit ID that this library was built from. */\n ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID,\n /** The date when this library was compiled. */\n DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName));\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts;\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice();\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4;\n }\n static get accidentalMap() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap;\n }\n static get unicode() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode;\n }\n static keySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental;\nFlow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation;\nFlow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation;\nFlow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline;\nFlow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote;\nFlow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam;\nFlow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend;\nFlow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox;\nFlow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation;\nFlow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext;\nFlow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol;\nFlow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef;\nFlow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote;\nFlow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo;\nFlow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve;\nFlow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot;\nFlow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore;\nFlow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element;\nFlow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory;\nFlow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font;\nFlow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter;\nFlow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction;\nFlow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger;\nFlow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote;\nFlow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph;\nFlow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote;\nFlow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote;\nFlow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup;\nFlow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote;\nFlow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager;\nFlow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature;\nFlow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote;\nFlow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier;\nFlow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext;\nFlow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest;\nFlow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music;\nFlow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note;\nFlow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead;\nFlow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup;\nFlow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament;\nFlow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis;\nFlow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser;\nFlow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking;\nFlow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry;\nFlow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext;\nFlow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer;\nFlow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote;\nFlow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition;\nFlow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave;\nFlow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector;\nFlow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin;\nFlow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine;\nFlow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier;\nFlow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote;\nFlow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo;\nFlow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText;\nFlow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie;\nFlow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem;\nFlow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber;\nFlow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke;\nFlow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext;\nFlow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System;\nFlow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote;\nFlow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide;\nFlow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave;\nFlow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie;\nFlow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket;\nFlow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics;\nFlow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter;\nFlow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote;\nFlow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext;\nFlow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature;\nFlow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote;\nFlow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo;\nFlow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning;\nFlow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet;\nFlow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato;\nFlow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket;\nFlow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice;\nFlow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify;\nFlow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes;\nFlow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers;\nFlow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition;\nFlow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight;\nFlow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle;\nFlow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition;\nFlow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends;\nFlow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType;\nFlow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType;\nFlow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition;\nFlow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType;\nFlow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition;\nFlow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification;\nFlow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode;\n\n\n\n/***/ }),\n\n/***/ \"./src/font.ts\":\n/*!*********************!*\\\n !*** ./src/font.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Font: () => (/* binding */ Font),\n/* harmony export */ FontStyle: () => (/* binding */ FontStyle),\n/* harmony export */ FontWeight: () => (/* binding */ FontWeight)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nvar FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/fonts/bravura_glyphs.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/bravura_glyphs.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BravuraFont: () => (/* binding */ BravuraFont)\n/* harmony export */ });\nconst BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/common_metrics.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/common_metrics.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CommonMetrics: () => (/* binding */ CommonMetrics)\n/* harmony export */ });\nconst CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.8,\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.8,\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.8,\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/custom_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/custom_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CustomFont: () => (/* binding */ CustomFont)\n/* harmony export */ });\nconst CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/gonville_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/gonville_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GonvilleSmuflFont: () => (/* binding */ GonvilleSmuflFont)\n/* harmony export */ });\nconst GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/leland_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/leland_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LelandFont: () => (/* binding */ LelandFont)\n/* harmony export */ });\nconst LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_all.ts\":\n/*!*******************************!*\\\n !*** ./src/fonts/load_all.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadAllMusicFonts: () => (/* binding */ loadAllMusicFonts)\n/* harmony export */ });\n/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ \"./src/fonts/load_bravura.ts\");\n/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ \"./src/fonts/load_custom.ts\");\n/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ \"./src/fonts/load_gonville.ts\");\n/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ \"./src/fonts/load_leland.ts\");\n/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ \"./src/fonts/load_petaluma.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\n\n\n\n\n\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nfunction loadAllMusicFonts() {\n (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)();\n (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)();\n (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)();\n (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)();\n (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_bravura.ts\":\n/*!***********************************!*\\\n !*** ./src/fonts/load_bravura.ts ***!\n \\***********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadBravura: () => (/* binding */ loadBravura)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ \"./src/fonts/bravura_glyphs.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\n\n\n\nfunction loadBravura() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_custom.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_custom.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadCustom: () => (/* binding */ loadCustom)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ \"./src/fonts/custom_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadCustom() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_gonville.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_gonville.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadGonville: () => (/* binding */ loadGonville)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ \"./src/fonts/gonville_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadGonville() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_leland.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_leland.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadLeland: () => (/* binding */ loadLeland)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ \"./src/fonts/leland_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadLeland() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_petaluma.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_petaluma.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadPetaluma: () => (/* binding */ loadPetaluma)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ \"./src/fonts/petaluma_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nconst petalumaChordMetrics = {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 1,\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n }\n};\nfunction loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petaluma_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/petaluma_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaFont: () => (/* binding */ PetalumaFont)\n/* harmony export */ });\nconst PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petalumascript_glyphs.ts\":\n/*!********************************************!*\\\n !*** ./src/fonts/petalumascript_glyphs.ts ***!\n \\********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaScriptFont: () => (/* binding */ PetalumaScriptFont)\n/* harmony export */ });\nconst PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/robotoslab_glyphs.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/robotoslab_glyphs.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RobotoSlabFont: () => (/* binding */ RobotoSlabFont)\n/* harmony export */ });\nconst RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_bold_text_metrics.ts\":\n/*!*********************************************!*\\\n !*** ./src/fonts/sans_bold_text_metrics.ts ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFontBold: () => (/* binding */ SansFontBold)\n/* harmony export */ });\nconst SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_text_metrics.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/sans_text_metrics.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFont: () => (/* binding */ SansFont)\n/* harmony export */ });\nconst SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/serif_text_metrics.ts\":\n/*!*****************************************!*\\\n !*** ./src/fonts/serif_text_metrics.ts ***!\n \\*****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SerifFont: () => (/* binding */ SerifFont)\n/* harmony export */ });\nconst SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/textfonts.ts\":\n/*!********************************!*\\\n !*** ./src/fonts/textfonts.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadTextFonts: () => (/* binding */ loadTextFonts)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ \"./src/fonts/petalumascript_glyphs.ts\");\n/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ \"./src/fonts/robotoslab_glyphs.ts\");\n/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ \"./src/fonts/sans_bold_text_metrics.ts\");\n/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ \"./src/fonts/sans_text_metrics.ts\");\n/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ \"./src/fonts/serif_text_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/formatter.ts\":\n/*!**************************!*\\\n !*** ./src/formatter.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Formatter: () => (/* binding */ Formatter)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext());\n const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/fraction.ts\":\n/*!*************************!*\\\n !*** ./src/fraction.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Fraction: () => (/* binding */ Fraction)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\n\n\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/frethandfinger.ts\":\n/*!*******************************!*\\\n !*** ./src/frethandfinger.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FretHandFinger: () => (/* binding */ FretHandFinger)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\n\n\n\n\n\n\nclass FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/ghostnote.ts\":\n/*!**************************!*\\\n !*** ./src/ghostnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GhostNote: () => (/* binding */ GhostNote)\n/* harmony export */ });\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n\n\n\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nclass GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/glyph.ts\":\n/*!**********************!*\\\n !*** ./src/glyph.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Glyph: () => (/* binding */ Glyph),\n/* harmony export */ OutlineCode: () => (/* binding */ OutlineCode)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n\n\n\n/***/ }),\n\n/***/ \"./src/glyphnote.ts\":\n/*!**************************!*\\\n !*** ./src/glyphnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlyphNote: () => (/* binding */ GlyphNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\n\n\nclass GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenote.ts\":\n/*!**************************!*\\\n !*** ./src/gracenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNote: () => (/* binding */ GraceNote)\n/* harmony export */ });\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n\nclass GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenotegroup.ts\":\n/*!*******************************!*\\\n !*** ./src/gracenotegroup.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNoteGroup: () => (/* binding */ GraceNoteGroup)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/gracetabnote.ts\":\n/*!*****************************!*\\\n !*** ./src/gracetabnote.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceTabNote: () => (/* binding */ GraceTabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\n\n\n\nclass GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/index.ts\":\n/*!**********************!*\\\n !*** ./src/index.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType),\n/* harmony export */ defined: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ \"./src/vex.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './fonts/*' because they are used by the entry/* files.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/keymanager.ts\":\n/*!***************************!*\\\n !*** ./src/keymanager.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeyManager: () => (/* binding */ KeyManager)\n/* harmony export */ });\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\n\n\nclass KeyManager {\n constructor(key) {\n this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root];\n for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) {\n const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length;\n const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/keysignature.ts\":\n/*!*****************************!*\\\n !*** ./src/keysignature.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySignature: () => (/* binding */ KeySignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\n\n\n\n\n\nclass KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/keysignote.ts\":\n/*!***************************!*\\\n !*** ./src/keysignote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySigNote: () => (/* binding */ KeySigNote)\n/* harmony export */ });\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\n\n\n\nclass KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifier.ts\":\n/*!*************************!*\\\n !*** ./src/modifier.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Modifier: () => (/* binding */ Modifier),\n/* harmony export */ ModifierPosition: () => (/* binding */ ModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nvar ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nclass Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifiercontext.ts\":\n/*!********************************!*\\\n !*** ./src/modifiercontext.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModifierContext: () => (/* binding */ ModifierContext)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state);\n _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state);\n _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state);\n _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state);\n _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state);\n _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state);\n _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state);\n _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state);\n _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state);\n _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state);\n _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state);\n _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state);\n _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state);\n _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state);\n _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/multimeasurerest.ts\":\n/*!*********************************!*\\\n !*** ./src/multimeasurerest.ts ***!\n \\*********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MultiMeasureRest: () => (/* binding */ MultiMeasureRest)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\n\n\n\n\n\n\n\n\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nclass MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/music.ts\":\n/*!**********************!*\\\n !*** ./src/music.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Music: () => (/* binding */ Music)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n/** Music implements some standard music theory routines. */\nclass Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/note.ts\":\n/*!*********************!*\\\n !*** ./src/note.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Note: () => (/* binding */ Note)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nclass Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/notehead.ts\":\n/*!*************************!*\\\n !*** ./src/notehead.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteHead: () => (/* binding */ NoteHead)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH);\n let fill = false;\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/notesubgroup.ts\":\n/*!*****************************!*\\\n !*** ./src/notesubgroup.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteSubGroup: () => (/* binding */ NoteSubGroup)\n/* harmony export */ });\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\n\n\n\n\n\nclass NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter();\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/ornament.ts\":\n/*!*************************!*\\\n !*** ./src/ornament.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Ornament: () => (/* binding */ Ornament)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/parenthesis.ts\":\n/*!****************************!*\\\n !*** ./src/parenthesis.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parenthesis: () => (/* binding */ Parenthesis)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\n\n\n\n\n\n/** Parenthesis implements parenthesis modifiers for notes. */\nclass Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) {\n this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/parser.ts\":\n/*!***********************!*\\\n !*** ./src/parser.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parser: () => (/* binding */ Parser)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\n\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/pedalmarking.ts\":\n/*!*****************************!*\\\n !*** ./src/pedalmarking.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PedalMarking: () => (/* binding */ PedalMarking)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/registry.ts\":\n/*!*************************!*\\\n !*** ./src/registry.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Registry: () => (/* binding */ Registry)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\n\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nclass Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/rendercontext.ts\":\n/*!******************************!*\\\n !*** ./src/rendercontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RenderContext: () => (/* binding */ RenderContext),\n/* harmony export */ drawDot: () => (/* binding */ drawDot)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n\nclass RenderContext {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nfunction drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n\n\n/***/ }),\n\n/***/ \"./src/renderer.ts\":\n/*!*************************!*\\\n !*** ./src/renderer.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Renderer: () => (/* binding */ Renderer),\n/* harmony export */ RendererBackends: () => (/* binding */ RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* binding */ RendererLineEndType)\n/* harmony export */ });\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nvar RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element);\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n\n\n\n/***/ }),\n\n/***/ \"./src/repeatnote.ts\":\n/*!***************************!*\\\n !*** ./src/repeatnote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RepeatNote: () => (/* binding */ RepeatNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nclass RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stave.ts\":\n/*!**********************!*\\\n !*** ./src/stave.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stave: () => (/* binding */ Stave)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2,\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1,\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3,\n};\nclass Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n // end bar\n this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n * @param clefSpec\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef);\n // Align key signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF,\n size: 8,\n weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavebarline.ts\":\n/*!*****************************!*\\\n !*** ./src/stavebarline.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Barline: () => (/* binding */ Barline),\n/* harmony export */ BarlineType: () => (/* binding */ BarlineType)\n/* harmony export */ });\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\n\n\n\nvar BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nclass Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/staveconnector.ts\":\n/*!*******************************!*\\\n !*** ./src/staveconnector.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveConnector: () => (/* binding */ StaveConnector)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavehairpin.ts\":\n/*!*****************************!*\\\n !*** ./src/stavehairpin.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveHairpin: () => (/* binding */ StaveHairpin)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\n\n\n\n\nclass StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/staveline.ts\":\n/*!**************************!*\\\n !*** ./src/staveline.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveLine: () => (/* binding */ StaveLine)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\n\n\n\n\n\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification;\n\n\n\n/***/ }),\n\n/***/ \"./src/stavemodifier.ts\":\n/*!******************************!*\\\n !*** ./src/stavemodifier.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveModifier: () => (/* binding */ StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* binding */ StaveModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\n\n\n\nvar StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nclass StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stavenote.ts\":\n/*!**************************!*\\\n !*** ./src/stavenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveNote: () => (/* binding */ StaveNote)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/staverepetition.ts\":\n/*!********************************!*\\\n !*** ./src/staverepetition.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Repetition: () => (/* binding */ Repetition)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\n\nclass Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavesection.ts\":\n/*!*****************************!*\\\n !*** ./src/stavesection.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveSection: () => (/* binding */ StaveSection)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\nclass StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetempo.ts\":\n/*!***************************!*\\\n !*** ./src/stavetempo.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTempo: () => (/* binding */ StaveTempo)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\n\n\n\n\n\n\nclass StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration);\n x += 3 * scale;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 14,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetext.ts\":\n/*!**************************!*\\\n !*** ./src/stavetext.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveText: () => (/* binding */ StaveText)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\n\n\nclass StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetie.ts\":\n/*!*************************!*\\\n !*** ./src/stavetie.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTie: () => (/* binding */ StaveTie)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\nclass StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/stavevolta.ts\":\n/*!***************************!*\\\n !*** ./src/stavevolta.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Volta: () => (/* binding */ Volta),\n/* harmony export */ VoltaType: () => (/* binding */ VoltaType)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\nvar VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stem.ts\":\n/*!*********************!*\\\n !*** ./src/stem.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stem: () => (/* binding */ Stem)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args);\n}\nclass Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/stemmablenote.ts\":\n/*!******************************!*\\\n !*** ./src/stemmablenote.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StemmableNote: () => (/* binding */ StemmableNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\n\n\n\n\n\n\nclass StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stringnumber.ts\":\n/*!*****************************!*\\\n !*** ./src/stringnumber.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StringNumber: () => (/* binding */ StringNumber)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\n\n\n\n\n\n\n\nclass StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/strokes.ts\":\n/*!************************!*\\\n !*** ./src/strokes.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stroke: () => (/* binding */ Stroke)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\n\n\n\n\n\n\nclass Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/svgcontext.ts\":\n/*!***************************!*\\\n !*** ./src/svgcontext.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SVGContext: () => (/* binding */ SVGContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\n\n\n\n\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt',\n 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls));\n if (id)\n group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle);\n const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n\n\n\n/***/ }),\n\n/***/ \"./src/system.ts\":\n/*!***********************!*\\\n !*** ./src/system.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ System: () => (/* binding */ System)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nclass System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tables.ts\":\n/*!***********************!*\\\n !*** ./src/tables.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tables: () => (/* binding */ Tables)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/tabnote.ts\":\n/*!************************!*\\\n !*** ./src/tabnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabNote: () => (/* binding */ TabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nclass TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabslide.ts\":\n/*!*************************!*\\\n !*** ./src/tabslide.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabSlide: () => (/* binding */ TabSlide)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\n\nclass TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/tabstave.ts\":\n/*!*************************!*\\\n !*** ./src/tabstave.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabStave: () => (/* binding */ TabStave)\n/* harmony export */ });\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\nclass TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabtie.ts\":\n/*!***********************!*\\\n !*** ./src/tabtie.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabTie: () => (/* binding */ TabTie)\n/* harmony export */ });\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\nclass TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/textbracket.ts\":\n/*!****************************!*\\\n !*** ./src/textbracket.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextBracket: () => (/* binding */ TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* binding */ TextBracketPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args);\n}\nvar TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 15,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/textdynamics.ts\":\n/*!*****************************!*\\\n !*** ./src/textdynamics.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextDynamics: () => (/* binding */ TextDynamics)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter);\n const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/textformatter.ts\":\n/*!******************************!*\\\n !*** ./src/textformatter.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextFormatter: () => (/* binding */ TextFormatter)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight);\n const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL;\n const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/textnote.ts\":\n/*!*************************!*\\\n !*** ./src/textnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextJustification: () => (/* binding */ TextJustification),\n/* harmony export */ TextNote: () => (/* binding */ TextNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n\n\n\n/***/ }),\n\n/***/ \"./src/tickable.ts\":\n/*!*************************!*\\\n !*** ./src/tickable.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tickable: () => (/* binding */ Tickable)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nclass Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tickcontext.ts\":\n/*!****************************!*\\\n !*** ./src/tickcontext.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TickContext: () => (/* binding */ TickContext)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\n\n\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nclass TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesigglyph.ts\":\n/*!*****************************!*\\\n !*** ./src/timesigglyph.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignatureGlyph: () => (/* binding */ TimeSignatureGlyph)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\n\n\nclass TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignature.ts\":\n/*!******************************!*\\\n !*** ./src/timesignature.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignature: () => (/* binding */ TimeSignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\n\n\n\n\n\n\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nclass TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignote.ts\":\n/*!****************************!*\\\n !*** ./src/timesignote.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSigNote: () => (/* binding */ TimeSigNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\nclass TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tremolo.ts\":\n/*!************************!*\\\n !*** ./src/tremolo.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tremolo: () => (/* binding */ Tremolo)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\n\n\n\n\n\n\n\n/** Tremolo implements tremolo notation. */\nclass Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note);\n const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuning.ts\":\n/*!***********************!*\\\n !*** ./src/tuning.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuning: () => (/* binding */ Tuning)\n/* harmony export */ });\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n/** `Tuning` implements varies types of tunings for tablature. */\nclass Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuplet.ts\":\n/*!***********************!*\\\n !*** ./src/tuplet.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuplet: () => (/* binding */ Tuplet),\n/* harmony export */ TupletLocation: () => (/* binding */ TupletLocation)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\n\n\n\n\n\n\n\nvar TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nclass Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/typeguard.ts\":\n/*!**************************!*\\\n !*** ./src/typeguard.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Category: () => (/* binding */ Category),\n/* harmony export */ isAccidental: () => (/* binding */ isAccidental),\n/* harmony export */ isAnnotation: () => (/* binding */ isAnnotation),\n/* harmony export */ isBarline: () => (/* binding */ isBarline),\n/* harmony export */ isCategory: () => (/* binding */ isCategory),\n/* harmony export */ isDot: () => (/* binding */ isDot),\n/* harmony export */ isGraceNote: () => (/* binding */ isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* binding */ isGraceNoteGroup),\n/* harmony export */ isNote: () => (/* binding */ isNote),\n/* harmony export */ isRenderContext: () => (/* binding */ isRenderContext),\n/* harmony export */ isStaveNote: () => (/* binding */ isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* binding */ isStemmableNote),\n/* harmony export */ isTabNote: () => (/* binding */ isTabNote)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nfunction isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nconst isAccidental = (obj) => isCategory(obj, Category.Accidental);\nconst isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nconst isBarline = (obj) => isCategory(obj, Category.Barline);\nconst isDot = (obj) => isCategory(obj, Category.Dot);\nconst isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nconst isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nconst isNote = (obj) => isCategory(obj, Category.Note);\nconst isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nconst isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nconst isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nconst isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nvar Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n\n\n/***/ }),\n\n/***/ \"./src/util.ts\":\n/*!*********************!*\\\n !*** ./src/util.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RuntimeError: () => (/* binding */ RuntimeError),\n/* harmony export */ defined: () => (/* binding */ defined),\n/* harmony export */ globalObject: () => (/* binding */ globalObject),\n/* harmony export */ log: () => (/* binding */ log),\n/* harmony export */ midLine: () => (/* binding */ midLine),\n/* harmony export */ normalizeAngle: () => (/* binding */ normalizeAngle),\n/* harmony export */ prefix: () => (/* binding */ prefix),\n/* harmony export */ sumArray: () => (/* binding */ sumArray),\n/* harmony export */ warn: () => (/* binding */ warn)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nclass RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nfunction globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof __webpack_require__.g !== 'undefined') {\n return __webpack_require__.g;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nfunction defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nfunction log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nfunction warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nfunction midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nfunction prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nfunction normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nfunction sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n\n\n/***/ }),\n\n/***/ \"./src/vex.ts\":\n/*!********************!*\\\n !*** ./src/vex.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vex: () => (/* binding */ Vex)\n/* harmony export */ });\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\n\n\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow;\n\n\n\n/***/ }),\n\n/***/ \"./src/vibrato.ts\":\n/*!************************!*\\\n !*** ./src/vibrato.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vibrato: () => (/* binding */ Vibrato)\n/* harmony export */ });\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/** `Vibrato` implements diverse vibratos. */\nclass Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/vibratobracket.ts\":\n/*!*******************************!*\\\n !*** ./src/vibratobracket.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VibratoBracket: () => (/* binding */ VibratoBracket)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/voice.ts\":\n/*!**********************!*\\\n !*** ./src/voice.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Voice: () => (/* binding */ Voice),\n/* harmony export */ VoiceMode: () => (/* binding */ VoiceMode)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nclass Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/web.ts\":\n/*!********************!*\\\n !*** ./src/web.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isHTMLCanvas: () => (/* binding */ isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* binding */ isHTMLDiv)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\n\n// eslint-disable-next-line\nfunction isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nfunction isHTMLDiv(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!********************************!*\\\n !*** ./entry/vexflow-debug.ts ***!\n \\********************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType),\n/* harmony export */ \"default\": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__),\n/* harmony export */ defined: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn)\n/* harmony export */ });\n/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ \"./src/flow.ts\");\n/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ \"./src/fonts/load_all.ts\");\n/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ \"./src/fonts/textfonts.ts\");\n/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ \"./src/index.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\n\n\n\n(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)();\n_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)();\n// Re-export all exports from index.ts.\n\n// Also collect all exports into a default export for CJS projects.\n\n\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=vexflow-debug.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Smoosic relies on dynamic creation of almost everything. This class exports all the symbols\r\n// that need to be created via reflection.\r\n// ui application components\r\n// vexflow interface\r\nimport { TextFormatter } from '../common/textformatter';\r\nimport { VexFlow } from '../common/vex';\r\nimport { SuiApplication } from './application';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiPiano } from '../render/sui/piano';\r\nimport { SuiDom } from './dom';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { ArticulationButtons } from '../ui/buttons/articulation';\r\nimport { BeamButtons } from '../ui/buttons/beam';\r\nimport { ChordButtons } from '../ui/buttons/chord';\r\nimport { CollapseRibbonControl, ExtendedCollapseParent } from '../ui/buttons/collapsable';\r\nimport { DisplaySettings } from '../ui/buttons/display';\r\nimport { DurationButtons } from '../ui/buttons/duration';\r\nimport { MeasureButtons } from '../ui/buttons/measure';\r\nimport { MicrotoneButtons } from '../ui/buttons/microtone';\r\nimport { NavigationButtons } from '../ui/buttons/navigation';\r\nimport { NoteButtons } from '../ui/buttons/note';\r\nimport { PlayerButtons } from '../ui/buttons/player';\r\nimport { StaveButtons } from '../ui/buttons/stave';\r\nimport { TextButtons } from '../ui/buttons/text';\r\nimport { VoiceButtons } from '../ui/buttons/voice';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { simpleRibbonLayout } from '../ui/ribbonLayout/default/tabletRibbon';\r\nimport { SimpleEventHandler, ModalEventHandler } from './common';\r\n// Language strings\r\nimport { cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n} from '../ui/i18n/language_en';\r\n\r\n// ui dialogs and menus\r\n// Dialogs\r\nimport { SuiDialogBase } from '../ui/dialogs/dialog';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiTransposeScoreDialog, SuiTransposeScoreAdapter } from '../ui/dialogs/transposeScore';\r\nimport { SuiMeasureDialog } from '../ui/dialogs/measureFormat';\r\nimport { SuiInsertMeasures } from '../ui/dialogs/addMeasure';\r\nimport { SuiInstrumentDialog } from '../ui/dialogs/instrument';\r\nimport { SuiTimeSignatureDialog } from '../ui/dialogs/timeSignature';\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { SuiScoreIdentificationDialog } from '../ui/dialogs/scoreId';\r\nimport { SuiScorePreferencesDialog } from '../ui/dialogs/preferences';\r\nimport { SuiPageLayoutDialog } from '../ui/dialogs/pageLayout';\r\nimport { SuiTextBracketDialog } from '../ui/dialogs/textBracket';\r\nimport { SuiScoreFontDialog } from '../ui/dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../ui/dialogs/globalLayout';\r\nimport { SuiScoreViewDialog } from '../ui/dialogs/scoreView';import { SuiLibraryDialog } from '../ui/dialogs/library';\r\nimport { SuiChordChangeDialog } from '../ui/dialogs/chordChange';\r\nimport { SuiLyricDialog } from '../ui/dialogs/lyric';\r\nimport { SuiTextBlockDialog, helpModal } from '../ui/dialogs/textBlock';\r\nimport { SuiDynamicModifierDialog } from '../ui/dialogs/dynamics';\r\nimport { SuiSlurAttributesDialog } from '../ui/dialogs/slur';\r\nimport { SuiTieAttributesDialog } from '../ui/dialogs/tie';\r\nimport { SuiVoltaAttributeDialog } from '../ui/dialogs/volta';\r\nimport { SuiHairpinAttributesDialog } from '../ui/dialogs/hairpin';\r\nimport { SuiStaffGroupDialog } from '../ui/dialogs/staffGroup';\r\nimport { SuiScoreArpeggioDialog } from '../ui/dialogs/arpeggio'\r\nimport { SuiPartInfoDialog } from '../ui/dialogs/partInfo';\r\nimport { SuiLoadMxmlDialog, SuiLoadFileDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog,\r\n SuiSaveMidiDialog, SuiSaveVexDialog } from '../ui/dialogs/fileDialogs';\r\n // Dialog components\r\nimport { SuiTextInputComponent, SuiTextInputComposite } from '../ui/dialogs/components/textInput';\r\nimport { SuiDropdownComponent, SuiDropdownComposite } from '../ui/dialogs/components/dropdown';\r\nimport { SuiButtonComposite, SuiButtonComponent } from '../ui/dialogs/components/button';\r\nimport { SuiToggleComponent, SuiToggleComposite } from '../ui/dialogs/components/toggle';\r\nimport { SuiFileDownloadComponent } from '../ui/dialogs/components/fileDownload';\r\nimport { SuiRockerComponent, SuiRockerComposite } from '../ui/dialogs/components/rocker';\r\nimport { SuiFontComponent } from '../ui/dialogs/components/fontComponent';\r\nimport { SuiTextBlockComponent } from '../ui/dialogs/components/textInPlace';\r\nimport { SuiTreeComponent } from '../ui/dialogs/components/tree';\r\nimport {\r\n SuiLyricComponent, SuiChordComponent,\r\n SuiNoteTextComponent\r\n} from '../ui/dialogs/components/noteText';\r\nimport { SuiDragText } from '../ui/dialogs/components/dragText';\r\nimport { SuiTextInPlace } from '../ui/dialogs/components/textInPlace';\r\nimport { CheckboxDropdownComponent } from '../ui/dialogs/components/checkdrop';\r\nimport { TieMappingComponent } from '../ui/dialogs/components/tie';\r\nimport { StaffAddRemoveComponent,\r\n StaffCheckComponent} from '../ui/dialogs/components/staffComponents';\r\nimport { TextCheckComponent } from '../ui/dialogs/components/textCheck';\r\n// menus\r\nimport { SuiMenuManager} from '../ui/menus/manager';\r\nimport { SuiMenuBase } from '../ui/menus/menu';\r\nimport { SuiScoreMenu } from '../ui/menus/score';\r\nimport { SuiPartMenu } from '../ui/menus/parts';\r\nimport { SuiPartSelectionMenu } from '../ui/menus/partSelection';\r\nimport { SuiDynamicsMenu } from '../ui/menus/dynamics';\r\nimport { SuiTimeSignatureMenu } from '../ui/menus/timeSignature';\r\nimport { SuiKeySignatureMenu } from '../ui/menus/keySignature';\r\nimport { SuiStaffModifierMenu } from '../ui/menus/staffModifier';\r\nimport { SuiFileMenu } from '../ui/menus/file';\r\nimport { SuiLanguageMenu } from '../ui/menus/language';\r\nimport { SmoLanguage, SmoTranslator } from '../ui/i18n/language';\r\nimport { SuiMeasureMenu } from '../ui/menus/measure';\r\nimport { SuiNoteMenu } from '../ui/menus/note';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\n// render library\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiScoreRender } from '../render/sui/scoreRender';\r\nimport { layoutDebug } from '../render/sui/layoutDebug';\r\nimport { SuiMapper } from '../render/sui/mapper';\r\nimport { SuiScroller } from '../render/sui/scroller';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\n\r\n// audio library\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SuiOscillator, SuiSampler, SuiReverb } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\n\r\n\r\n// SMO object model\r\nimport { SmoScore, engravingFontTypes, isEngravingFont } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { SmoNote } from '../smo/data/note';\r\nimport { SmoDuration } from '../smo/xform/tickDuration';\r\nimport { createLoadTests } from '../../tests/file-load';\r\nimport { SmoStaffHairpin, StaffModifierBase, SmoInstrument, SmoSlur, SmoTie, SmoStaffTextBracket } from '../smo/data/staffModifiers';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { SmoMusic } from '../smo/data/music';\r\nimport { SmoAudioPitch } from '../smo/data/music';\r\nimport { SmoSelection, SmoSelector } from '../smo/xform/selections';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric,\r\n SmoArpeggio } from '../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../smo/data/systemStaff';\r\nimport { SmoSystemGroup, SmoAudioPlayerSettings, SmoScorePreferences } from '../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParams } from '../smo/data/scoreText';\r\nimport { SmoOperation } from '../smo/xform/operations';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature\r\n} from '../smo/data/measureModifiers';\r\nimport { SmoToXml } from '../smo/mxml/smoToXml';\r\nimport { MidiToSmo } from '../smo/midi/midiToSmo';\r\nimport { SmoToMidi } from '../smo/midi/smoToMidi';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SmoToVex } from '../render/vex/toVex';\r\n// utilities\r\nimport { buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer } from '../common/htmlHelpers';\r\n\r\nimport { renderVexTests } from './generateVexTests';\r\nconst getClass = (jsonString: string) => {\r\n return eval('Smo.' + jsonString);\r\n};\r\nexport const Smo = {\r\n // Application-level classes\r\n SmoConfiguration,\r\n SuiApplication,\r\n SuiDom, SuiEventHandler, SuiExceptionHandler,\r\n Qwerty, SuiHelp, SmoTranslationEditor, SimpleEventHandler, ModalEventHandler,\r\n // Ribbon buttons\r\n simpleRibbonLayout,\r\n RibbonButtons, NoteButtons, TextButtons, ChordButtons, MicrotoneButtons,\r\n StaveButtons, BeamButtons, MeasureButtons, DurationButtons,\r\n VoiceButtons, PlayerButtons, ArticulationButtons, NavigationButtons,\r\n DisplaySettings, ExtendedCollapseParent, CollapseRibbonControl,\r\n // Menus\r\n SuiMenuManager, SuiMenuBase, SuiScoreMenu, SuiFileMenu,\r\n SuiDynamicsMenu, SuiTimeSignatureMenu, SuiKeySignatureMenu, SuiStaffModifierMenu,\r\n SuiLanguageMenu, SuiMeasureMenu, SuiNoteMenu, SmoLanguage, SmoTranslator, SuiPartMenu,\r\n SuiPartSelectionMenu,\r\n // Dialogs\r\n SuiTempoDialog, SuiInstrumentDialog, SuiModifierDialogFactory, SuiLibraryDialog,\r\n SuiTextBracketDialog,\r\n SuiScoreViewDialog, SuiGlobalLayoutDialog, SuiScoreIdentificationDialog, SuiTransposeScoreAdapter,\r\n SuiTransposeScoreDialog,\r\n SuiScoreFontDialog, SuiPageLayoutDialog, SuiMeasureDialog, SuiInsertMeasures,\r\n SuiTimeSignatureDialog,SuiTextBlockDialog, SuiLyricDialog, SuiChordChangeDialog,\r\n SuiSlurAttributesDialog, SuiTieAttributesDialog, SuiVoltaAttributeDialog,\r\n SuiHairpinAttributesDialog, SuiStaffGroupDialog, helpModal,\r\n SuiLoadFileDialog, SuiLoadMxmlDialog, SuiScorePreferencesDialog,\r\n SuiPartInfoDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog, SuiSaveVexDialog,\r\n SuiSaveMidiDialog, SuiDialogBase,\r\n // Dialog components\r\n SuiTreeComponent,\r\n SuiDropdownComponent,\r\n SuiRockerComponent, SuiFileDownloadComponent,\r\n SuiToggleComponent, SuiButtonComponent, SuiDropdownComposite,\r\n SuiToggleComposite, SuiButtonComposite, SuiRockerComposite, SuiTextInputComposite,\r\n SuiFontComponent, SuiTextInPlace, SuiLyricComponent, SuiChordComponent, SuiDragText,\r\n SuiNoteTextComponent, SuiTextBlockComponent, SuiTextInputComponent,\r\n SuiDynamicModifierDialog, CheckboxDropdownComponent, TieMappingComponent, StaffAddRemoveComponent,\r\n StaffCheckComponent, TextCheckComponent, SuiScoreArpeggioDialog,\r\n SuiXhrLoader,PromiseHelpers,\r\n // Rendering components\r\n SuiPiano, layoutDebug, SuiScoreView,SuiScroller, SvgHelpers, SuiMapper, SuiScoreRender,\r\n SuiScoreViewOperations, TextFormatter, VexFlow,\r\n\r\n // Audio components\r\n SuiAudioPlayer, SuiOscillator, SuiSampleMedia, SuiSampler, SuiReverb,\r\n\r\n // Smo Music Objects\r\n SmoScore,\r\n SmoScorePreferences, \r\n engravingFontTypes, isEngravingFont,\r\n XmlToSmo,\r\n SmoToXml,\r\n MidiToSmo,\r\n SmoToMidi,\r\n SmoMusic,\r\n SmoAudioPitch,\r\n SmoMeasure,\r\n SmoSystemStaff,\r\n SmoNote,\r\n // staff modifier\r\n SmoStaffHairpin, StaffModifierBase,\r\n SmoStaffTextBracket,\r\n SmoInstrument, SmoSlur, SmoTie,\r\n // score modifiers\r\n SmoSystemGroup, SmoAudioPlayerSettings, SmoTextGroup,\r\n // measure modifiers\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature,\r\n // note modifiers\r\n SmoOrnament,\r\n SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric, SmoArpeggio,\r\n // Smo Transformers\r\n SmoSelection, SmoSelector, SmoDuration, UndoBuffer, SmoToVex, SmoOperation,\r\n // new score bootstrap\r\n // help strings\r\n cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn,\r\n getClass,\r\n createLoadTests,\r\n // utilities\r\n buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer,\r\n renderVexTests\r\n}\r\nexport default Smo;\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"smoosic.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAm+CjC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACn+CI,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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GAAG,0BAAmB;AACzC,qBAAqB,8BAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,+BAAmB;;AAEzE,+BAAmB,GAAG,0BAAmB;AACzC,qBAAqB,+BAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,+BAAmB;AACrF,+DAA+D,+BAAmB;AAClF,kEAAkE,+BAAmB;AACrF,+DAA+D,+BAAmB;AAClF,gEAAgE,+BAAmB;AACnF,mEAAmE,+BAAmB;AACtF,8DAA8D,+BAAmB;AACjF;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAwC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,KAAK;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,uEAAuE,gCAAmB;AAC1F,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,gCAAmB;AAClF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,oHAAoH,gBAAgB;AACpI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,gCAAmB;AACjF,sEAAsE,gCAAmB;AACzF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2EAA2E;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;;;AAIjC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,uEAAuE,iCAAmB;AAC1F,8DAA8D,iCAAmB;AACjF,6DAA6D,iCAAmB;AAChF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,kEAAkE,iCAAmB;AACrF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AACrE;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,yBAAyB;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,gEAAgE,iCAAmB;AACnF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2HAA2H,UAAU;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,8DAA8D,iCAAmB;AACjF,mEAAmE,iCAAmB;AACtF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,6DAA6D,iCAAmB;AAChF,wEAAwE,iCAAmB;AAC3F,+DAA+D,iCAAmB;AAClF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,2EAA2E,WAAW;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,uMAAuM,cAAc;AAC1Q,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,qEAAqE,iCAAmB;AACxF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,+DAA+D,iCAAmB;AAClF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uLAAuL;AACzN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;;;AAIpC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,gFAAgF,iCAAmB;AACnG,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,oEAAoE,iCAAmB;AACvF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,oEAAoE,iCAAmB;AACvF,kEAAkE,iCAAmB;AACrF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,gEAAgE,iCAAmB;AACnF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,gEAAgE,iCAAmB;AACnF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,wEAAwE,iCAAmB;AAC3F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,yEAAyE,iCAAmB;AAC5F,uEAAuE,iCAAmB;AAC1F,oEAAoE,iCAAmB;AACvF,wEAAwE,iCAAmB;AAC3F,oEAAoE,iCAAmB;AACvF,0EAA0E,iCAAmB;AAC7F,qEAAqE,iCAAmB;AACxF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,kEAAkE,iCAAmB;AACrF,qEAAqE,iCAAmB;AACxF,iEAAiE,iCAAmB;AACpF,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,wEAAwE,iCAAmB;AAC3F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,wEAAwE,iCAAmB;AAC3F,sEAAsE,iCAAmB;AACzF,kEAAkE,iCAAmB;AACrF,iEAAiE,iCAAmB;AACpF,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,kEAAkE,iCAAmB;AACrF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F;AACA;AACA;AACA;;;;;;AAMA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,wEAAwE,iCAAmB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,+EAA+E,kCAAmB;AAClG,2EAA2E,kCAAmB;AAC9F,gFAAgF,kCAAmB;AACnG,2EAA2E,kCAAmB;AAC9F,4EAA4E,kCAAmB;AAC/F;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF;AACA;;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,4GAA4G;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,mHAAmH;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG,EAAE,IAAI,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,uFAAuF,MAAM;AAC7F;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,2FAA2F,MAAM;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,WAAW;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8IAA8I;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAmD,GAAG;AACjF;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF,oEAAoE,kCAAmB;AACvF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,+DAA+D,kCAAmB;AAClF,+DAA+D,kCAAmB;AAClF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,yEAAyE,kCAAmB;AAC5F,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,0EAA0E,kCAAmB;AAC7F,2EAA2E,kCAAmB;AAC9F,gEAAgE,kCAAmB;AACnF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,0EAA0E,kCAAmB;AAC7F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,iEAAiE,kCAAmB;AACpF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,iEAAiE,kCAAmB;AACpF,iEAAiE,kCAAmB;AACpF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;;;;;;;;;;;;;;AAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;AAQA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,SAAS;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAA4D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,UAAU;AACtG,iGAAiG,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,6DAA6D,kCAAmB;AAChF,wEAAwE,kCAAmB;AAC3F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA,+EAA+E,+BAA+B;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4fAA4f;AAC1iB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,UAAU;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,eAAe;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,UAAU;AACvH;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,cAAc;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,IAAI,UAAU;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,KAAK,IAAI,UAAU;AAC/H;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA,wGAAwG,MAAM,IAAI,MAAM;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,2BAA2B;AACxJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,8HAA8H;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,8EAA8E;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,0BAA0B;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,6DAA6D,kCAAmB;AAChF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0BAA0B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,QAAQ;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,sEAAsE,kCAAmB;AACzF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF;AACA;;;;;;;;;;;;;;;;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,4SAA4S;AACnV,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wJAAwJ;AACvL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8HAA8H,UAAU;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,uBAAuB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8HAA8H,IAAI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8OAA8O,kBAAkB;AAChQ;AACA;AACA;AACA;AACA,gPAAgP,mBAAmB;AACnQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,kBAAkB;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,6GAA6G;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;;;;AAIrC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA,4HAA4H,UAAU;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,UAAU;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,qBAAqB;AAC9I;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB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gJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,uJAAuJ,eAAe;AACtK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,mJAAmJ,QAAQ;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,QAAQ;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,SAAS;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAA6C,KAAK,mDAAmD,GAAG;AAC7H;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF;;;AAGA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,kFAAkF;AACxK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,sBAAsB;AACvH;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,sBAAsB;AAC7K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF,iCAAiC;AACjC;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,sEAAsE,kCAAmB;AACzF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA,4GAA4G,SAAS;AACrH;AACA;AACA;AACA;AACA,gHAAgH,SAAS;AACzH;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yBAAyB;AAC7D;AACA,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS;AACnE,uCAAuC,SAAS,cAAc,6EAA6E;AAC3I,wBAAwB,cAAc;AACtC,qGAAqG,0CAA0C;AAC/I;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,aAAa;AAC7H;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,yBAAyB,GAAG,UAAU;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0HAA0H,QAAQ;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iEAAiE,GAAG,OAAO;AAC7F;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;AAG7B,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAmB;AAClC,eAAe,kCAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iGAAiG;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,kCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,gBAAgB,kCAAmB,wBAAwB,kCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA,IAAI,0BAAmB;AACvB;AACA;AACA;AACA;AACA;AACA,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,4EAA4E,kCAAmB;AAC/F,6EAA6E,kCAAmB;AAChG,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;;;AAGA,CAAC;;AAED,0BAAmB,GAAG,0BAAmB;AACzC,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;AACD;;;;;;UCznnCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA,+FAA+F;AAC/F,0CAA0C;AAC1C,4BAA4B;AAC5B,oBAAoB;AACoC;AAChB;AACO;AACE;AACM;AACjB;AACS;AAChB;AACM;AAC4B;AAChB;AACE;AACuC;AAClC;AACC;AACF;AACI;AACE;AACZ;AACI;AACF;AACF;AACE;AACiB;AACjB;AACE;AACwB;AACZ;AACjE,mBAAmB;AAMa;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","sources":["webpack://Smo/webpack/universalModuleDefinition","webpack://Smo/./src/application/application.ts","webpack://Smo/./src/application/common.ts","webpack://Smo/./src/application/configuration.ts","webpack://Smo/./src/application/dom.ts","webpack://Smo/./src/application/eventHandler.ts","webpack://Smo/./src/application/generateVexTests.ts","webpack://Smo/./src/application/keyCommands.ts","webpack://Smo/./src/common/htmlHelpers.ts","webpack://Smo/./src/common/midiWriter.js","webpack://Smo/./src/common/promiseHelpers.ts","webpack://Smo/./src/common/serializationHelpers.js","webpack://Smo/./src/common/textformatter.ts","webpack://Smo/./src/common/vex.ts","webpack://Smo/./src/render/audio/musicCursor.ts","webpack://Smo/./src/render/audio/oscillator.ts","webpack://Smo/./src/render/audio/player.ts","webpack://Smo/./src/render/audio/samples.ts","webpack://Smo/./src/render/sui/formatter.ts","webpack://Smo/./src/render/sui/layoutDebug.ts","webpack://Smo/./src/render/sui/mapper.ts","webpack://Smo/./src/render/sui/piano.ts","webpack://Smo/./src/render/sui/renderState.ts","webpack://Smo/./src/render/sui/scoreRender.ts","webpack://Smo/./src/render/sui/scoreView.ts","webpack://Smo/./src/render/sui/scoreViewOperations.ts","webpack://Smo/./src/render/sui/scroller.ts","webpack://Smo/./src/render/sui/svgHelpers.ts","webpack://Smo/./src/render/sui/svgPageMap.ts","webpack://Smo/./src/render/sui/textEdit.ts","webpack://Smo/./src/render/sui/textRender.ts","webpack://Smo/./src/render/sui/tracker.ts","webpack://Smo/./src/render/vex/glyphDimensions.ts","webpack://Smo/./src/render/vex/smoAdapter.ts","webpack://Smo/./src/render/vex/toVex.ts","webpack://Smo/./src/render/vex/vxMeasure.ts","webpack://Smo/./src/render/vex/vxSystem.ts","webpack://Smo/./src/smo/data/common.ts","webpack://Smo/./src/smo/data/measure.ts","webpack://Smo/./src/smo/data/measureModifiers.ts","webpack://Smo/./src/smo/data/music.ts","webpack://Smo/./src/smo/data/note.ts","webpack://Smo/./src/smo/data/noteModifiers.ts","webpack://Smo/./src/smo/data/partInfo.ts","webpack://Smo/./src/smo/data/score.ts","webpack://Smo/./src/smo/data/scoreModifiers.ts","webpack://Smo/./src/smo/data/scoreText.ts","webpack://Smo/./src/smo/data/staffModifiers.ts","webpack://Smo/./src/smo/data/systemStaff.ts","webpack://Smo/./src/smo/data/tuplet.ts","webpack://Smo/./src/smo/midi/midiToSmo.ts","webpack://Smo/./src/smo/midi/smoToMidi.ts","webpack://Smo/./src/smo/mxml/smoToXml.ts","webpack://Smo/./src/smo/mxml/xmlHelpers.ts","webpack://Smo/./src/smo/mxml/xmlState.ts","webpack://Smo/./src/smo/mxml/xmlToSmo.ts","webpack://Smo/./src/smo/xform/audioTrack.ts","webpack://Smo/./src/smo/xform/beamers.ts","webpack://Smo/./src/smo/xform/copypaste.ts","webpack://Smo/./src/smo/xform/operations.ts","webpack://Smo/./src/smo/xform/selections.ts","webpack://Smo/./src/smo/xform/tickDuration.ts","webpack://Smo/./src/smo/xform/tickMap.ts","webpack://Smo/./src/smo/xform/undo.ts","webpack://Smo/./src/styles/font_metrics/Commissioner-Medium-Metrics.js","webpack://Smo/./src/styles/font_metrics/ConcertOne-Regular.js","webpack://Smo/./src/styles/font_metrics/Merriweather-Regular.js","webpack://Smo/./src/styles/font_metrics/arial_metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-sans-metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-serif-metrics.js","webpack://Smo/./src/styles/font_metrics/times_metrics.js","webpack://Smo/./src/ui/buttons/articulation.ts","webpack://Smo/./src/ui/buttons/beam.ts","webpack://Smo/./src/ui/buttons/button.ts","webpack://Smo/./src/ui/buttons/chord.ts","webpack://Smo/./src/ui/buttons/collapsable.ts","webpack://Smo/./src/ui/buttons/display.ts","webpack://Smo/./src/ui/buttons/duration.ts","webpack://Smo/./src/ui/buttons/measure.ts","webpack://Smo/./src/ui/buttons/microtone.ts","webpack://Smo/./src/ui/buttons/navigation.ts","webpack://Smo/./src/ui/buttons/note.ts","webpack://Smo/./src/ui/buttons/player.ts","webpack://Smo/./src/ui/buttons/ribbon.ts","webpack://Smo/./src/ui/buttons/stave.ts","webpack://Smo/./src/ui/buttons/text.ts","webpack://Smo/./src/ui/buttons/voice.ts","webpack://Smo/./src/ui/dialogs/adapter.ts","webpack://Smo/./src/ui/dialogs/addMeasure.ts","webpack://Smo/./src/ui/dialogs/arpeggio.ts","webpack://Smo/./src/ui/dialogs/audioSettings.ts","webpack://Smo/./src/ui/dialogs/chordChange.ts","webpack://Smo/./src/ui/dialogs/components/baseComponent.ts","webpack://Smo/./src/ui/dialogs/components/button.ts","webpack://Smo/./src/ui/dialogs/components/checkdrop.ts","webpack://Smo/./src/ui/dialogs/components/dragText.ts","webpack://Smo/./src/ui/dialogs/components/dropdown.ts","webpack://Smo/./src/ui/dialogs/components/fileDownload.ts","webpack://Smo/./src/ui/dialogs/components/fontComponent.ts","webpack://Smo/./src/ui/dialogs/components/noteText.ts","webpack://Smo/./src/ui/dialogs/components/rocker.ts","webpack://Smo/./src/ui/dialogs/components/staffComponents.ts","webpack://Smo/./src/ui/dialogs/components/textCheck.ts","webpack://Smo/./src/ui/dialogs/components/textInPlace.ts","webpack://Smo/./src/ui/dialogs/components/textInput.ts","webpack://Smo/./src/ui/dialogs/components/tie.ts","webpack://Smo/./src/ui/dialogs/components/toggle.ts","webpack://Smo/./src/ui/dialogs/components/tree.ts","webpack://Smo/./src/ui/dialogs/dialog.ts","webpack://Smo/./src/ui/dialogs/dynamics.ts","webpack://Smo/./src/ui/dialogs/factory.ts","webpack://Smo/./src/ui/dialogs/fileDialogs.ts","webpack://Smo/./src/ui/dialogs/fonts.ts","webpack://Smo/./src/ui/dialogs/globalLayout.ts","webpack://Smo/./src/ui/dialogs/hairpin.ts","webpack://Smo/./src/ui/dialogs/instrument.ts","webpack://Smo/./src/ui/dialogs/library.ts","webpack://Smo/./src/ui/dialogs/lyric.ts","webpack://Smo/./src/ui/dialogs/measureFormat.ts","webpack://Smo/./src/ui/dialogs/newPart.ts","webpack://Smo/./src/ui/dialogs/pageLayout.ts","webpack://Smo/./src/ui/dialogs/partInfo.ts","webpack://Smo/./src/ui/dialogs/preferences.ts","webpack://Smo/./src/ui/dialogs/scoreId.ts","webpack://Smo/./src/ui/dialogs/scoreView.ts","webpack://Smo/./src/ui/dialogs/slur.ts","webpack://Smo/./src/ui/dialogs/staffGroup.ts","webpack://Smo/./src/ui/dialogs/tempo.ts","webpack://Smo/./src/ui/dialogs/textBlock.ts","webpack://Smo/./src/ui/dialogs/textBracket.ts","webpack://Smo/./src/ui/dialogs/tie.ts","webpack://Smo/./src/ui/dialogs/timeSignature.ts","webpack://Smo/./src/ui/dialogs/transposeScore.ts","webpack://Smo/./src/ui/dialogs/volta.ts","webpack://Smo/./src/ui/eventSource.ts","webpack://Smo/./src/ui/exceptions.ts","webpack://Smo/./src/ui/fileio/fileInput.ts","webpack://Smo/./src/ui/fileio/library.ts","webpack://Smo/./src/ui/fileio/xhrLoader.ts","webpack://Smo/./src/ui/help.ts","webpack://Smo/./src/ui/i18n/language.ts","webpack://Smo/./src/ui/i18n/language_ar.js","webpack://Smo/./src/ui/i18n/language_de.js","webpack://Smo/./src/ui/i18n/language_en.js","webpack://Smo/./src/ui/i18n/translationEditor.ts","webpack://Smo/./src/ui/keyBindings/default/editorKeys.ts","webpack://Smo/./src/ui/keyBindings/default/trackerKeys.ts","webpack://Smo/./src/ui/menus/dynamics.ts","webpack://Smo/./src/ui/menus/file.ts","webpack://Smo/./src/ui/menus/keySignature.ts","webpack://Smo/./src/ui/menus/language.ts","webpack://Smo/./src/ui/menus/manager.ts","webpack://Smo/./src/ui/menus/measure.ts","webpack://Smo/./src/ui/menus/menu.ts","webpack://Smo/./src/ui/menus/note.ts","webpack://Smo/./src/ui/menus/partSelection.ts","webpack://Smo/./src/ui/menus/parts.ts","webpack://Smo/./src/ui/menus/score.ts","webpack://Smo/./src/ui/menus/staffModifier.ts","webpack://Smo/./src/ui/menus/timeSignature.ts","webpack://Smo/./src/ui/qwerty.ts","webpack://Smo/./src/ui/ribbonLayout/default/defaultRibbon.ts","webpack://Smo/./src/ui/ribbonLayout/default/tabletRibbon.ts","webpack://Smo/./tests/file-load.ts","webpack://Smo/./node_modules/vexflow_smoosic/build/cjs/vexflow-debug.js","webpack://Smo/webpack/bootstrap","webpack://Smo/webpack/runtime/compat get default export","webpack://Smo/webpack/runtime/define property getters","webpack://Smo/webpack/runtime/hasOwnProperty shorthand","webpack://Smo/webpack/runtime/make namespace object","webpack://Smo/./src/application/exports.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Smo\"] = factory();\n\telse\n\t\troot[\"Smo\"] = factory();\n})(this, () => {\nreturn ","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../common/serializationHelpers';\r\nimport { _MidiWriter } from '../common/midiWriter';\r\n\r\nimport { SmoConfiguration, SmoConfigurationParams } from './configuration';\r\nimport { SmoScore } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SuiRenderState } from '../render/sui/renderState';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiOscillator } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\n\r\nimport { ArialFont } from '../styles/font_metrics/arial_metrics';\r\nimport { TimesFont } from '../styles/font_metrics/times_metrics';\r\nimport { Commissioner_MediumFont } from '../styles/font_metrics/Commissioner-Medium-Metrics';\r\nimport { Concert_OneFont } from '../styles/font_metrics/ConcertOne-Regular';\r\nimport { MerriweatherFont } from '../styles/font_metrics/Merriweather-Regular';\r\nimport { SourceSansProFont } from '../styles/font_metrics/ssp-sans-metrics';\r\nimport { SourceSerifProFont } from '../styles/font_metrics/ssp-serif-metrics';\r\n\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoTranslator } from '../ui/i18n/language';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\nimport { SuiDom } from './dom';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { KeyBinding, ModalEventHandlerProxy } from './common';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { getDomContainer } from '../common/htmlHelpers';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { VexFlow } from '../common/vex';\r\nimport { TextFormatter } from '../common/textformatter';\r\n\r\ndeclare var $: any;\r\n\r\ninterface pairType { [key: string]: string }\r\n\r\n/**\r\n * Score renderer instance\r\n * @internal\r\n */\r\nexport interface SuiRendererInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n renderer: SuiRenderState;\r\n}\r\n/**\r\n * Global instance for debugging\r\n */\r\nexport interface SuiInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n tracker: SuiTracker;\r\n keyCommands: SuiKeyCommands;\r\n menus: SuiMenuManager;\r\n eventHandler: SuiEventHandler;\r\n ribbon: RibbonButtons\r\n}\r\nconst VF = VexFlow;\r\n\r\n/**\r\n * Parse query string for application\r\n * @category AppUtil\r\n */\r\nexport class QueryParser {\r\n pairs: pairType[] = [];\r\n queryPair(str: string): pairType {\r\n var i = 0;\r\n const ar = str.split('=');\r\n const rv: pairType = {};\r\n for (i = 0; i < ar.length - 1; i += 2) {\r\n const name = decodeURIComponent(ar[i]);\r\n rv[name] = decodeURIComponent(ar[i + 1]);\r\n }\r\n return rv;\r\n }\r\n constructor() {\r\n let i: number = 0;\r\n if (window.location.search) {\r\n const cmd = window.location.search.substring(1, window.location.search.length);\r\n const cmds = cmd.split('&');\r\n for (i = 0; i < cmds.length; ++i) {\r\n const cmd = cmds[i];\r\n this.pairs.push(this.queryPair(cmd));\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** SuiApplication\r\n * main entry point of application. Based on the configuration,\r\n * either start the default UI, or initialize library mode and\r\n * await further instructions.\r\n * @category SuiApplication\r\n */\r\nexport class SuiApplication {\r\n scoreLibrary: any;\r\n instance: SuiInstance | null = null;\r\n config: SmoConfiguration;\r\n score: SmoScore | null = null;\r\n view: SuiScoreViewOperations | null = null;\r\n domElement: HTMLElement;\r\n static async configure(params: Partial): Promise {\r\n const config: SmoConfiguration = new SmoConfiguration(params);\r\n (window as any).SmoConfig = config;\r\n const application = new SuiApplication(config);\r\n SuiApplication.registerFonts();\r\n return application.initialize();\r\n }\r\n constructor(config: SmoConfiguration) {\r\n this.config = config;\r\n this.domElement = this._getDomContainer();\r\n }\r\n _getDomContainer(): HTMLElement {\r\n const el = getDomContainer(this.config.scoreDomContainer);\r\n if (typeof(el) === 'undefined') {\r\n throw 'scoreDomContainer is a required config parameter';\r\n }\r\n return el;\r\n }\r\n static instance: SuiInstance;\r\n /** \r\n // Different applications can create their own key bindings, these are the defaults.\r\n // Many editor commands can be reached by a single keystroke. For more advanced things there\r\n // are menus.\r\n */\r\n static get keyBindingDefaults(): KeyBinding[] {\r\n var editorKeys = SuiEventHandler.editorKeyBindingDefaults;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n var trackerKeys = SuiEventHandler.trackerKeyBindingDefaults;\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return trackerKeys.concat(editorKeys);\r\n }\r\n /**\r\n * Initialize the library according to instruction in config object:\r\n * 1. Try to load a new score\r\n * 2. If in application mode, start the UI. If in translation mode, start translation\r\n * @returns \r\n */\r\n initialize(): Promise {\r\n const samplePromise: Promise = SuiSampleMedia.samplePromise(SuiOscillator.audio);\r\n\r\n const self = this; \r\n // Hide header at the top of some applications\r\n $('#link-hdr button').off('click').on('click', () => {\r\n $('#link-hdr').addClass('hide');\r\n });\r\n\r\n const createScore = (): Promise => {\r\n return self.createScore();\r\n }\r\n const startApplication = () => {\r\n if (self.config.mode === 'translate') {\r\n self._startApplication();\r\n }\r\n else if (self.config.mode === 'application') {\r\n self._startApplication();\r\n } else { // library mode.\r\n self.createView(self.score!);\r\n }\r\n }\r\n const render = () => {\r\n return self.view?.renderer.renderPromise();\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n samplePromise.then(createScore).then(startApplication).then(render)\r\n .then(\r\n () => {\r\n resolve(self);\r\n });\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Create the initial score we use to populate the UI etc:\r\n * 0. if translation mode, return empty promise, it won't be used anyway\r\n * 1. if remoteScore is set in config, try to load from remote\r\n * 2. if initialScore is set, use that\r\n * 3. if a score is saved locally with quick save (browser local cache), use that\r\n * 4. if all else fails, return an 'empty' score.\r\n * @returns promise for a remote load. If a local load, will resolve immediately\r\n */\r\n async createScore(): Promise {\r\n if (this.config.mode === 'translate') {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n if (this.config.remoteScore) {\r\n const loader = new SuiXhrLoader(this.config.remoteScore);\r\n const file = await loader.loadAsync();\r\n this.score = this._tryParse(file as string);\r\n return this.score;\r\n } else if (this.config.initialScore) {\r\n if (typeof(this.config.initialScore) === 'string') {\r\n this.score = this._tryParse(this.config.initialScore);\r\n return (this.score);\r\n } else {\r\n this.score = this.config.initialScore;\r\n return null;\r\n }\r\n } else {\r\n const localScore = localStorage.getItem(smoSerialize.localScore);\r\n if (localScore) {\r\n this.score = this._tryParse(localScore);\r\n } else {\r\n this.score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n if (this.config.mode === 'application') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n }\r\n return this.score;\r\n }\r\n _tryParse(scoreJson: string) {\r\n try {\r\n if (scoreJson[0] === '<') {\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(scoreJson, 'text/xml');\r\n return XmlToSmo.convert(xml);\r\n }\r\n return SmoScore.deserialize(scoreJson);\r\n } catch (exp) {\r\n console.warn('could not parse score');\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n _startApplication() {\r\n // Initialize the midi writer library\r\n _MidiWriter();\r\n const queryString = new QueryParser();\r\n const languageSelect = queryString.pairs.find((x) => x['language']) ?? {'language': 'en'}\r\n if (this.config.mode === 'translate') {\r\n this._deferCreateTranslator();\r\n return;\r\n }\r\n if (languageSelect) {\r\n SuiApplication._deferLanguageSelection(languageSelect.language);\r\n }\r\n this.createUi();\r\n }\r\n createView(score: SmoScore): SuiRendererInstance | null {\r\n let sdc: HTMLElement = this.domElement;\r\n const svgContainer = document.createElement('div');\r\n $(svgContainer).attr('id', 'boo').addClass('musicContainer');\r\n $(sdc).append(svgContainer);\r\n const undoBuffer = new UndoBuffer();\r\n const view = new SuiScoreViewOperations(this.config, svgContainer, score, sdc as HTMLElement, undoBuffer);\r\n const eventSource = new BrowserEventSource();\r\n eventSource.setRenderElement(svgContainer);\r\n this.view = view;\r\n view.startRenderingEngine();\r\n return {\r\n view, eventSource, undoBuffer, renderer: view.renderer\r\n };\r\n }\r\n /**\r\n * Convenience constructor, take the score and render it in the\r\n * configured rendering space.\r\n */\r\n createUi() {\r\n const viewObj: SuiRendererInstance | null = this.createView(this.score!);\r\n if (!viewObj) {\r\n return;\r\n }\r\n const view = this.view!;\r\n const tracker = view.tracker;\r\n const eventSource = new BrowserEventSource(); // events come from the browser UI.\r\n const undoBuffer = viewObj.undoBuffer;\r\n const completeNotifier = new ModalEventHandlerProxy(eventSource);\r\n const menus = new SuiMenuManager({\r\n view, eventSource, completeNotifier, undoBuffer\r\n });\r\n const ribbon = new RibbonButtons({\r\n config: this.config,\r\n ribbons: this.config.ribbonLayout,\r\n ribbonButtons: this.config.buttonDefinition,\r\n menus: menus,\r\n completeNotifier,\r\n view: view,\r\n eventSource: eventSource,\r\n tracker: view.tracker\r\n });\r\n const keyCommands = new SuiKeyCommands ({\r\n view, slashMode: true, completeNotifier, tracker, eventSource\r\n });\r\n const eventHandler = new SuiEventHandler({\r\n view, eventSource, tracker, keyCommands, menus, completeNotifier,\r\n keyBindings: SuiApplication.keyBindingDefaults, config: this.config\r\n });\r\n this.instance = {\r\n view, eventSource, eventHandler, undoBuffer,\r\n tracker, ribbon, keyCommands, menus\r\n }\r\n SuiApplication.instance = this.instance;\r\n completeNotifier.handler = eventHandler;\r\n eventSource.setRenderElement(view.renderer.elementId);\r\n // eslint-disable-next-line\r\n SuiApplication.instance = this.instance;\r\n ribbon.display();\r\n SuiDom.splash(this.config);\r\n }\r\n static async loadMusicFont(face: string, url: string) {\r\n const new_font = new FontFace('Bravura', `url(${url})`);\r\n const loadedFace = await new_font.load();\r\n document.fonts.add(loadedFace); \r\n }\r\n static async registerFonts() {\r\n TextFormatter.registerInfo({\r\n name: ArialFont.name,\r\n resolution: ArialFont.resolution,\r\n glyphs: ArialFont.glyphs,\r\n family: ArialFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in sans font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: TimesFont.name,\r\n resolution: TimesFont.resolution,\r\n glyphs: TimesFont.glyphs,\r\n family: TimesFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in serif font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Commissioner_MediumFont.name,\r\n resolution: Commissioner_MediumFont.resolution,\r\n glyphs: Commissioner_MediumFont.glyphs,\r\n family: Commissioner_MediumFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Low-contrast sans-serif text font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Concert_OneFont.name,\r\n resolution: Concert_OneFont.resolution,\r\n glyphs: Concert_OneFont.glyphs,\r\n family: Concert_OneFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Rounded grotesque typeface inspired by 19th century 3D l',\r\n });\r\n TextFormatter.registerInfo({\r\n name: MerriweatherFont.name,\r\n resolution: MerriweatherFont.resolution,\r\n glyphs: MerriweatherFont.glyphs,\r\n family: MerriweatherFont.fontFamily,\r\n serifs: true,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Serif screen font from Sorkin Type',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSansProFont.name,\r\n resolution: SourceSansProFont.resolution,\r\n glyphs: SourceSansProFont.glyphs,\r\n family: SourceSansProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Sans screen font from Adobe',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSerifProFont.name,\r\n resolution: SourceSerifProFont.resolution,\r\n glyphs: SourceSerifProFont.glyphs,\r\n family: SourceSerifProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Serif screen font from Adobe',\r\n });\r\n await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n // await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n }\r\n _deferCreateTranslator() {\r\n SuiDom.createUiDom(this.config.scoreDomContainer);\r\n setTimeout(() => {\r\n SmoTranslationEditor.startEditor(this.config.language);\r\n }, 1);\r\n }\r\n\r\n static _deferLanguageSelection(lang: string) {\r\n setTimeout(() => {\r\n SmoTranslator.setLanguage(lang);\r\n }, 1);\r\n }\r\n}\r\n","import { SuiScoreViewOperations } from \"../render/sui/scoreViewOperations\";\r\nimport { SuiTracker } from \"../render/sui/tracker\";\r\nimport { CompleteNotifier } from \"../ui/common\";\r\nimport { ModalComponent } from \"../ui/common\";\r\nimport { BrowserEventSource, EventHandler } from \"../ui/eventSource\";\r\n\r\n/**\r\n * A binding of a key to some action performed by a module\r\n */\r\nexport interface KeyBinding {\r\n event: string,\r\n key: string,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n shiftKey: boolean,\r\n action: string,\r\n module?: string\r\n}\r\n\r\n/**\r\n * parameters for the key handlers\r\n * @param view\r\n * @param slashMode indicates that the dreaded 'slash' menus are up\r\n * @param completeNotifier notified when modals close\r\n * @param tracker\r\n * @param eventSource register for event handlers\r\n * @category SuiApplication\r\n */\r\nexport interface KeyCommandParams {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n}\r\n\r\n/**\r\n * Shared interface for menus, dialogs, etc that can \r\n * accept UI events\r\n * @category SuiUiBase\r\n */\r\nexport abstract class ModalEventHandler {\r\n abstract mouseMove(ev: any): void;\r\n abstract mouseClick(ev: any): void;\r\n abstract evKey(evdata: any): void;\r\n}\r\nexport type handler = (ev: any) => void;\r\nexport class SimpleEventHandler extends ModalEventHandler {\r\n mouseMoveHandler: handler;;\r\n mouseClickHandler: handler;\r\n evKeyHandler: handler;\r\n constructor(mouseMove: handler, mouseClick: handler, keyHandler: handler) {\r\n super();\r\n this.mouseMoveHandler = mouseMove;\r\n this.mouseClickHandler = mouseClick;\r\n this.evKeyHandler = keyHandler;\r\n }\r\n mouseMove(ev: any) {\r\n this.mouseMove(ev);\r\n }\r\n mouseClick(ev: any) {\r\n this.mouseClick(ev);\r\n }\r\n evKey(ev: any) {\r\n this.evKeyHandler(ev);\r\n }\r\n}\r\n\r\n/**\r\n * Dependency injection, sends events to a proxy object, gets around some \r\n * cyclic dependencies when bootstrapping the application.\r\n * @category AppUtil\r\n */\r\nexport class ModalEventHandlerProxy {\r\n _handler: ModalEventHandler | null = null;\r\n eventSource: BrowserEventSource;\r\n unbound: boolean = true;\r\n keydownHandler: EventHandler | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(evSource: BrowserEventSource) {\r\n this.eventSource = evSource;\r\n this.bindEvents();\r\n }\r\n set handler(value: ModalEventHandler) {\r\n this._handler = value;\r\n this.unbound = false;\r\n }\r\n evKey(ev: any) {\r\n if (this._handler) {\r\n this._handler.evKey(ev);\r\n }\r\n }\r\n mouseMove(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseMove(ev);\r\n }\r\n }\r\n mouseClick(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseClick(ev);\r\n }\r\n }\r\n bindEvents() {\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n\r\n unbindKeyboardForModal(dialog: ModalComponent) {\r\n if (this.unbound) {\r\n console.log('received duplicate bind event');\r\n return;\r\n }\r\n if (!this.keydownHandler || !this.mouseMoveHandler || !this.mouseClickHandler) {\r\n console.log('received bind with no handlers');\r\n return;\r\n }\r\n this.unbound = true;\r\n const rebind = () => {\r\n this.unbound = false;\r\n this.bindEvents();\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler!);\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler!);\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler!);\r\n dialog.closeModalPromise.then(rebind);\r\n }\r\n}","// application/configuration.ts\r\n/**\r\n * Superset of configuration required to initialize Smoosic, either the appliation or library.\r\n * @module configuration\r\n */\r\nimport { SmoRenderConfiguration } from \"../render/sui/configuration\";\r\nimport { SmoScore } from \"../smo/data/score\";\r\nimport { ModalEventHandler } from \"./common\";\r\nimport { KeyBindingConfiguration, SmoUiConfiguration } from \"../ui/configuration\";\r\nimport { defaultEditorKeys } from \"../ui/keyBindings/default/editorKeys\";\r\nimport { defaultTrackerKeys } from \"../ui/keyBindings/default/trackerKeys\";\r\nimport { RibbonLayout } from \"../ui/common\";\r\nimport { ButtonDefinition } from \"../ui/buttons/button\";\r\nimport { defaultRibbonLayout } from '../ui/ribbonLayout/default/defaultRibbon';\r\nimport { SuiAudioAnimationParams, defaultAudioAnimationHandler, defaultClearAudioAnimationHandler, AudioAnimationHandler, ClearAudioAnimationHandler } \r\n from \"../render/audio/musicCursor\";\r\n\r\nexport type SmoMode = 'library' | 'application' | 'translate';\r\nexport type ConfigurationStringOption = 'language' | 'libraryUrl' | 'remoteScore';\r\n\r\nexport type ConfigurationNumberOption = 'demonPollTime' | 'idleRedrawTime';\r\n\r\nexport var ConfigurationStringOptions: ConfigurationStringOption[] = ['language', 'libraryUrl', 'remoteScore'];\r\n\r\nexport var ConfigurationNumberOptions: ConfigurationNumberOption[] = ['demonPollTime', 'idleRedrawTime'];\r\n\r\n/**\r\n * Application configuration parameters, can be referenced by the running application or changed\r\n * @category SuiApplication\r\n */\r\nexport interface SmoConfigurationParams {\r\n mode: SmoMode;\r\n smoPath?: string;\r\n language: string;\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n scoreDomContainer: string | HTMLElement;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number; // how often we poll the score to see if it changed\r\n idleRedrawTime: number;\r\n ribbonLayout?: RibbonLayout;\r\n buttonDefinition?: ButtonDefinition[];\r\n audioAnimation: SuiAudioAnimationParams;\r\n}\r\n\r\n/**\r\n * Configures smoosic library or application. It is a union of UI, rendering and application configuration parameters\r\n * @param mode - score mode `'library' | 'application' | 'translate'`\r\n * Library mode starts the view but not the UI. application mode starts the UI and expects UI parameters.\r\n * translation mode is the translation editor, for creating translations for dialog/menu components\r\n * @param language - startup language\r\n * @param initialScore? - the library score JSON, if you are loading from a JSON string, or a SmoScore object\r\n * @param remoteScore? - path to a remote score, if loading from an URL\r\n * @param scoreDomContainer - the parent of the svg container (required)\r\n * @param leftControls - the location of the vertical button control, applies if mode is 'application'\r\n * @param topControls - the location of the horizontal button control, applies if mode is 'application'\r\n * @param libraryUrl - loader URL for Smo libraries, applies if application mode\r\n * @param demonPollTime - how often we poll the score to see if it's changed\r\n * @param idleRedrawTime - how often the entire score re-renders\r\n * @category SuiApplication\r\n */\r\n export class SmoConfiguration implements SmoRenderConfiguration, SmoUiConfiguration {\r\n mode: SmoMode;\r\n language: string = '';\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n scoreDomContainer: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number = 0; // how often we poll the score to see if it changed\r\n idleRedrawTime: number = 0;\r\n keys?: KeyBindingConfiguration;\r\n eventHandler?: ModalEventHandler;\r\n ribbonLayout: RibbonLayout;\r\n audioAnimation: SuiAudioAnimationParams;\r\n buttonDefinition: ButtonDefinition[];\r\n\r\n static get defaults(): SmoConfiguration {\r\n return {\r\n mode: 'application',\r\n language: 'en',\r\n scoreDomContainer: 'boo',\r\n libraryUrl: 'https://aarondavidnewman.github.io/Smoosic/release/library/links/smoLibrary.json',\r\n demonPollTime: 50, // how often we poll the score to see if it changed\r\n idleRedrawTime: 1000, // maximum time between score modification and render\r\n ribbonLayout: defaultRibbonLayout.ribbons,\r\n buttonDefinition: defaultRibbonLayout.ribbonButtons,\r\n audioAnimation: {\r\n audioAnimationHandler: defaultAudioAnimationHandler,\r\n clearAudioAnimationHandler: defaultClearAudioAnimationHandler\r\n }\r\n };\r\n }\r\n static get keyBindingDefaults(): KeyBindingConfiguration {\r\n const editorKeys = defaultEditorKeys.keys;\r\n const trackerKeys = defaultTrackerKeys.keys;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return { editorKeys, trackerKeys };\r\n }\r\n constructor(params: Partial) {\r\n const defs = SmoConfiguration.defaults;\r\n ConfigurationStringOptions.forEach((param) => {\r\n const sp: string | undefined = params[param] ?? defs[param];\r\n this[param] = sp ?? '';\r\n });\r\n this.scoreDomContainer = params.scoreDomContainer ?? defs.scoreDomContainer;\r\n this.initialScore = params.initialScore ?? undefined;\r\n ConfigurationNumberOptions.forEach((param) => {\r\n this[param] = params[param] ?? defs[param];\r\n });\r\n this.mode = params.mode ?? defs.mode;\r\n if (this.mode === 'application') {\r\n this.leftControls = params.leftControls;\r\n this.topControls = params.topControls;\r\n }\r\n this.ribbonLayout = params.ribbonLayout ? params.ribbonLayout: defaultRibbonLayout.ribbons;\r\n this.buttonDefinition = params.buttonDefinition ? params.buttonDefinition : defaultRibbonLayout.ribbonButtons;\r\n if (!params.ribbonLayout) {\r\n this.ribbonLayout = defaultRibbonLayout.ribbons;\r\n }\r\n if (!params.buttonDefinition) {\r\n this.buttonDefinition = defaultRibbonLayout.ribbonButtons;\r\n }\r\n if (!params.audioAnimation) {\r\n this.audioAnimation = SmoConfiguration.defaults.audioAnimation;\r\n } else {\r\n this.audioAnimation = params.audioAnimation;\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom } from '../common/htmlHelpers';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { SuiPiano } from '../render/sui/piano';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiDom {\r\n static splash(config: SmoConfiguration) {\r\n var b: any = buildDom;\r\n var logoPath = '../styles/images/logo.png';\r\n var r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', logoPath).classes('splash-logo').attr('width', '300px').attr('height', '300px'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('div').classes('splash-div')\r\n .append(b('span').classes('splash-title').text('Sm'))\r\n .append(b('span').classes('splash-shine').text('ooooooooo'))\r\n .append(b('span').classes('splash-title').text('sic')));\r\n $('body').append(r.dom());\r\n $('body').addClass('splashScreen modal');\r\n setTimeout(function () {\r\n $('body').removeClass('splashScreen modal');\r\n }, 1000);\r\n }\r\n\r\n static createUiDom(uiDomContainer: HTMLElement | string | undefined) {\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n if (typeof(uiDomContainer) === 'string') {\r\n uiDomContainer = document.getElementById(uiDomContainer) ?? undefined;\r\n }\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n var b = buildDom;\r\n var r = b('div').classes('dom-container')\r\n .append(b('div').classes('workspace language-dir').attr('dir', 'ltr') \r\n .append(b('div').classes('control-bar')\r\n .append(b('div').classes('titleText').text('Smoosic'))\r\n .append(b('div').classes('piano-container')\r\n .append(b('div').classes('key-left-ctrl'))\r\n .append(b('div').classes('piano-keys'))\r\n .append(b('div').classes('key-right-ctrl')))\r\n .append(b('div').classes('controls-top').attr('id','controls-top')))\r\n .append(b('div').classes('media')\r\n .append(b('div').classes('controls-left').attr('id','controls-left'))\r\n ));\r\n \r\n uiDomContainer.append(r.dom()[0]);\r\n const scrollRegion = document.createElement('div');\r\n $(scrollRegion).attr('id', 'smo-scroll-region').addClass('musicRelief');\r\n $('.dom-container .media').append(scrollRegion);\r\n var pianoDom = $('.piano-keys')[0];\r\n var svg = document.createElementNS(SvgHelpers.namespace, 'svg');\r\n svg.id = 'piano-svg';\r\n svg.setAttributeNS('', 'width', '' + SuiPiano.owidth * SuiPiano.dimensions.octaves);\r\n svg.setAttributeNS('', 'height', '' + SuiPiano.dimensions.wheight);\r\n svg.setAttributeNS('', 'viewBox', '0 0 ' + SuiPiano.owidth * SuiPiano.dimensions.octaves + ' ' + SuiPiano.dimensions.wheight);\r\n pianoDom.appendChild(svg);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { KeyEvent } from '../smo/data/common';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiPiano } from '../render/sui/piano'\r\nimport { SuiHelp } from '../ui/help';\r\nimport { CompleteNotifier, ModalComponent } from '../ui/common';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { defaultEditorKeys } from '../ui/keyBindings/default/editorKeys';\r\nimport { defaultTrackerKeys } from '../ui/keyBindings/default/trackerKeys';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource, EventHandler } from '../ui/eventSource';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { KeyBinding, ModalEventHandler } from './common';\r\nimport { ModifierTab } from '../smo/xform/selections';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { SmoConfiguration } from './configuration';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Handle keyboard/mouse events, and pass them to the renderer and other UI elements.\r\n */\r\nexport interface EventHandlerParams {\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n tracker: SuiTracker,\r\n keyCommands: SuiKeyCommands,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier,\r\n keyBindings: KeyBinding[],\r\n config: SmoConfiguration\r\n}\r\n/**\r\n * this is the default keyboard/mouse handler for smoosic in application mode.\r\n * It diverts key events to tracker or key commmands as appropriate, and mouse events to \r\n * tracker. Modal elements take this control away temporarily.\r\n * \r\n * It also handles some global events such as window resize and scroll of the music region.\r\n * @category SuiApplication\r\n*/\r\nexport class SuiEventHandler implements ModalEventHandler {\r\n static reentry: boolean = false;\r\n static keyboardUi: Qwerty;\r\n static showQwerty() {\r\n SuiEventHandler.keyboardUi = Qwerty;\r\n Qwerty.displayKb();\r\n }\r\n static instance: SuiEventHandler;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n tracker: SuiTracker;\r\n keyBind: KeyBinding[];\r\n completeNotifier: CompleteNotifier;\r\n keyCommands: SuiKeyCommands;\r\n resizing: boolean = false;\r\n undoStatus: number = 0;\r\n trackScrolling: boolean = false;\r\n config: SmoConfiguration;\r\n keyHandlerObj: any = null;\r\n menus: SuiMenuManager;\r\n piano: SuiPiano | null = null;\r\n exhandler: SuiExceptionHandler; \r\n constructor(params: EventHandlerParams) {\r\n SuiEventHandler.instance = this;\r\n\r\n this.view = params.view;\r\n this.config = params.config;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n this.tracker = params.tracker; // needed for key event handling\r\n this.keyBind = params.keyBindings;\r\n this.keyCommands = params.keyCommands;\r\n this.keyCommands.view = this.view;\r\n this.resizing = false;\r\n this.undoStatus = 0;\r\n this.trackScrolling = false;\r\n this.keyHandlerObj = null;\r\n // create global exception instance\r\n this.exhandler = new SuiExceptionHandler(this);\r\n this.bindEvents();\r\n this.bindResize();\r\n this.createPiano();\r\n }\r\n\r\n static get scrollable() {\r\n return '.musicRelief';\r\n }\r\n\r\n handleScrollEvent() {\r\n const self = this;\r\n if (self.trackScrolling) {\r\n return;\r\n }\r\n self.trackScrolling = true;\r\n setTimeout(function () {\r\n try {\r\n // wait until redraw is done to track scroll events.\r\n self.trackScrolling = false;\r\n // Thisi s a WIP...\r\n self.view.tracker.scroller.handleScroll($(SuiEventHandler.scrollable)[0].scrollLeft, $(SuiEventHandler.scrollable)[0].scrollTop);\r\n } catch (e) {\r\n SuiExceptionHandler.instance.exceptionHandler(e);\r\n }\r\n }, 500);\r\n }\r\n\r\n createPiano() {\r\n this.piano = new SuiPiano(this.view);\r\n }\r\n resizeEvent() {\r\n var self = this;\r\n if (this.resizing) {\r\n return;\r\n }\r\n if (!this.piano) {\r\n return;\r\n }\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n this.resizing = true;\r\n setTimeout(function () {\r\n console.log('resizing');\r\n self.resizing = false;\r\n self.piano!.handleResize();\r\n self.view.refreshViewport();\r\n }, 1);\r\n }\r\n\r\n createModifierDialog(modifierSelection: ModifierTab) {\r\n var parameters = {\r\n modifier: modifierSelection.modifier,\r\n view: this.view, eventSource: this.eventSource,\r\n completeNotifier: this.completeNotifier, keyCommands: this.keyCommands, \r\n ctor: '', // filled in by the factory\r\n tracker: this.tracker,\r\n startPromise: null,\r\n id: 'modifier-dialog',\r\n config: this.config\r\n }\r\n return SuiModifierDialogFactory.createModifierDialog(modifierSelection.modifier, parameters);\r\n }\r\n\r\n // If the user has selected a modifier via the mouse/touch, bring up mod dialog\r\n // for that modifier\r\n trackerModifierSelect(ev: KeyEvent) {\r\n var modSelection = this.view.tracker.getSelectedModifier();\r\n if (modSelection) {\r\n var dialog = this.createModifierDialog(modSelection);\r\n if (dialog) {\r\n // this.view.tracker.selectSuggestion(ev);\r\n return;\r\n // this.unbindKeyboardForModal(dialog);\r\n } else {\r\n this.view.tracker.advanceModifierSelection(this.view.score, ev);\r\n }\r\n } else {\r\n this.view.tracker.selectSuggestion(this.view.score, ev);\r\n }\r\n return;\r\n }\r\n\r\n // ### bindResize\r\n // This handles both resizing of the music area (scrolling) and resizing of the window.\r\n // The latter results in a redraw, the former just resets the client/logical map of elements\r\n // in the tracker.\r\n bindResize() {\r\n const self = this;\r\n const el = $(SuiEventHandler.scrollable)[0];\r\n // unit test programs don't have resize html\r\n if (!el) {\r\n return;\r\n }\r\n window.addEventListener('resize', function () {\r\n self.resizeEvent();\r\n });\r\n\r\n let scrollCallback = () => {\r\n self.handleScrollEvent();\r\n };\r\n el.onscroll = scrollCallback;\r\n }\r\n\r\n\r\n // ### renderElement\r\n // return render element that is the DOM parent of the svg\r\n get renderElement() {\r\n return this.view.renderer.renderElement;\r\n }\r\n\r\n // ## editorKeyBindingDefaults\r\n // ## Description:\r\n // execute a simple command on the editor, based on a keystroke.\r\n static get editorKeyBindingDefaults() {\r\n return defaultEditorKeys.keys;\r\n }\r\n\r\n // ## trackerKeyBindingDefaults\r\n // ### Description:\r\n // Key bindings for the tracker. The tracker is the 'cursor' in the music\r\n // that lets you select and edit notes.\r\n static get trackerKeyBindingDefaults() {\r\n return defaultTrackerKeys.keys;\r\n }\r\n helpControls() {\r\n var self = this;\r\n var rebind = function () {\r\n self.bindEvents();\r\n }\r\n }\r\n menuHelp() {\r\n SuiHelp.displayHelp();\r\n }\r\n\r\n evKey(evdata: any) {\r\n if ($('body').hasClass('translation-mode')) {\r\n return;\r\n }\r\n\r\n console.log(\"KeyboardEvent: key='\" + evdata.key + \"' | code='\" +\r\n evdata.code + \"'\"\r\n + \" shift='\" + evdata.shiftKey + \"' control='\" + evdata.ctrlKey + \"'\" + \" alt='\" + evdata.altKey + \"'\");\r\n evdata.preventDefault();\r\n\r\n if (SuiEventHandler.keyboardUi) {\r\n Qwerty.handleKeyEvent(evdata);\r\n }\r\n const dataCopy = SuiTracker.serializeEvent(evdata);\r\n this.view.renderer.updatePromise().then(() => {\r\n if (dataCopy.key == '?') {\r\n SuiHelp.displayHelp();\r\n }\r\n\r\n if (dataCopy.key == '/') {\r\n // set up menu DOM.\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n }\r\n\r\n if (dataCopy.key == 'Enter') {\r\n this.trackerModifierSelect(dataCopy);\r\n }\r\n\r\n var binding: KeyBinding | undefined = this.keyBind.find((ev: KeyBinding) =>\r\n ev.event === 'keydown' && ev.key === dataCopy.key &&\r\n ev.ctrlKey === dataCopy.ctrlKey &&\r\n ev.altKey === dataCopy.altKey && dataCopy.shiftKey === ev.shiftKey);\r\n\r\n if (binding) {\r\n try {\r\n if (binding.module === 'tracker') {\r\n (this.tracker as any)[binding.action](this.view.score, dataCopy);\r\n } else {\r\n (this.keyCommands as any)[binding.action](dataCopy);\r\n }\r\n } catch (e) {\r\n if (typeof (e) === 'string') {\r\n console.error(e);\r\n }\r\n this.exhandler.exceptionHandler(e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n mouseMove(ev: any) {\r\n this.view.tracker.intersectingArtifact(SvgHelpers.smoBox({\r\n x: ev.clientX,\r\n y: ev.clientY\r\n }));\r\n }\r\n\r\n mouseClick(ev: any) {\r\n const dataCopy = SuiTracker.serializeEvent(ev);\r\n this.view.renderer.updatePromise().then(() => {\r\n this.view.tracker.selectSuggestion(this.view.score, dataCopy);\r\n var modifier = this.view.tracker.getSelectedModifier();\r\n if (modifier) {\r\n this.createModifierDialog(modifier);\r\n }\r\n });\r\n }\r\n bindEvents() {\r\n const self = this;\r\n const tracker = this.view.tracker;\r\n $('body').off('forceScrollEvent').on('forceScrollEvent', function () {\r\n self.handleScrollEvent();\r\n });\r\n $('body').off('forceResizeEvent').on('forceResizeEvent', function () {\r\n self.resizeEvent();\r\n });\r\n this.helpControls();\r\n }\r\n}\r\n","import { SuiApplication } from \"./application\";\r\nimport { SmoConfigurationParams } from \"./configuration\";\r\nimport { SmoToVex } from '../render/vex/toVex';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SmoScore } from '../smo/data/score';\r\nexport interface ScoreToRender {\r\n title: string, path: string, pages: number[]\r\n}\r\nconst filesToRender: Record = {\r\n 'PreciousLord': { \r\n title: 'PreciousLord', \r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json',\r\n pages: [0]\r\n }, 'BachWTC': {\r\n title: 'BachWTC',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachWTC-3.json',\r\n pages: [0, 1, 2]\r\n }, 'BachInvention': {\r\n title: 'BachInv1',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachInvention.json',\r\n pages: [1]\r\n }, 'Gnossienne3': {\r\n title: 'Gnossienne3',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Gnossienne3-3.json',\r\n pages: [0, 1]\r\n }, 'GFWMessiah-I-2': {\r\n title: 'GFWMessiah-I-2',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/messiah/Messiah-I-2.json',\r\n pages: [0, 1]\r\n }, 'Joplin': {\r\n title: 'Joplin',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Joplin-Entertainer.json',\r\n pages: [0, 1, 2]\r\n }, 'Plena': {\r\n title: 'Plena',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Plena.json',\r\n pages: [2]\r\n }, 'Postillionlied': {\r\n title: 'Postillion Lied',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Postillionlied.json',\r\n pages: [0, 1, 2]\r\n }, 'Solovey': {\r\n title: 'Solovey',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Solovey.json',\r\n pages: [0, 1]\r\n }, 'Bilongo': {\r\n title: 'Bilongo',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Bilongo-Mandinga.json',\r\n pages: [7]\r\n }, 'Yama': {\r\n title: 'Yama',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/Yama2.json',\r\n pages: [1]\r\n }\r\n};\r\ndeclare var $: any;\r\ndeclare var JSZip: any;\r\nconst addFileLink = (filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') => {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\nexport async function renderVexTests(config: Partial) {\r\n const zipName = 'output.zip';\r\n const zipFile = new JSZip();\r\n const application = await SuiApplication.configure(config);\r\n const view = application.view;\r\n if (!view) {\r\n return;\r\n }\r\n const fileKeys = Object.keys(filesToRender);\r\n for (var i = 0; i < fileKeys.length; ++i) {\r\n const fileInfo = filesToRender[fileKeys[i]];\r\n const path = fileInfo.path;\r\n const loader = new SuiXhrLoader(path);\r\n const scoreJson = await loader.loadAsync();\r\n const score = SmoScore.deserialize(scoreJson as string); \r\n await view.changeScore(score);\r\n fileInfo.pages.forEach((page) => {\r\n const vexText = SmoToVex.convert(view.score, { div: 'smoo', page })\r\n const fileName = `${fileInfo.title}-${page}.js`;\r\n zipFile.file(fileName, vexText); \r\n });\r\n }\r\n const blob = await zipFile.generateAsync({ type: 'blob' });\r\n const element = document.getElementById('remoteLink');\r\n addFileLink(zipName, blob, element);\r\n $('#remoteLink a')[0].click();\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { createAndDisplayDialog } from '../ui/dialogs/dialog';\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SmoArticulation } from '../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { KeyCommandParams } from './common';\r\nimport { CompleteNotifier } from '../ui/common';\r\nimport { PitchLetter, IsPitchLetter, KeyEvent } from '../smo/data/common';\r\n\r\n/**\r\n * KeyCommands object handles key events and converts them into commands, updating the score and\r\n * display\r\n * @category SuiApplication\r\n * */\r\nexport class SuiKeyCommands {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean = false;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n constructor(params: KeyCommandParams) {\r\n this.slashMode = false;\r\n this.view = params.view;\r\n this.tracker = params.view.tracker;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n }\r\n\r\n tempoDialog() {\r\n const tempo = this.tracker.selections[0].measure.getTempo();\r\n createAndDisplayDialog(SuiTempoDialog,\r\n {\r\n id: 'tempoDialog',\r\n ctor: 'SuiTempoDialog',\r\n completeNotifier: this.completeNotifier,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n startPromise: null,\r\n modifier: tempo\r\n }\r\n );\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n undo() {\r\n this.view.undo();\r\n }\r\n\r\n copy() {\r\n this.view.copy();\r\n }\r\n paste() {\r\n this.view.paste();\r\n }\r\n toggleBeamGroup() {\r\n this.view.toggleBeamGroup();\r\n }\r\n\r\n beamSelections() {\r\n this.view.beamSelections();\r\n }\r\n toggleBeamDirection() {\r\n this.view.toggleBeamDirection();\r\n }\r\n\r\n collapseChord() {\r\n this.view.collapseChord();\r\n }\r\n\r\n togglePlayer() {\r\n if (SuiAudioPlayer.playing) {\r\n this.stopPlayer();\r\n } else {\r\n this.playScore();\r\n }\r\n }\r\n playScore() {\r\n this.view.playFromSelection();\r\n }\r\n\r\n stopPlayer() {\r\n this.view.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n intervalAdd(interval: number, direction: number) {\r\n this.view.setInterval(direction * interval);\r\n }\r\n\r\n interval(keyEvent: KeyEvent) {\r\n // code='Digit3'\r\n var interval = parseInt(keyEvent.keyCode, 10) - 49; // 48 === '0', 0 indexed\r\n if (isNaN(interval) || interval < 1 || interval > 7) {\r\n return;\r\n }\r\n this.intervalAdd(interval, keyEvent.shiftKey ? -1 : 1);\r\n }\r\n\r\n transpose(offset: number) {\r\n this.view.transposeSelections(offset);\r\n }\r\n transposeDown() {\r\n this.transpose(-1);\r\n }\r\n transposeUp() {\r\n this.transpose(1);\r\n }\r\n upOctave() {\r\n this.transpose(12);\r\n }\r\n downOctave() {\r\n this.transpose(-12);\r\n }\r\n makeRest() {\r\n this.view.makeRest();\r\n }\r\n\r\n setPitchCommand(letter: PitchLetter) {\r\n this.view.setPitch(letter);\r\n }\r\n\r\n setPitch(keyEvent: KeyEvent) {\r\n const letter = keyEvent.key.toLowerCase();\r\n if (IsPitchLetter(letter)) {\r\n this.setPitchCommand(letter);\r\n }\r\n }\r\n\r\n dotDuration() {\r\n this.view.batchDurationOperation('dotDuration');\r\n }\r\n\r\n undotDuration() {\r\n this.view.batchDurationOperation('undotDuration');\r\n }\r\n\r\n doubleDuration() {\r\n this.view.batchDurationOperation('doubleDuration');\r\n }\r\n\r\n halveDuration() {\r\n this.view.batchDurationOperation('halveDuration');\r\n }\r\n\r\n addMeasure(keyEvent: KeyEvent) {\r\n this.view.addMeasure(keyEvent.shiftKey);\r\n }\r\n deleteNote() {\r\n this.view.deleteNote();\r\n }\r\n\r\n toggleCourtesyAccidental() {\r\n this.view.toggleCourtesyAccidentals();\r\n }\r\n toggleEnharmonic() {\r\n this.view.toggleEnharmonic();\r\n }\r\n\r\n makeTupletCommand(numNotes: number) {\r\n this.view.makeTuplet(numNotes);\r\n }\r\n makeTuplet(keyEvent: KeyEvent) {\r\n const numNotes = parseInt(keyEvent.key, 10);\r\n this.makeTupletCommand(numNotes);\r\n }\r\n\r\n unmakeTuplet() {\r\n this.view.unmakeTuplet();\r\n }\r\n setNoteHead() {\r\n this.view.setNoteHead('x2');\r\n }\r\n removeGraceNote() {\r\n this.view.removeGraceNote();\r\n }\r\n addGraceNote() {\r\n this.view.addGraceNote();\r\n }\r\n slashGraceNotes() {\r\n this.view.slashGraceNotes();\r\n }\r\n\r\n toggleArticulationCommand(articulation: string, ctor: string) {\r\n this.view.toggleArticulation(articulation, ctor);\r\n }\r\n addRemoveAccent() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.accent, 'SmoArticulation');\r\n }\r\n addRemoveTenuto() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.tenuto, 'SmoArticulation');\r\n }\r\n addRemoveStaccato() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.staccato, 'SmoArticulation');\r\n }\r\n addRemoveMarcato() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.marcato, 'SmoArticulation');\r\n }\r\n addRemovePizzicato() {\r\n this.toggleArticulationCommand(SmoArticulation.articulations.pizzicato, 'SmoArticulation');\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var $: any;\r\n/**\r\n* returns an object that lets you build a DOM in a somewhat readable way.\r\n* \r\n* ## Usage\r\n* ``` javascript\r\n* var b = buildDom;\r\n* var r =\r\n* b('tr').classes('jsSharingMember').data('entitykey', key).data('name', name).data('entitytype', entityType).append(\r\n* b('td').classes('noSideBorderRight').append(\r\n* ...\r\n* $(parent).append(r.dom());\r\n* ``` \r\n* Don't forget the '.dom()' ! That is the actual jquery element object\r\n* @returns \r\n**/\r\nexport class DomBuilder {\r\n e: any;\r\n constructor(el: any) {\r\n this.e = $('<' + el + '/>');\r\n }\r\n classes(cl: any) {\r\n $(this.e).addClass(cl);\r\n return this;\r\n }\r\n html(value: any) {\r\n $(this.e).html(value);\r\n return this;\r\n }\r\n data(name: string, value: string) {\r\n $(this.e).attr('data-' + name, value);\r\n return this;\r\n }\r\n attr(name: string, value: string) {\r\n $(this.e).attr(name, value);\r\n return this;\r\n }\r\n prop(name: string, value: boolean) {\r\n $(this.e).prop(name, value);\r\n return this;\r\n }\r\n css(name: string, value: string) {\r\n $(this.e).css(name, value);\r\n return this;\r\n }\r\n append(el: any) {\r\n $(this.e).append(el.e);\r\n return this;\r\n }\r\n text(tx: any) {\r\n $(this.e).append(document.createTextNode(tx));\r\n return this;\r\n }\r\n dom() {\r\n return this.e;\r\n }\r\n}\r\n\r\nexport function buildDom(e: any) {\r\n return new DomBuilder(e);\r\n}\r\n\r\nexport function focusableElements(): string[] {\r\n return ['a', 'input', 'select', 'textarea', 'button', 'li[tabindex]', 'div[tabindex]'];\r\n}\r\n\r\nexport function addFileLink(filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\n\r\nexport class InputTrapper {\r\n selector: any;\r\n parent: any;\r\n id: any;\r\n parentId: any;\r\n modalInputs: any[];\r\n disabledInputs: any[];\r\n siblingInputs: any[];\r\n constructor(selector: any) {\r\n this.selector = selector;\r\n this.modalInputs = [];\r\n this.disabledInputs = [];\r\n this.siblingInputs = [];\r\n this.parent = $(this.selector);\r\n this.id = $(this.parent).attr('id');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n var idstr = Math.round(Math.random() * (999999 - 1) + 1);\r\n if (!this.id) {\r\n $(this.parent).attr('id', idstr + '-element');\r\n this.id = $(this.parent).attr('id');\r\n }\r\n if (!this.parentId) {\r\n $(this.parent).parent().attr('id', idstr + '-parent');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n }\r\n\r\n }\r\n trap(this: any) {\r\n // aria-hide peers of dialog and peers of parent that are not the parent.\r\n var peers = $(this.parent).parent().children().toArray();\r\n\r\n peers.forEach((node: any) => {\r\n var ptag: any = $(node)[0].tagName;\r\n if (ptag === 'SCRIPT' || ptag === 'LINK' || ptag === 'STYLE') {\r\n ;\r\n } else if ($(node).attr('id') === this.parentId ||\r\n $(node).attr('id') === this.id || \r\n $(node).hasClass('helpDialog')) { // help dialog can be shown with modal dialog\r\n ;\r\n } else {\r\n var hidden = $(node).attr('aria-hidden');\r\n if (!hidden || hidden != 'true') {\r\n $(node).attr('aria-hidden', 'true');\r\n this.siblingInputs.push(node);\r\n }\r\n }\r\n });\r\n focusableElements().forEach((etype) => {\r\n var elements = $(etype).toArray();\r\n\r\n elements.forEach((element: any) => {\r\n var tagName = $(element)[0].tagName;\r\n if ($(element).attr('id') === this.id) {\r\n ;\r\n } else if ($(element).closest('.helpDialog').length) {\r\n ;\r\n } else if ($(element).prop('disabled')) {\r\n ;\r\n } else if ($(element).hasClass('hide')) {\r\n ;\r\n } else if ($(element).closest(this.selector).length) {\r\n // inside\r\n this.modalInputs.push(element);\r\n } else if ((tagName === 'A' || tagName === 'DIV' || tagName === 'LI') && $(element).attr('tabIndex') === '-1') {\r\n ;\r\n } else {\r\n this.disabledInputs.push(element);\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '-1');\r\n } else {\r\n $(element).prop('disabled', true);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n close() {\r\n this.disabledInputs.forEach(function (element: any) {\r\n var tagName = $(element)[0].tagName;\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '0');\r\n } else {\r\n $(element).prop('disabled', false);\r\n }\r\n });\r\n this.siblingInputs.forEach((el: any) => {\r\n $(el).removeAttr('aria-hidden');\r\n });\r\n } \r\n}\r\nexport function closeDialogPromise(): Promise {\r\n return new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', function () {\r\n resolve();\r\n });\r\n });\r\n}\r\n/**\r\n * Extract an HTMLElement from a Jquery id, DOM element ID, or HTMLELement. If\r\n * an HTMLElement can't be created, return null\r\n * @param selector\r\n * @returns HTMLElement\r\n */\r\nexport function getDomContainer(selector: HTMLElement | string): HTMLElement | undefined {\r\n if (typeof(selector) === 'string') {\r\n if (selector[0] === '#') {\r\n const el: any = $(selector)[0];\r\n if (!(el instanceof HTMLElement)) {\r\n return undefined;\r\n }\r\n return el;\r\n } else {\r\n const el = document.getElementById(selector);\r\n if (!el) {\r\n return undefined;\r\n }\r\n return el;\r\n }\r\n } else if (selector instanceof HTMLElement) {\r\n return selector;\r\n } else { \r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Create a top-level HTML element for modal containers - dialogs etc.\r\n * from a jquery selector, or just return same if it exists\r\n * @param selector \r\n * @returns \r\n */\r\nexport function createTopDomContainer(selector: string | HTMLElement, elementType?: string): HTMLElement {\r\n const container = $(selector);\r\n if (!elementType) {\r\n elementType = 'div';\r\n }\r\n if (container.length > 0) {\r\n return container[0] as HTMLElement;\r\n } else {\r\n const ndiv = document.createElement(elementType);\r\n if (typeof(selector) === 'string') {\r\n const cl = (selector[0] === '.' || selector[0] === '#') ? selector.substring(1) : selector;\r\n $(ndiv).addClass(cl);\r\n if (selector[0] === '#') {\r\n $(ndiv).attr('id', selector.substring(1));\r\n }\r\n }\r\n $('body').append(ndiv);\r\n return $(ndiv)[0] as HTMLElement;\r\n }\r\n}\r\n/**\r\n * \r\n * @param parameters \r\n * @returns \r\n */\r\nexport function draggable(parameters: any) {\r\n return new Draggable(parameters);\r\n}\r\n\r\nexport class Draggable {\r\n parent: any;\r\n handle: any;\r\n animeClass: any;\r\n dragParent: any;\r\n domOffset: any;\r\n svg: any;\r\n width: number;\r\n height: number;\r\n lastX: number;\r\n lastY: number;\r\n cb: any;\r\n moveParent: boolean;\r\n dragging: boolean = false;\r\n\r\n constructor(parameters: any) {\r\n this.parent = parameters.parent;\r\n this.handle = parameters.handle;\r\n this.animeClass = parameters.animateDiv;\r\n this.dragParent = parameters.dragParent;\r\n\r\n // TODO: make '.dom-container' a part of the configuration\r\n this.domOffset = $('.dom-container').offset();\r\n\r\n this.svg = parameters['svg'];\r\n this.width = $(this.parent).outerWidth();\r\n this.height = $(this.parent).outerHeight();\r\n this.lastX = $(this.handle).offset().left - this.domOffset.left;\r\n this.lastY = $(this.handle).offset().top - this.domOffset.top;\r\n this.cb = parameters.cb;\r\n this.moveParent = parameters.moveParent;\r\n\r\n var self = this;\r\n\r\n // $('.itemMenu input[name=\"itemTitle\"]').css('width','60%');\r\n $(this.handle)\r\n .off('mousedown').on('mousedown',\r\n function (e: any) {\r\n self.mousedown(e);\r\n });\r\n $(document)\r\n .on('mousemove',\r\n function (e: any) {\r\n self.mousemove(e);\r\n\r\n })\r\n .on('mouseup',\r\n function (e: any) {\r\n self.mouseup(e);\r\n });\r\n }\r\n _animate(e: any) {\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n $(this.animeClass).css('left', this.lastX - this.domOffset.left);\r\n $(this.animeClass).css('top', this.lastY - this.domOffset.top);\r\n\r\n if (this.dragParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n }\r\n mousedown(e: any) {\r\n if (!this.dragging) {\r\n $(this.animeClass).removeClass('hide');\r\n\r\n $(this.animeClass).css('width', this.width);\r\n $(this.animeClass).css('height', this.height);\r\n }\r\n\r\n this.dragging = true;\r\n this._animate(e);\r\n }\r\n enddrag() {\r\n this.lastX = Math.max(this.lastX - this.domOffset.left, 0);\r\n this.lastY = Math.max(this.lastY - this.domOffset.top, 0);\r\n if (this.moveParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n $(this.animeClass).addClass('hide');\r\n this.cb(this.lastX, this.lastY);\r\n }\r\n\r\n mouseup(e: any) {\r\n // stop resizing\r\n if (this.dragging) {\r\n this.dragging = false;\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n\r\n this.enddrag();\r\n }\r\n }\r\n mousemove(e: any) {\r\n // we don't want to do anything if we aren't resizing.\r\n if (!this.dragging)\r\n return;\r\n this._animate(e);\r\n }\r\n}\r\n","// Credit for Midi functionality goes to:\r\n// https://github.com/grimmdude/MidiWriterJS\r\nimport { SmoMusic } from '../smo/data/music';\r\nexport var _MidiWriter = function() {\r\n/**\r\n * MIDI file format constants.\r\n * @return {Constants}\r\n */\r\nvar Constants = {\r\n VERSION: 1,\r\n HEADER_CHUNK_TYPE: [0x4d, 0x54, 0x68, 0x64],\r\n // Mthd\r\n HEADER_CHUNK_LENGTH: [0x00, 0x00, 0x00, 0x06],\r\n // Header size for SMF\r\n HEADER_CHUNK_FORMAT0: [0x00, 0x00],\r\n // Midi Type 0 id\r\n HEADER_CHUNK_FORMAT1: [0x00, 0x01],\r\n // Midi Type 1 id\r\n HEADER_CHUNK_DIVISION: [0x00, 0x80],\r\n // Defaults to 128 ticks per beat\r\n TRACK_CHUNK_TYPE: [0x4d, 0x54, 0x72, 0x6b],\r\n // MTrk,\r\n META_EVENT_ID: 0xFF,\r\n META_TEXT_ID: 0x01,\r\n META_COPYRIGHT_ID: 0x02,\r\n META_TRACK_NAME_ID: 0x03,\r\n META_INSTRUMENT_NAME_ID: 0x04,\r\n META_LYRIC_ID: 0x05,\r\n META_MARKER_ID: 0x06,\r\n META_CUE_POINT: 0x07,\r\n META_TEMPO_ID: 0x51,\r\n META_SMTPE_OFFSET: 0x54,\r\n META_TIME_SIGNATURE_ID: 0x58,\r\n META_KEY_SIGNATURE_ID: 0x59,\r\n META_END_OF_TRACK_ID: [0x2F, 0x00],\r\n CONTROLLER_CHANGE_STATUS: 0xB0,\r\n // includes channel number (0)\r\n PROGRAM_CHANGE_STATUS: 0xC0,\r\n // includes channel number (0)\r\n PITCH_BEND_STATUS: 0xE0 // includes channel number (0)\r\n};\r\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n\r\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\r\n _typeof = function (obj) {\r\n return typeof obj;\r\n };\r\n } else {\r\n _typeof = function (obj) {\r\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n };\r\n }\r\n\r\n return _typeof(obj);\r\n}\r\n\r\nfunction _classCallCheck(instance, Constructor) {\r\n if (!(instance instanceof Constructor)) {\r\n throw new TypeError(\"Cannot call a class as a function\");\r\n }\r\n}\r\n\r\nfunction _defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) descriptor.writable = true;\r\n Object.defineProperty(target, descriptor.key, descriptor);\r\n }\r\n}\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) {\r\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\r\n if (staticProps) _defineProperties(Constructor, staticProps);\r\n return Constructor;\r\n}\r\n\r\nfunction _inherits(subClass, superClass) {\r\n if (typeof superClass !== \"function\" && superClass !== null) {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n constructor: {\r\n value: subClass,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n if (superClass) _setPrototypeOf(subClass, superClass);\r\n}\r\n\r\nfunction _getPrototypeOf(o) {\r\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\r\n return o.__proto__ || Object.getPrototypeOf(o);\r\n };\r\n return _getPrototypeOf(o);\r\n}\r\n\r\nfunction _setPrototypeOf(o, p) {\r\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\r\n o.__proto__ = p;\r\n return o;\r\n };\r\n\r\n return _setPrototypeOf(o, p);\r\n}\r\n\r\nfunction _isNativeReflectConstruct() {\r\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\r\n if (Reflect.construct.sham) return false;\r\n if (typeof Proxy === \"function\") return true;\r\n\r\n try {\r\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction _construct(Parent, args, Class) {\r\n if (_isNativeReflectConstruct()) {\r\n _construct = Reflect.construct;\r\n } else {\r\n _construct = function _construct(Parent, args, Class) {\r\n var a = [null];\r\n a.push.apply(a, args);\r\n var Constructor = Function.bind.apply(Parent, a);\r\n var instance = new Constructor();\r\n if (Class) _setPrototypeOf(instance, Class.prototype);\r\n return instance;\r\n };\r\n }\r\n\r\n return _construct.apply(null, arguments);\r\n}\r\n\r\nfunction _isNativeFunction(fn) {\r\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\r\n}\r\n\r\nfunction _wrapNativeSuper(Class) {\r\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\r\n\r\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\r\n if (Class === null || !_isNativeFunction(Class)) return Class;\r\n\r\n if (typeof Class !== \"function\") {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n if (typeof _cache !== \"undefined\") {\r\n if (_cache.has(Class)) return _cache.get(Class);\r\n\r\n _cache.set(Class, Wrapper);\r\n }\r\n\r\n function Wrapper() {\r\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\r\n }\r\n\r\n Wrapper.prototype = Object.create(Class.prototype, {\r\n constructor: {\r\n value: Wrapper,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n return _setPrototypeOf(Wrapper, Class);\r\n };\r\n\r\n return _wrapNativeSuper(Class);\r\n}\r\n\r\nfunction _wrapRegExp(re, groups) {\r\n _wrapRegExp = function (re, groups) {\r\n return new BabelRegExp(re, undefined, groups);\r\n };\r\n\r\n var _RegExp = _wrapNativeSuper(RegExp);\r\n\r\n var _super = RegExp.prototype;\r\n\r\n var _groups = new WeakMap();\r\n\r\n function BabelRegExp(re, flags, groups) {\r\n var _this = _RegExp.call(this, re, flags);\r\n\r\n _groups.set(_this, groups || _groups.get(re));\r\n\r\n return _this;\r\n }\r\n\r\n _inherits(BabelRegExp, _RegExp);\r\n\r\n BabelRegExp.prototype.exec = function (str) {\r\n var result = _super.exec.call(this, str);\r\n\r\n if (result) result.groups = buildGroups(result, this);\r\n return result;\r\n };\r\n\r\n BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\r\n if (typeof substitution === \"string\") {\r\n var groups = _groups.get(this);\r\n\r\n return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\r\n return \"$\" + groups[name];\r\n }));\r\n } else if (typeof substitution === \"function\") {\r\n var _this = this;\r\n\r\n return _super[Symbol.replace].call(this, str, function () {\r\n var args = [];\r\n args.push.apply(args, arguments);\r\n\r\n if (typeof args[args.length - 1] !== \"object\") {\r\n args.push(buildGroups(args, _this));\r\n }\r\n\r\n return substitution.apply(this, args);\r\n });\r\n } else {\r\n return _super[Symbol.replace].call(this, str, substitution);\r\n }\r\n };\r\n\r\n function buildGroups(result, re) {\r\n var g = _groups.get(re);\r\n\r\n return Object.keys(g).reduce(function (groups, name) {\r\n groups[name] = result[g[name]];\r\n return groups;\r\n }, Object.create(null));\r\n }\r\n\r\n return _wrapRegExp.apply(this, arguments);\r\n}\r\n\r\n/**\r\n * Static utility functions used throughout the library.\r\n */\r\n\r\nvar Utils = /*#__PURE__*/function () {\r\n function Utils() {\r\n _classCallCheck(this, Utils);\r\n }\r\n\r\n _createClass(Utils, null, [{\r\n key: \"version\",\r\n value:\r\n /**\r\n * Gets MidiWriterJS version number.\r\n * @return {string}\r\n */\r\n function version() {\r\n return Constants.VERSION;\r\n }\r\n /**\r\n * Convert a string to an array of bytes\r\n * @param {string} string\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringToBytes\",\r\n value: function stringToBytes(string) {\r\n return string.split('').map(function (_char) {\r\n return _char.charCodeAt();\r\n });\r\n }\r\n /**\r\n * Checks if argument is a valid number.\r\n * @param {*} n - Value to check\r\n * @return {boolean}\r\n */\r\n\r\n }, {\r\n key: \"isNumeric\",\r\n value: function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n /**\r\n * Returns the correct MIDI number for the specified pitch.\r\n * Uses Tonal Midi - https://github.com/danigb/tonal/tree/master/packages/midi\r\n * @param {(string|number)} pitch - 'C#4' or midi note code\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPitch\",\r\n value: function getPitch(pitch) {\r\n return SmoMusic.midiPitchToMidiNumber(pitch);\r\n }\r\n /**\r\n * Translates number of ticks to MIDI timestamp format, returning an array of\r\n * hex strings with the time values. Midi has a very particular time to express time,\r\n * take a good look at the spec before ever touching this function.\r\n * Thanks to https://github.com/sergi/jsmidi\r\n *\r\n * @param {number} ticks - Number of ticks to be translated\r\n * @return {array} - Bytes that form the MIDI time value\r\n */\r\n\r\n }, {\r\n key: \"numberToVariableLength\",\r\n value: function numberToVariableLength(ticks) {\r\n ticks = Math.round(ticks);\r\n var buffer = ticks & 0x7F;\r\n\r\n while (ticks = ticks >> 7) {\r\n buffer <<= 8;\r\n buffer |= ticks & 0x7F | 0x80;\r\n }\r\n\r\n var bList = [];\r\n\r\n while (true) {\r\n bList.push(buffer & 0xff);\r\n if (buffer & 0x80) buffer >>= 8;else {\r\n break;\r\n }\r\n }\r\n\r\n return bList;\r\n }\r\n /**\r\n * Counts number of bytes in string\r\n * @param {string} s\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringByteCount\",\r\n value: function stringByteCount(s) {\r\n return encodeURI(s).split(/%..|./).length - 1;\r\n }\r\n /**\r\n * Get an int from an array of bytes.\r\n * @param {array} bytes\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"numberFromBytes\",\r\n value: function numberFromBytes(bytes) {\r\n var hex = '';\r\n var stringResult;\r\n bytes.forEach(function (_byte) {\r\n stringResult = _byte.toString(16); // ensure string is 2 chars\r\n\r\n if (stringResult.length == 1) stringResult = \"0\" + stringResult;\r\n hex += stringResult;\r\n });\r\n return parseInt(hex, 16);\r\n }\r\n /**\r\n * Takes a number and splits it up into an array of bytes. Can be padded by passing a number to bytesNeeded\r\n * @param {number} number\r\n * @param {number} bytesNeeded\r\n * @return {array} - Array of bytes\r\n */\r\n\r\n }, {\r\n key: \"numberToBytes\",\r\n value: function numberToBytes(number, bytesNeeded) {\r\n bytesNeeded = bytesNeeded || 1;\r\n var hexString = number.toString(16);\r\n\r\n if (hexString.length & 1) {\r\n // Make sure hex string is even number of chars\r\n hexString = '0' + hexString;\r\n } // Split hex string into an array of two char elements\r\n\r\n\r\n var hexArray = hexString.match(/.{2}/g); // Now parse them out as integers\r\n\r\n hexArray = hexArray.map(function (item) {\r\n return parseInt(item, 16);\r\n }); // Prepend empty bytes if we don't have enough\r\n\r\n if (hexArray.length < bytesNeeded) {\r\n while (bytesNeeded - hexArray.length > 0) {\r\n hexArray.unshift(0);\r\n }\r\n }\r\n\r\n return hexArray;\r\n }\r\n /**\r\n * Converts value to array if needed.\r\n * @param {string} value\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"toArray\",\r\n value: function toArray(value) {\r\n if (Array.isArray(value)) return value;\r\n return [value];\r\n }\r\n /**\r\n * Converts velocity to value 0-127\r\n * @param {number} velocity - Velocity value 1-100\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"convertVelocity\",\r\n value: function convertVelocity(velocity) {\r\n // Max passed value limited to 100\r\n velocity = velocity > 100 ? 100 : velocity;\r\n return Math.round(velocity / 100 * 127);\r\n }\r\n /**\r\n * Gets the total number of ticks of a specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {(string|array)} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getTickDuration\",\r\n value: function getTickDuration(duration) {\r\n if (Array.isArray(duration)) {\r\n // Recursively execute this method for each item in the array and return the sum of tick durations.\r\n return duration.map(function (value) {\r\n return Utils.getTickDuration(value);\r\n }).reduce(function (a, b) {\r\n return a + b;\r\n }, 0);\r\n }\r\n\r\n duration = duration.toString();\r\n\r\n if (duration.toLowerCase().charAt(0) === 't') {\r\n // If duration starts with 't' then the number that follows is an explicit tick count\r\n return parseInt(duration.substring(1));\r\n } // Need to apply duration here. Quarter note == Constants.HEADER_CHUNK_DIVISION\r\n\r\n\r\n var quarterTicks = Utils.numberFromBytes(Constants.HEADER_CHUNK_DIVISION);\r\n var tickDuration = quarterTicks * Utils.getDurationMultiplier(duration);\r\n return Utils.getRoundedIfClose(tickDuration);\r\n }\r\n /**\r\n * Due to rounding errors in JavaScript engines,\r\n * it's safe to round when we're very close to the actual tick number\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getRoundedIfClose\",\r\n value: function getRoundedIfClose(tick) {\r\n var roundedTick = Math.round(tick);\r\n return Math.abs(roundedTick - tick) < 0.000001 ? roundedTick : tick;\r\n }\r\n /**\r\n * Due to low precision of MIDI,\r\n * we need to keep track of rounding errors in deltas.\r\n * This function will calculate the rounding error for a given duration.\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPrecisionLoss\",\r\n value: function getPrecisionLoss(tick) {\r\n var roundedTick = Math.round(tick);\r\n return roundedTick - tick;\r\n }\r\n /**\r\n * Gets what to multiple ticks/quarter note by to get the specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {string} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getDurationMultiplier\",\r\n value: function getDurationMultiplier(duration) {\r\n // Need to apply duration here.\r\n // Quarter note == Constants.HEADER_CHUNK_DIVISION ticks.\r\n if (duration === '0') return 0;\r\n var match = duration.match( /*#__PURE__*/_wrapRegExp(/^(d+)?([0-9]+)(?:t([0-9]*))?/, {\r\n dotted: 1,\r\n base: 2,\r\n tuplet: 3\r\n }));\r\n\r\n if (match) {\r\n var base = Number(match.groups.base); // 1 or any power of two:\r\n\r\n var isValidBase = base === 1 || (base & base - 1) === 0;\r\n\r\n if (isValidBase) {\r\n // how much faster or slower is this note compared to a quarter?\r\n var ratio = base / 4;\r\n var durationInQuarters = 1 / ratio;\r\n var _match$groups = match.groups,\r\n dotted = _match$groups.dotted,\r\n tuplet = _match$groups.tuplet;\r\n\r\n if (dotted) {\r\n var thisManyDots = dotted.length;\r\n var divisor = Math.pow(2, thisManyDots);\r\n durationInQuarters = durationInQuarters + durationInQuarters * ((divisor - 1) / divisor);\r\n }\r\n\r\n if (typeof tuplet === 'string') {\r\n var fitInto = durationInQuarters * 2; // default to triplet:\r\n\r\n var thisManyNotes = Number(tuplet || '3');\r\n durationInQuarters = fitInto / thisManyNotes;\r\n }\r\n\r\n return durationInQuarters;\r\n }\r\n }\r\n\r\n throw new Error(duration + ' is not a valid duration.');\r\n }\r\n }]);\r\n\r\n return Utils;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note on\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOnEvent}\r\n */\r\n\r\nvar NoteOnEvent = /*#__PURE__*/function () {\r\n function NoteOnEvent(fields) {\r\n _classCallCheck(this, NoteOnEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.type = 'note-on';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.wait = fields.wait;\r\n this.velocity = fields.velocity;\r\n this.startTick = fields.startTick;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = null;\r\n this.delta = null;\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOnEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOnEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n this.data = []; // Explicitly defined startTick event\r\n\r\n if (this.startTick) {\r\n this.tick = Utils.getRoundedIfClose(this.startTick); // If this is the first event in the track then use event's starting tick as delta.\r\n\r\n if (track.tickPointer == 0) {\r\n this.delta = this.tick;\r\n }\r\n } else {\r\n this.delta = Utils.getTickDuration(this.wait);\r\n this.tick = Utils.getRoundedIfClose(track.tickPointer + this.delta);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note on status code based on the selected channel. 0x9{0-F}\r\n * Note on at channel 0 is 0x90 (144)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 144 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOnEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note off\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOffEvent}\r\n */\r\n\r\nvar NoteOffEvent = /*#__PURE__*/function () {\r\n function NoteOffEvent(fields) {\r\n _classCallCheck(this, NoteOffEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n velocity: 50,\r\n tick: null\r\n }, fields);\r\n this.type = 'note-off';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.duration = fields.duration;\r\n this.velocity = fields.velocity;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = fields.tick;\r\n this.delta = Utils.getTickDuration(this.duration);\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOffEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOffEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n if (this.tick === null) {\r\n this.tick = Utils.getRoundedIfClose(this.delta + track.tickPointer);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note off status code based on the selected channel. 0x8{0-F}\r\n * Note off at channel 0 is 0x80 (128)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 128 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOffEvent;\r\n}();\r\n\r\n/**\r\n * Wrapper for noteOnEvent/noteOffEvent objects that builds both events.\r\n * @param {object} fields - {pitch: '[C4]', duration: '4', wait: '4', velocity: 1-100}\r\n * @return {NoteEvent}\r\n */\r\n\r\nvar NoteEvent = /*#__PURE__*/function () {\r\n function NoteEvent(fields) {\r\n _classCallCheck(this, NoteEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n repeat: 1,\r\n sequential: false,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.data = [];\r\n this.type = 'note';\r\n this.pitch = Utils.toArray(fields.pitch);\r\n this.channel = fields.channel;\r\n this.duration = fields.duration;\r\n this.grace = fields.grace;\r\n this.repeat = fields.repeat;\r\n this.sequential = fields.sequential;\r\n this.startTick = fields.startTick;\r\n this.velocity = fields.velocity;\r\n this.wait = fields.wait;\r\n this.tickDuration = Utils.getTickDuration(this.duration);\r\n this.restDuration = Utils.getTickDuration(this.wait);\r\n this.events = []; // Hold actual NoteOn/NoteOff events\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @return {NoteEvent}\r\n */\r\n\r\n\r\n _createClass(NoteEvent, [{\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this = this;\r\n\r\n // Reset data array\r\n this.data = [];\r\n this.tickDuration;\r\n this.restDuration; // Apply grace note(s) and subtract ticks (currently 1 tick per grace note) from tickDuration so net value is the same\r\n\r\n if (this.grace) {\r\n var graceDuration = 1;\r\n this.grace = Utils.toArray(this.grace);\r\n this.grace.forEach(function (pitch) {\r\n var noteEvent = new NoteEvent({\r\n pitch: _this.grace,\r\n duration: 'T' + graceDuration\r\n });\r\n _this.data = _this.data.concat(noteEvent.data);\r\n });\r\n } // fields.pitch could be an array of pitches.\r\n // If this.sequential === true then it's a sequential string of notes that requires separate NoteOnEvents.\r\n\r\n if (!this.sequential) {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n // Note on\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: _this.wait,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n } else {\r\n // Running status (can ommit the note on status)\r\n //noteOn = new NoteOnEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n }\r\n\r\n _this.events.push(noteOnNew);\r\n }); // Note off\r\n\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n //noteOff = new NoteOffEvent({data: Utils.numberToVariableLength(tickDuration).concat(this.getNoteOffStatus(), Utils.getPitch(p), Utils.convertVelocity(this.velocity))});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n } else {\r\n // Running status (can ommit the note off status)\r\n //noteOff = new NoteOffEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n }\r\n\r\n _this.events.push(noteOffNew);\r\n });\r\n }\r\n } else {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n this.pitch.forEach(function (p, i) {\r\n\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: i > 0 ? 0 : _this.wait,\r\n // wait only applies to first note in repetition\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p\r\n });\r\n\r\n _this.events.push(noteOnNew, noteOffNew);\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n }]);\r\n\r\n return NoteEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"Pitch Bend\" MIDI event\r\n * [ -1.0, 0, 1.0 ] -> [ 0, 8192, 16383]\r\n * @param {object} fields { bend : float, channel : int }\r\n * @return {PitchBendEvent}\r\n */\r\n\r\nvar scale14bits = function scale14bits(zeroOne) {\r\n if (zeroOne <= 0) {\r\n return Math.floor(16384 * (zeroOne + 1) / 2);\r\n }\r\n\r\n return Math.floor(16383 * (zeroOne + 1) / 2);\r\n};\r\n\r\nvar PitchBendEvent = function PitchBendEvent(fields) {\r\n _classCallCheck(this, PitchBendEvent);\r\n\r\n this.type = 'pitch-bend';\r\n var bend14 = scale14bits(fields.bend);\r\n var channel = fields.channel || 0;\r\n var lsbValue = bend14 & 0x7f;\r\n var msbValue = bend14 >> 7 & 0x7f;\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PITCH_BEND_STATUS | channel, lsbValue, msbValue);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"program change\" MIDI event\r\n * @param {object} fields {instrument: integer}\r\n * @return {ProgramChangeEvent}\r\n */\r\n\r\nvar ProgramChangeEvent = function ProgramChangeEvent(fields) {\r\n _classCallCheck(this, ProgramChangeEvent);\r\n\r\n this.type = 'program'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PROGRAM_CHANGE_STATUS, fields.instrument);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"controller change\" MIDI event\r\n * @param {object} fields {controllerNumber: integer, controllerValue: integer}\r\n * @return {ControllerChangeEvent}\r\n */\r\n\r\nvar ControllerChangeEvent = function ControllerChangeEvent(fields) {\r\n _classCallCheck(this, ControllerChangeEvent);\r\n\r\n this.type = 'controller'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.CONTROLLER_CHANGE_STATUS, fields.controllerNumber, fields.controllerValue);\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {string} text - Copyright text\r\n * @return {CopyrightEvent}\r\n */\r\n\r\nvar CopyrightEvent = function CopyrightEvent(text) {\r\n _classCallCheck(this, CopyrightEvent);\r\n\r\n this.type = 'copyright';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_COPYRIGHT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a cue point meta event.\r\n * @param {string} text - Cue point text\r\n * @return {CuePointEvent}\r\n */\r\n\r\nvar CuePointEvent = function CuePointEvent(text) {\r\n _classCallCheck(this, CuePointEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_CUE_POINT, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a end track meta event.\r\n * @return {EndTrackEvent}\r\n */\r\n\r\nvar EndTrackEvent = function EndTrackEvent() {\r\n _classCallCheck(this, EndTrackEvent);\r\n\r\n this.type = 'end-track'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_END_OF_TRACK_ID);\r\n};\r\n\r\n/**\r\n * Object representation of an instrument name meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {InstrumentNameEvent}\r\n */\r\n\r\nvar InstrumentNameEvent = function InstrumentNameEvent(text) {\r\n _classCallCheck(this, InstrumentNameEvent);\r\n\r\n this.type = 'instrument-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_INSTRUMENT_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Instrument name\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a key signature meta event.\r\n * @return {KeySignatureEvent}\r\n */\r\n\r\nvar KeySignatureEvent = function KeySignatureEvent(sf, mi) {\r\n _classCallCheck(this, KeySignatureEvent);\r\n\r\n this.type = 'key-signature';\r\n var mode = mi || 0;\r\n sf = sf || 0; //\tFunction called with string notation\r\n\r\n if (typeof mi === 'undefined') {\r\n var fifths = [['Cb', 'Gb', 'Db', 'Ab', 'Eb', 'Bb', 'F', 'C', 'G', 'D', 'A', 'E', 'B', 'F#', 'C#'], ['ab', 'eb', 'bb', 'f', 'c', 'g', 'd', 'a', 'e', 'b', 'f#', 'c#', 'g#', 'd#', 'a#']];\r\n var _sflen = sf.length;\r\n var note = sf || 'C';\r\n if (sf[0] === sf[0].toLowerCase()) mode = 1;\r\n\r\n if (_sflen > 1) {\r\n switch (sf.charAt(_sflen - 1)) {\r\n case 'm':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '-':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case 'M':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '+':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n }\r\n }\r\n\r\n var fifthindex = fifths[mode].indexOf(note);\r\n sf = fifthindex === -1 ? 0 : fifthindex - 7;\r\n } // Start with zero time delta\r\n\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_KEY_SIGNATURE_ID, [0x02], // Size\r\n Utils.numberToBytes(sf, 1), // Number of sharp or flats ( < 0 flat; > 0 sharp)\r\n Utils.numberToBytes(mode, 1) // Mode: 0 major, 1 minor\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a lyric meta event.\r\n * @param {string} text - Lyric text\r\n * @return {LyricEvent}\r\n */\r\n\r\nvar LyricEvent = function LyricEvent(text) {\r\n _classCallCheck(this, LyricEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_LYRIC_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a marker meta event.\r\n * @param {string} text - Marker text\r\n * @return {MarkerEvent}\r\n */\r\n\r\nvar MarkerEvent = function MarkerEvent(text) {\r\n _classCallCheck(this, MarkerEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_MARKER_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TempoEvent}\r\n */\r\n\r\nvar TempoEvent = function TempoEvent(bpm) {\r\n _classCallCheck(this, TempoEvent);\r\n\r\n this.type = 'tempo';\r\n var tempo = Math.round(60000000 / bpm); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEMPO_ID, [0x03], // Size\r\n Utils.numberToBytes(tempo, 3) // Tempo, 3 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TextEvent}\r\n */\r\n\r\nvar TextEvent = function TextEvent(text) {\r\n _classCallCheck(this, TextEvent);\r\n\r\n this.type = 'text';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEXT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a time signature meta event.\r\n * @return {TimeSignatureEvent}\r\n */\r\n\r\nvar TimeSignatureEvent = function TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n _classCallCheck(this, TimeSignatureEvent);\r\n\r\n this.type = 'time-signature'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TIME_SIGNATURE_ID, [0x04], // Size\r\n Utils.numberToBytes(numerator, 1), // Numerator, 1 bytes\r\n Utils.numberToBytes(Math.log2(denominator), 1), // Denominator is expressed as pow of 2, 1 bytes\r\n Utils.numberToBytes(midiclockspertick || 24, 1), // MIDI Clocks per tick, 1 bytes\r\n Utils.numberToBytes(notespermidiclock || 8, 1) // Number of 1/32 notes per MIDI clocks, 1 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TrackNameEvent}\r\n */\r\n\r\nvar TrackNameEvent = function TrackNameEvent(text) {\r\n _classCallCheck(this, TrackNameEvent);\r\n\r\n this.type = 'track-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TRACK_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Holds all data for a track.\r\n * @param {object} fields {type: number, data: array, size: array, events: array}\r\n * @return {Track}\r\n */\r\n\r\nvar Track = /*#__PURE__*/function () {\r\n function Track() {\r\n _classCallCheck(this, Track);\r\n\r\n this.type = Constants.TRACK_CHUNK_TYPE;\r\n this.data = [];\r\n this.size = [];\r\n this.events = [];\r\n this.explicitTickEvents = []; // If there are any events with an explicit tick defined then we will create a \"sub\" track for those\r\n // and merge them in and the end.\r\n\r\n this.tickPointer = 0; // Each time an event is added this will increase\r\n }\r\n /**\r\n * Adds any event type to the track.\r\n * Events without a specific startTick property are assumed to be added in order of how they should output.\r\n * Events with a specific startTick property are set aside for now will be merged in during build process.\r\n * @param {(NoteEvent|ProgramChangeEvent)} events - Event object or array of Event objects.\r\n * @param {function} mapFunction - Callback which can be used to apply specific properties to all events.\r\n * @return {Track}\r\n */\r\n\r\n\r\n _createClass(Track, [{\r\n key: \"addEvent\",\r\n value: function addEvent(events, mapFunction) {\r\n var _this = this;\r\n\r\n Utils.toArray(events).forEach(function (event, i) {\r\n if (event instanceof NoteEvent) {\r\n // Handle map function if provided\r\n if (typeof mapFunction === 'function') {\r\n var properties = mapFunction(i, event);\r\n\r\n if (_typeof(properties) === 'object') {\r\n for (var j in properties) {\r\n switch (j) {\r\n case 'channel':\r\n event.channel = properties[j];\r\n break;\r\n\r\n case 'duration':\r\n event.duration = properties[j];\r\n break;\r\n\r\n case 'sequential':\r\n event.sequential = properties[j];\r\n break;\r\n\r\n case 'velocity':\r\n event.velocity = Utils.convertVelocity(properties[j]);\r\n break;\r\n }\r\n }\r\n }\r\n } // If this note event has an explicit startTick then we need to set aside for now\r\n\r\n\r\n if (event.startTick !== null) {\r\n _this.explicitTickEvents.push(event);\r\n } else {\r\n // Push each on/off event to track's event stack\r\n event.buildData().events.forEach(function (e) {\r\n return _this.events.push(e);\r\n });\r\n }\r\n } else {\r\n _this.events.push(event);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Builds int array of all events.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this2 = this;\r\n\r\n // Remove existing end track event and add one.\r\n // This makes sure it's at the very end of the event list.\r\n this.removeEventsByType('end-track').addEvent(new EndTrackEvent()); // Reset\r\n\r\n this.data = [];\r\n this.size = [];\r\n this.tickPointer = 0;\r\n var precisionLoss = 0;\r\n this.events.forEach(function (event, eventIndex) {\r\n // Build event & add to total tick duration\r\n if (event instanceof NoteOnEvent || event instanceof NoteOffEvent) {\r\n var built = event.buildData(_this2, precisionLoss);\r\n precisionLoss = Utils.getPrecisionLoss(event.deltaWithPrecisionCorrection || 0);\r\n _this2.data = _this2.data.concat(built.data);\r\n _this2.tickPointer = Utils.getRoundedIfClose(event.tick);\r\n } else {\r\n _this2.data = _this2.data.concat(event.data);\r\n }\r\n });\r\n this.mergeExplicitTickEvents();\r\n this.size = Utils.numberToBytes(this.data.length, 4); // 4 bytes long\r\n\r\n return this;\r\n }\r\n }, {\r\n key: \"mergeExplicitTickEvents\",\r\n value: function mergeExplicitTickEvents() {\r\n var _this3 = this;\r\n\r\n if (!this.explicitTickEvents.length) return; // First sort asc list of events by startTick\r\n\r\n this.explicitTickEvents.sort(function (a, b) {\r\n return a.startTick - b.startTick;\r\n }); // Now this.explicitTickEvents is in correct order, and so is this.events naturally.\r\n // For each explicit tick event, splice it into the main list of events and\r\n // adjust the delta on the following events so they still play normally.\r\n\r\n this.explicitTickEvents.forEach(function (noteEvent) {\r\n // Convert NoteEvent to it's respective NoteOn/NoteOff events\r\n // Note that as we splice in events the delta for the NoteOff ones will\r\n // Need to change based on what comes before them after the splice.\r\n noteEvent.buildData().events.forEach(function (e) {\r\n return e.buildData(_this3);\r\n }); // Merge each event indivually into this track's event list.\r\n\r\n noteEvent.events.forEach(function (event) {\r\n return _this3.mergeSingleEvent(event);\r\n });\r\n }); // Hacky way to rebuild track with newly spliced events. Need better solution.\r\n\r\n this.explicitTickEvents = [];\r\n this.buildData();\r\n }\r\n /**\r\n * Merges another track's events with this track.\r\n * @param {Track} track\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeTrack\",\r\n value: function mergeTrack(track) {\r\n var _this4 = this;\r\n\r\n // First build this track to populate each event's tick property\r\n this.buildData(); // Then build track to be merged so that tick property is populated on all events & merge each event.\r\n\r\n track.buildData().events.forEach(function (event) {\r\n return _this4.mergeSingleEvent(event);\r\n });\r\n }\r\n /**\r\n * Merges a single event into this track's list of events based on event.tick property.\r\n * @param {NoteOnEvent|NoteOffEvent} - event\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeSingleEvent\",\r\n value: function mergeSingleEvent(event) {\r\n // Find index of existing event we need to follow with\r\n var lastEventIndex = 0;\r\n\r\n for (var i = 0; i < this.events.length; i++) {\r\n if (this.events[i].tick > event.tick) break;\r\n lastEventIndex = i;\r\n }\r\n\r\n var splicedEventIndex = lastEventIndex + 1; // Need to adjust the delta of this event to ensure it falls on the correct tick.\r\n\r\n event.delta = event.tick - this.events[lastEventIndex].tick; // Splice this event at lastEventIndex + 1\r\n\r\n this.events.splice(splicedEventIndex, 0, event); // Now adjust delta of all following events\r\n\r\n for (var i = splicedEventIndex + 1; i < this.events.length; i++) {\r\n // Since each existing event should have a tick value at this point we just need to\r\n // adjust delta to that the event still falls on the correct tick.\r\n this.events[i].delta = this.events[i].tick - this.events[i - 1].tick;\r\n }\r\n }\r\n /**\r\n * Removes all events matching specified type.\r\n * @param {string} eventType - Event type\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"removeEventsByType\",\r\n value: function removeEventsByType(eventType) {\r\n var _this5 = this;\r\n\r\n this.events.forEach(function (event, index) {\r\n if (event.type === eventType) {\r\n _this5.events.splice(index, 1);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Sets tempo of the MIDI file.\r\n * @param {number} bpm - Tempo in beats per minute.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTempo\",\r\n value: function setTempo(bpm) {\r\n return this.addEvent(new TempoEvent(bpm));\r\n }\r\n /**\r\n * Sets time signature.\r\n * @param {number} numerator - Top number of the time signature.\r\n * @param {number} denominator - Bottom number of the time signature.\r\n * @param {number} midiclockspertick - Defaults to 24.\r\n * @param {number} notespermidiclock - Defaults to 8.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTimeSignature\",\r\n value: function setTimeSignature(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n return this.addEvent(new TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock));\r\n }\r\n /**\r\n * Sets key signature.\r\n * @param {*} sf -\r\n * @param {*} mi -\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setKeySignature\",\r\n value: function setKeySignature(sf, mi) {\r\n return this.addEvent(new KeySignatureEvent(sf, mi));\r\n }\r\n /**\r\n * Adds text to MIDI file.\r\n * @param {string} text - Text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addText\",\r\n value: function addText(text) {\r\n return this.addEvent(new TextEvent(text));\r\n }\r\n /**\r\n * Adds copyright to MIDI file.\r\n * @param {string} text - Text of copyright line.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCopyright\",\r\n value: function addCopyright(text) {\r\n return this.addEvent(new CopyrightEvent(text));\r\n }\r\n /**\r\n * Adds Sequence/Track Name.\r\n * @param {string} text - Text of track name.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addTrackName\",\r\n value: function addTrackName(text) {\r\n return this.addEvent(new TrackNameEvent(text));\r\n }\r\n /**\r\n * Sets instrument name of track.\r\n * @param {string} text - Name of instrument.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addInstrumentName\",\r\n value: function addInstrumentName(text) {\r\n return this.addEvent(new InstrumentNameEvent(text));\r\n }\r\n /**\r\n * Adds marker to MIDI file.\r\n * @param {string} text - Marker text.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addMarker\",\r\n value: function addMarker(text) {\r\n return this.addEvent(new MarkerEvent(text));\r\n }\r\n /**\r\n * Adds cue point to MIDI file.\r\n * @param {string} text - Text of cue point.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCuePoint\",\r\n value: function addCuePoint(text) {\r\n return this.addEvent(new CuePointEvent(text));\r\n }\r\n /**\r\n * Adds lyric to MIDI file.\r\n * @param {string} text - Lyric text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addLyric\",\r\n value: function addLyric(text) {\r\n return this.addEvent(new LyricEvent(text));\r\n }\r\n /**\r\n * Channel mode messages\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"polyModeOn\",\r\n value: function polyModeOn() {\r\n var event = new NoteOnEvent({\r\n data: [0x00, 0xB0, 0x7E, 0x00]\r\n });\r\n return this.addEvent(event);\r\n }\r\n /**\r\n * Sets a pitch bend.\r\n * @param {float} bend - Bend value ranging [-1,1], zero meaning no bend.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setPitchBend\",\r\n value: function setPitchBend(bend) {\r\n return this.addEvent(new PitchBendEvent({\r\n bend: bend\r\n }));\r\n }\r\n /**\r\n * Adds a controller change event\r\n * @param {number} number - Control number.\r\n * @param {number} value - Control value.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"controllerChange\",\r\n value: function controllerChange(number, value) {\r\n return this.addEvent(new ControllerChangeEvent({\r\n controllerNumber: number,\r\n controllerValue: value\r\n }));\r\n }\r\n }]);\r\n\r\n return Track;\r\n}();\r\n\r\nvar VexFlow = /*#__PURE__*/function () {\r\n function VexFlow() {\r\n _classCallCheck(this, VexFlow);\r\n }\r\n\r\n _createClass(VexFlow, [{\r\n key: \"trackFromVoice\",\r\n value:\r\n /**\r\n * Support for converting VexFlow voice into MidiWriterJS track\r\n * @return MidiWriter.Track object\r\n */\r\n function trackFromVoice(voice) {\r\n var _this = this;\r\n\r\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\r\n addRenderedAccidentals: false\r\n };\r\n var track = new Track();\r\n var wait = [];\r\n voice.tickables.forEach(function (tickable) {\r\n if (tickable.noteType === 'n') {\r\n track.addEvent(new NoteEvent({\r\n pitch: tickable.keys.map(function (pitch, index) {\r\n return _this.convertPitch(pitch, index, tickable, options.addRenderedAccidentals);\r\n }),\r\n duration: _this.convertDuration(tickable),\r\n wait: wait\r\n })); // reset wait\r\n\r\n wait = [];\r\n } else if (tickable.noteType === 'r') {\r\n // move on to the next tickable and add this to the stack\r\n // of the `wait` property for the next note event\r\n wait.push(_this.convertDuration(tickable));\r\n return;\r\n }\r\n }); // There may be outstanding rests at the end of the track,\r\n // pad with a ghost note (zero duration and velocity), just to capture the wait.\r\n\r\n if (wait.length > 0) {\r\n track.addEvent(new NoteEvent({\r\n pitch: '[c4]',\r\n duration: '0',\r\n wait: wait,\r\n velocity: '0'\r\n }));\r\n }\r\n\r\n return track;\r\n }\r\n /**\r\n * Converts VexFlow pitch syntax to MidiWriterJS syntax\r\n * @param pitch string\r\n * @param index pitch index\r\n * @param note struct from Vexflow\r\n * @param addRenderedAccidentals adds Vexflow rendered accidentals\r\n */\r\n\r\n }, {\r\n key: \"convertPitch\",\r\n value: function convertPitch(pitch, index, note) {\r\n var addRenderedAccidentals = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n // Splits note name from octave\r\n var pitchParts = pitch.split('/'); // Retrieves accidentals from pitch\r\n // Removes natural accidentals since they are not accepted in Tonal Midi\r\n\r\n var accidentals = pitchParts[0].substring(1).replace('n', '');\r\n\r\n if (addRenderedAccidentals) {\r\n var _note$getAccidentals;\r\n\r\n (_note$getAccidentals = note.getAccidentals()) === null || _note$getAccidentals === void 0 ? void 0 : _note$getAccidentals.forEach(function (accidental) {\r\n if (accidental.index === index) {\r\n if (accidental.type === 'n') {\r\n accidentals = '';\r\n } else {\r\n accidentals += accidental.type;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return pitchParts[0][0] + accidentals + pitchParts[1];\r\n }\r\n /**\r\n * Converts VexFlow duration syntax to MidiWriterJS syntax\r\n * @param note struct from VexFlow\r\n */\r\n\r\n }, {\r\n key: \"convertDuration\",\r\n value: function convertDuration(note) {\r\n return 'd'.repeat(note.dots) + this.convertBaseDuration(note.duration) + (note.tuplet ? 't' + note.tuplet.num_notes : '');\r\n }\r\n /**\r\n * Converts VexFlow base duration syntax to MidiWriterJS syntax\r\n * @param duration Vexflow duration\r\n * @returns MidiWriterJS duration\r\n */\r\n\r\n }, {\r\n key: \"convertBaseDuration\",\r\n value: function convertBaseDuration(duration) {\r\n switch (duration) {\r\n case 'w':\r\n return '1';\r\n\r\n case 'h':\r\n return '2';\r\n\r\n case 'q':\r\n return '4';\r\n\r\n default:\r\n return duration;\r\n }\r\n }\r\n }]);\r\n\r\n return VexFlow;\r\n}();\r\n\r\n/**\r\n * Object representation of a header chunk section of a MIDI file.\r\n * @param {number} numberOfTracks - Number of tracks\r\n * @return {HeaderChunk}\r\n */\r\n\r\nvar HeaderChunk = function HeaderChunk(numberOfTracks) {\r\n _classCallCheck(this, HeaderChunk);\r\n\r\n this.type = Constants.HEADER_CHUNK_TYPE;\r\n var trackType = numberOfTracks > 1 ? Constants.HEADER_CHUNK_FORMAT1 : Constants.HEADER_CHUNK_FORMAT0;\r\n this.data = trackType.concat(Utils.numberToBytes(numberOfTracks, 2), // two bytes long,\r\n Constants.HEADER_CHUNK_DIVISION);\r\n this.size = [0, 0, 0, this.data.length];\r\n};\r\n\r\n/**\r\n * Object that puts together tracks and provides methods for file output.\r\n * @param {array|Track} tracks - A single {Track} object or an array of {Track} objects.\r\n * @return {Writer}\r\n */\r\n\r\nvar Writer = /*#__PURE__*/function () {\r\n function Writer(tracks) {\r\n var _this = this;\r\n\r\n _classCallCheck(this, Writer);\r\n\r\n // Ensure track is an array\r\n tracks = Utils.toArray(tracks);\r\n this.data = [];\r\n this.data.push(new HeaderChunk(tracks.length)); // For each track add final end of track event and build data\r\n\r\n tracks.forEach(function (track, i) {\r\n _this.data.push(track.buildData());\r\n });\r\n }\r\n /**\r\n * Builds the file into a Uint8Array\r\n * @return {Uint8Array}\r\n */\r\n\r\n\r\n _createClass(Writer, [{\r\n key: \"buildFile\",\r\n value: function buildFile() {\r\n var build = []; // Data consists of chunks which consists of data\r\n\r\n this.data.forEach(function (d) {\r\n return build = build.concat(d.type, d.size, d.data);\r\n });\r\n return new Uint8Array(build);\r\n }\r\n /**\r\n * Convert file buffer to a base64 string. Different methods depending on if browser or node.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"base64\",\r\n value: function base64() {\r\n if (typeof btoa === 'function') return btoa(String.fromCharCode.apply(null, this.buildFile()));\r\n return Buffer.from(this.buildFile()).toString('base64');\r\n }\r\n /**\r\n * Get the data URI.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"dataUri\",\r\n value: function dataUri() {\r\n return 'data:audio/midi;base64,' + this.base64();\r\n }\r\n /**\r\n * Output to stdout\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"stdout\",\r\n value: function stdout() {\r\n return process.stdout.write(new Buffer(this.buildFile()));\r\n }\r\n /**\r\n * Save to MIDI file\r\n * @param {string} filename\r\n */\r\n\r\n }, /* {\r\n key: \"saveMIDI\",\r\n value: function saveMIDI(filename) {\r\n var fs = require('fs');\r\n\r\n var buffer = new Buffer.from(this.buildFile());\r\n fs.writeFile(filename + '.mid', buffer, function (err) {\r\n if (err) throw err;\r\n });\r\n } \r\n } */ \r\n]); \r\n\r\n return Writer;\r\n}();\r\n\r\nvar main = {\r\n Constants: Constants,\r\n NoteOnEvent: NoteOnEvent,\r\n NoteOffEvent: NoteOffEvent,\r\n NoteEvent: NoteEvent,\r\n PitchBendEvent: PitchBendEvent,\r\n ProgramChangeEvent: ProgramChangeEvent,\r\n Track: Track,\r\n Utils: Utils,\r\n VexFlow: VexFlow,\r\n Writer: Writer\r\n};\r\nwindow.MidiWriter = main;\r\n};\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiRenderState } from \"../render/sui/renderState\";\r\n\r\nexport type promiseFunction = () => void;\r\nexport type promiseCondition = () => boolean;\r\nexport type promiseInstance = () => Promise;\r\nexport interface PromiseParameters {\r\n endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number\r\n}\r\n\r\nexport function TEmptyPromise(obj: T): Promise {\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(obj);\r\n }, 1);\r\n });\r\n}\r\nexport class PromiseHelpers {\r\n // ### makePromise\r\n // poll on endCondition at a rate of pollTime. Resolve the promise\r\n // when endCondition is met, calling preResolveMethod first. On\r\n // polls where the end condition is not met, call pollMethod\r\n // Resolve method and pollMethod are optional\r\n static makePromise(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number): Promise {\r\n return new Promise((resolve: any) => {\r\n const checkit = () => {\r\n setTimeout(() => {\r\n if (endCondition()) {\r\n if (preResolveMethod) {\r\n preResolveMethod();\r\n }\r\n resolve();\r\n }\r\n else {\r\n if (pollMethod) {\r\n pollMethod();\r\n }\r\n checkit();\r\n }\r\n }, pollTime);\r\n }\r\n checkit();\r\n });\r\n }\r\n\r\n static makePromiseObj(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number) {\r\n return {\r\n endCondition,\r\n preResolveMethod,\r\n pollMethod,\r\n pollTime\r\n };\r\n }\r\n // ### promiseChainThen\r\n // Call a chain of promises in array order, with parameters of makePromise\r\n static async promiseChainThen(params: PromiseParameters[]) {\r\n const promiseArray: promiseInstance[] = [];\r\n params.forEach((param) => {\r\n promiseArray.push(\r\n async () => {\r\n return PromiseHelpers.makePromise(\r\n param.endCondition,\r\n param.preResolveMethod,\r\n param.pollMethod,\r\n param.pollTime\r\n );\r\n });\r\n });\r\n let result: Promise;\r\n for (const f of promiseArray) {\r\n result = await f();\r\n }\r\n\r\n\t\treturn result!;\r\n }\r\n static emptyPromise(): Promise {\r\n return new Promise((resolve: any) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, 1);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## smoSerialize\r\n// Helper functions that perform serialized merges, general JSON\r\n// types of routines.\r\n// ---\r\nexport class smoSerialize {\r\n static vexMerge(dest, src) {\r\n if (typeof (src) === 'undefined') {\r\n return;\r\n }\r\n const keys = Object.keys(src);\r\n keys.forEach((key) => {\r\n dest[key] = src[key];\r\n }); \r\n }\r\n static tryParseUnicode(text) {\r\n let rv = text;\r\n try {\r\n eval('rv=\"' + text + '\"');\r\n } catch (ex) {\r\n console.log('bad unicode');\r\n }\r\n return rv;\r\n }\r\n\r\n // ### filteredMerge\r\n // Like vexMerge, but only for specific attributes.\r\n static filteredMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n dest[attr] = src[attr];\r\n }\r\n });\r\n }\r\n\r\n static get localScore() {\r\n return '_smoosicScore';\r\n }\r\n\r\n static loadRemoteFile(path) {\r\n const req = new XMLHttpRequest();\r\n req.addEventListener('load', () => {\r\n callback(req.responseText);\r\n });\r\n req.open('GET', path);\r\n req.send();\r\n }\r\n\r\n // This is the token map we use to reduce the size of\r\n // serialized data.\r\n static get tokenMap() {\r\n var _tm = `{\r\n \"a\": \"score\",\r\n \"b\": \"layout\",\r\n \"c\": \"leftMargin\",\r\n \"d\": \"rightMargin\",\r\n \"e\": \"topMargin\",\r\n \"f\": \"bottomMargin\",\r\n \"g\": \"pageWidth\",\r\n \"h\": \"pageHeight\",\r\n \"i\": \"orientation\",\r\n \"j\": \"interGap\",\r\n \"k\": \"intraGap\",\r\n \"l\": \"svgScale\",\r\n \"m\": \"zoomScale\",\r\n \"n\": \"zoomMode\",\r\n \"o\": \"pages\",\r\n \"p\": \"pageSize\",\r\n \"q\": \"startIndex\",\r\n \"r\": \"renumberingMap\",\r\n \"s\": \"staves\",\r\n \"t\": \"staffId\",\r\n \"u\": \"staffX\",\r\n \"v\": \"staffY\",\r\n \"w\": \"adjY\",\r\n \"x\": \"staffWidth\",\r\n \"y\": \"staffHeight\",\r\n \"z\": \"keySignatureMap\",\r\n \"aa\": \"instrumentInfo\",\r\n \"ba\": \"instrumentName\",\r\n \"ca\": \"keyOffset\",\r\n \"da\": \"clef\",\r\n \"ea\": \"modifiers\",\r\n \"fa\": \"startSelector\",\r\n \"ga\": \"staff\",\r\n \"ha\": \"measure\",\r\n \"ia\": \"voice\",\r\n \"ja\": \"tick\",\r\n \"ka\": \"pitches\",\r\n \"la\": \"endSelector\",\r\n \"ma\": \"xOffset\",\r\n \"na\": \"cp1y\",\r\n \"oa\": \"cp2y\",\r\n \"pa\": \"attrs\",\r\n \"qa\": \"id\",\r\n \"ra\": \"type\",\r\n \"sa\": \"ctor\",\r\n \"ta\": \"yOffset\",\r\n \"ua\": \"position\",\r\n \"va\": \"measures\",\r\n \"wa\": \"timeSignature\",\r\n \"xa\": \"keySignature\",\r\n \"ya\": \"measureNumber\",\r\n \"za\": \"measureIndex\",\r\n \"ab\": \"systemIndex\",\r\n \"bb\": \"adjX\",\r\n \"cb\": \"tuplets\",\r\n \"db\": \"voices\",\r\n \"eb\": \"notes\",\r\n \"fb\": \"ticks\",\r\n \"gb\": \"numerator\",\r\n \"hb\": \"denominator\",\r\n \"ib\": \"remainder\",\r\n \"jb\": \"letter\",\r\n \"kb\": \"octave\",\r\n \"lb\": \"accidental\",\r\n \"mb\": \"symbol\",\r\n \"nb\": \"bpm\",\r\n \"ob\": \"display\",\r\n \"pb\": \"beatDuration\",\r\n \"qb\": \"beamBeats\",\r\n \"rb\": \"endBeam\",\r\n \"sb\": \"textModifiers\",\r\n \"tb\": \"text\",\r\n \"ub\": \"endChar\",\r\n \"vb\": \"fontInfo\",\r\n \"wb\": \"size\",\r\n \"xb\": \"family\",\r\n \"yb\": \"style\",\r\n \"zb\": \"weight\",\r\n \"ac\": \"classes\",\r\n \"bc\": \"verse\",\r\n \"cc\": \"fill\",\r\n \"dc\": \"scaleX\",\r\n \"ec\": \"scaleY\",\r\n \"fc\": \"translateX\",\r\n \"gc\": \"translateY\",\r\n \"hc\": \"selector\",\r\n \"ic\": \"renderedBox\",\r\n \"jc\": \"x\",\r\n \"kc\": \"y\",\r\n \"lc\": \"width\",\r\n \"mc\": \"height\",\r\n \"nc\": \"logicalBox\",\r\n \"oc\": \"noteType\",\r\n \"pc\": \"cautionary\",\r\n \"qc\": \"articulations\",\r\n \"rc\": \"articulation\",\r\n \"sc\": \"activeVoice\",\r\n \"tc\": \"flagState\",\r\n \"uc\": \"invert\",\r\n \"vc\": \"fontSize\",\r\n \"wc\": \"yOffsetLine\",\r\n \"xc\": \"yOffsetPixels\",\r\n \"yc\": \"scoreText\",\r\n \"zc\": \"backup\",\r\n \"ad\": \"edited\",\r\n \"bd\": \"pagination\",\r\n \"cd\": \"boxModel\",\r\n \"dd\": \"justification\",\r\n \"ed\": \"autoLayout\",\r\n \"fd\": \"ornaments\",\r\n \"gd\": \"offset\",\r\n \"hd\": \"ornament\",\r\n \"id\": \"tempoMode\",\r\n \"jd\": \"tempoText\",\r\n \"kd\": \"barline\",\r\n \"ld\": \"systemBreak\",\r\n \"md\": \"graceNotes\",\r\n \"nd\": \"tones\",\r\n \"od\": \"tuplet\",\r\n \"pd\": \"beam_group\",\r\n \"qd\": \"renderId\",\r\n \"rd\": \"numNotes\",\r\n \"sd\": \"totalTicks\",\r\n \"td\": \"stemTicks\",\r\n \"ud\": \"durationMap\",\r\n \"vd\": \"bracketed\",\r\n \"wd\": \"ratioed\",\r\n \"xd\": \"location\",\r\n \"yd\": \"systemGroups\",\r\n \"zd\": \"leftConnector\",\r\n \"ae\": \"padLeft\",\r\n \"be\": \"customStretch\",\r\n \"ce\": \"engravingFont\",\r\n \"de\": \"customProportion\",\r\n \"ee\": \"columnAttributeMap\",\r\n \"fe\": \"tempo\",\r\n \"ge\": \"textGroups\",\r\n \"he\": \"textBlocks\",\r\n \"ie\": \"backupBlocks\",\r\n \"je\": \"blocks\",\r\n \"ke\": \"_text\",\r\n \"le\": \"parser\",\r\n \"me\": \"fonts\",\r\n \"ne\": \"name\",\r\n \"oe\": \"purpose\",\r\n \"pe\": \"custom\",\r\n \"qe\": \"transposeIndex\",\r\n \"re\": \"noteHead\",\r\n \"se\": \"slash\",\r\n \"te\": \"pointSize\",\r\n \"ue\": \"spacing\",\r\n \"ve\": \"relativePosition\",\r\n \"we\": \"activeText\",\r\n \"xe\": \"attachToSelector\",\r\n \"ye\": \"musicXOffset\",\r\n \"ze\": \"musicYOffset\",\r\n \"af\": \"formattingIterations\",\r\n \"bf\": \"startBar\",\r\n \"cf\": \"endBar\",\r\n \"df\": \"endingId\",\r\n \"ef\": \"autoJustify\",\r\n \"ff\": \"thickness\",\r\n \"gf\": \"number\",\r\n \"hf\": \"preferences\",\r\n \"if\": \"autoPlay\",\r\n \"jf\": \"autoAdvance\",\r\n \"kf\": \"defaultDupleDuration\",\r\n \"lf\": \"defaultTripleDuration\",\r\n \"mf\": \"scoreInfo\",\r\n \"nf\": \"version\",\r\n \"of\": \"title\",\r\n \"pf\": \"subTitle\",\r\n \"qf\": \"composer\",\r\n \"rf\": \"copyright\",\r\n \"sf\": \"localIndex\",\r\n \"tf\": \"hairpinType\",\r\n \"uf\": \"customText\",\r\n \"vf\": \"noteSpacing\",\r\n \"wf\": \"lines\",\r\n \"xf\": \"from\",\r\n \"yf\": \"layoutManager\",\r\n \"zf\": \"pageLayouts\",\r\n \"ag\": \"fillStyle\",\r\n \"bg\": \"hidden\",\r\n \"cg\": \"adjustNoteWidthLyric\",\r\n \"dg\": \"xOffsetStart\",\r\n \"eg\": \"xOffsetEnd\",\r\n \"fg\": \"measureFormats\",\r\n \"gg\": \"format\",\r\n \"hg\": \"pageBreak\",\r\n \"ig\": \"xOffsetLeft\",\r\n \"jg\": \"xOffsetRight\",\r\n \"kg\": \"padAllInSystem\",\r\n \"lg\": \"rotate\",\r\n \"mg\": \"actualBeats\",\r\n \"ng\": \"useSymbol\",\r\n \"og\": \"showPiano\",\r\n \"pg\": \"globalLayout\",\r\n \"qg\": \"measureInstrumentMap\",\r\n \"rg\": \"partInfo\",\r\n \"sg\": \"partName\",\r\n \"tg\": \"partAbbreviation\",\r\n \"ug\": \"stavesAfter\",\r\n \"vg\": \"stavesBefore\",\r\n \"wg\": \"measureFormatting\",\r\n \"xg\": \"preserveTextGroups\",\r\n \"yg\": \"cueInScore\",\r\n \"zg\": \"tie_spacing\",\r\n \"ah\": \"position_end\",\r\n \"bh\": \"transposingScore\",\r\n \"ch\": \"proportionality\",\r\n \"dh\": \"maxMeasureSystem\",\r\n \"eh\": \"cp2x\",\r\n \"fh\": \"restBreak\",\r\n \"gh\": \"expandMultimeasureRests\",\r\n \"hh\": \"midiInstrument\",\r\n \"ih\": \"channel\",\r\n \"jh\": \"program\",\r\n \"kh\": \"volume\",\r\n \"lh\": \"pan\",\r\n \"mh\": \"midiDevice\"\r\n }`;\r\n return JSON.parse(_tm);\r\n }\r\n\r\n static get valueTokens() {\r\n var vm = `{\"@sn\",\"SmoNote\"}`;\r\n return JSON.parse(vm);\r\n }\r\n\r\n static reverseMap(map) {\r\n const rv = {};\r\n const keys = Object.keys(map);\r\n keys.forEach((key) => {\r\n rv[map[key]] = key;\r\n });\r\n return rv;\r\n }\r\n\r\n static get tokenValues() {\r\n return smoSerialize.reverseMap(smoSerialize.tokenMap);\r\n }\r\n\r\n // ## detokenize\r\n // If we are saving, replace token values with keys, since the keys are smaller.\r\n // if we are loading, replace the token keys with values so the score can\r\n // deserialize it\r\n static detokenize(json, dictionary) {\r\n const rv = {};\r\n const smoKey = (key) => {\r\n return typeof (dictionary[key]) !== 'undefined' ? dictionary[key] : key;\r\n }\r\n const _tokenRecurse = (input, output) => {\r\n if (input === null) {\r\n return;\r\n }\r\n const keys = Object.keys(input);\r\n keys.forEach((key) => {\r\n const val = input[key];\r\n const dkey = smoKey(key);\r\n if (typeof (val) == 'string' || typeof (val) == 'number' || typeof (val) == 'boolean') {\r\n output[dkey] = val;\r\n // console.log('240: output[' + dkey + '] = ' + val);\r\n }\r\n if (typeof (val) == 'object' && key != 'dictionary') {\r\n if (Array.isArray(val)) {\r\n output[dkey] = [];\r\n // console.log('245: processing array ' + dkey);\r\n val.forEach((arobj) => {\r\n if (typeof (arobj) === 'string' || typeof (arobj) === 'number' || typeof (arobj) === 'boolean') {\r\n output[dkey].push(arobj);\r\n // console.log('249: ar element ' + arobj);\r\n }\r\n else if (arobj && typeof (arobj) === 'object') {\r\n const nobj = {};\r\n _tokenRecurse(arobj, nobj);\r\n output[dkey].push(nobj);\r\n }\r\n });\r\n } else {\r\n const nobj = {};\r\n // console.log('259: processing child object of ' + dkey);\r\n _tokenRecurse(val, nobj);\r\n output[dkey] = nobj;\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json, rv);\r\n // console.log(JSON.stringify(rv,null,' '));\r\n return rv;\r\n }\r\n\r\n static incrementIdentifier(label) {\r\n const increcurse = (ar, ix) => {\r\n const n1 = (ar[ix].charCodeAt(0) - 97) + 1;\r\n if (n1 > 25) {\r\n ar[ix] = 'a';\r\n if (ar.length <= ix + 1) {\r\n ar.push('a');\r\n } else {\r\n increcurse(ar, ix + 1);\r\n }\r\n } else {\r\n ar[ix] = String.fromCharCode(97 + n1);\r\n }\r\n }\r\n if (!label) {\r\n label = 'a';\r\n }\r\n const ar = label.split('');\r\n increcurse(ar, 0);\r\n label = ar.join('');\r\n return label;\r\n }\r\n\r\n // used to generate a tokenization scheme that I will use to make\r\n // saved files smaller\r\n static jsonTokens(json) {\r\n const map = {};\r\n const valmap = {};\r\n const startKeys = Object.keys(smoSerialize.tokenMap);\r\n let keyLabel = startKeys[startKeys.length - 1];\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n\r\n const exist = smoSerialize.tokenValues;\r\n const addMap = (key) => {\r\n if (!exist[key] && !map[key] && key.length > keyLabel.length) {\r\n map[key] = keyLabel;\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n }\r\n };\r\n const _tokenRecurse = (obj) => {\r\n if (!obj) {\r\n console.warn('failure to parse');\r\n return;\r\n }\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n const val = obj[key];\r\n if (val !== null) {\r\n if (typeof (val) === 'string' || typeof (val) === 'number'\r\n || typeof (val) === 'boolean') {\r\n addMap(key);\r\n }\r\n if (typeof (val) == 'object') {\r\n if (Array.isArray(val)) {\r\n addMap(key);\r\n val.forEach((arobj) => {\r\n if (arobj && typeof (arobj) === 'object') {\r\n _tokenRecurse(arobj);\r\n }\r\n });\r\n } else {\r\n addMap(key);\r\n _tokenRecurse(val);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json);\r\n const mkar = Object.keys(map);\r\n const m2 = {};\r\n mkar.forEach((mk) => {\r\n m2[map[mk]] = mk;\r\n })\r\n console.log(JSON.stringify(m2, null, ' '));\r\n }\r\n\r\n // ### serializedMerge\r\n // serialization-friendly, so merged, copied objects are deep-copied\r\n static serializedMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) !== 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n dest[attr] = src[attr];\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Only serialize non-default values.\r\n * @param {*} defaults - the class-defined defaults\r\n * @param {*} attrs - the list of attributes (untyped)\r\n * @param {*} src - the object we're serializing\r\n * @param {*} dest - the output json\r\n */\r\n static serializedMergeNonDefault(defaults, attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n // always persist object type so it can be deserialized\r\n if (src[attr] !== defaults[attr] || attr === 'ctor') {\r\n dest[attr] = src[attr];\r\n }\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n if (src[attr] != defaults[attr]) {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n static stringifyAttrs(attrs, obj) {\r\n let rv = '';\r\n attrs.forEach((attr) => {\r\n if (obj[attr]) {\r\n rv += attr + ':' + obj[attr] + ', ';\r\n } else {\r\n rv += attr + ': null,';\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class) {\r\n const xxx = Smo.getClass(_class + '.printTranslate');\r\n if (typeof (xxx) === 'function') {\r\n xxx();\r\n }\r\n }\r\n}\r\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\r\n// MIT License\r\n\r\nimport { FontInfo, VexFlow } from '../common/vex';\r\nconst VF = VexFlow;\r\nexport interface FontGlyph {\r\n xMin: number,\r\n xMax: number,\r\n yMin: number,\r\n yMax: number,\r\n ha: number,\r\n leftSideBearing: number,\r\n advanceWidth: number\r\n}\r\nexport interface TextFormatterInfo extends Record {\r\n family: string;\r\n resolution?: number;\r\n glyphs?: Record;\r\n serifs: boolean;\r\n monospaced: boolean;\r\n italic: boolean;\r\n bold: boolean;\r\n maxSizeGlyph?: string;\r\n superscriptOffset?: number;\r\n subscriptOffset?: number;\r\n description: string;\r\n}\r\n\r\n/**\r\n * Y information, 0 is baseline, yMin is lowest point.\r\n */\r\nexport interface yExtent {\r\n yMin: number;\r\n yMax: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Text widths are stored in a cache, so we don't have to recompute widths\r\n * for the same font + string combination.\r\n *\r\n * The cache is first keyed by the font information. The key is of the form:\r\n * `${family}-${size}-${weight}-${style}`\r\n * The second level key is the specific text to be measured.\r\n *\r\n * The stored value is the measured width in `em` units.\r\n * textWidth == textWidthCache[cacheKey][textToMeasure]\r\n */\r\nconst textWidthCache: Record | undefined> = {};\r\nconst textHeightCache: Record | undefined> = {};\r\n/**\r\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\r\n * The metrics for those fonts will be made available to the application.\r\n */\r\nconst registry: Record = {};\r\n\r\nexport class TextFormatter {\r\n\r\n /**\r\n * Return all registered font families.\r\n */\r\n static getFontFamilies(): TextFormatterInfo[] {\r\n const registeredFonts: TextFormatterInfo[] = [];\r\n for (const fontFamily in registry) {\r\n const formatterInfo = registry[fontFamily];\r\n registeredFonts.push({ ...formatterInfo });\r\n }\r\n return registeredFonts;\r\n }\r\n\r\n /**\r\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\r\n *\r\n * This method creates a formatter for the font that most closely matches the requested font.\r\n * We compare font family, bold, and italic attributes.\r\n * This method will return a fallback formatter if there are no matches.\r\n */\r\n static create(requestedFont: FontInfo = {}): TextFormatter {\r\n if (!requestedFont.family) {\r\n requestedFont.family = 'Sans Serif';\r\n }\r\n\r\n // TODO: One potential (small) optimization is to cache the TextFormatter object\r\n // returned for each font info. We would probably want to clear the cache if\r\n // the registry is ever updated.\r\n\r\n const candidates: TextFormatterInfo[] = [];\r\n // The incoming font family is a string of comma-separated font family names.\r\n // (e.g., `PetalumaScript, Arial, sans-serif`).\r\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\r\n for (const requestedFamily of requestedFamilies) {\r\n for (const fontFamily in registry) {\r\n // Support cases where the registry contains 'Roboto Slab Medium',\r\n // but the requestedFont.family is 'Roboto Slab'.\r\n if (fontFamily.startsWith(requestedFamily)) {\r\n candidates.push(registry[fontFamily]);\r\n }\r\n }\r\n if (candidates.length > 0) {\r\n break;\r\n }\r\n }\r\n\r\n let formatter;\r\n if (candidates.length === 0) {\r\n // No match, so return a fallback text formatter.\r\n formatter = new TextFormatter(Object.values(registry)[0]);\r\n } else if (candidates.length === 1) {\r\n formatter = new TextFormatter(candidates[0]);\r\n } else {\r\n const bold = VF.Font.isBold(requestedFont.weight);\r\n const italic = VF.Font.isItalic(requestedFont.style);\r\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\r\n if (perfectMatch) {\r\n formatter = new TextFormatter(perfectMatch);\r\n } else {\r\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\r\n if (partialMatch) {\r\n formatter = new TextFormatter(partialMatch);\r\n } else {\r\n formatter = new TextFormatter(candidates[0]);\r\n }\r\n }\r\n }\r\n\r\n const fontSize = requestedFont.size;\r\n if (typeof fontSize !== 'undefined') {\r\n const fontSizeInPt = VF.Font.convertSizeToPointValue(fontSize);\r\n formatter.setFontSize(fontSizeInPt);\r\n }\r\n return formatter;\r\n }\r\n\r\n /**\r\n * @param fontFamily used as a key to the font registry.\r\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\r\n */\r\n static getInfo(fontFamily: string): TextFormatterInfo | undefined {\r\n return registry[fontFamily];\r\n }\r\n\r\n /**\r\n * Apps may register their own fonts and metrics, and those metrics\r\n * will be available to the app for formatting.\r\n *\r\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\r\n * @param info\r\n * @param overwrite\r\n */\r\n static registerInfo(info: TextFormatterInfo, overwrite: boolean = false): void {\r\n const fontFamily = info.family;\r\n const currFontInfo = registry[fontFamily];\r\n if (currFontInfo === undefined || overwrite) {\r\n registry[fontFamily] = info;\r\n }\r\n }\r\n\r\n /** Font family. */\r\n protected family: string = '';\r\n\r\n /** Specified in `pt` units. */\r\n protected size: number = 14;\r\n\r\n /** Font metrics are extracted at 1000 upem (units per em). */\r\n protected resolution: number = 1000;\r\n\r\n /**\r\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\r\n * bounding box metrics such as:\r\n * ```\r\n * {\r\n * x_min: 48,\r\n * x_max: 235,\r\n * y_min: -17,\r\n * y_max: 734,\r\n * ha: 751,\r\n * leftSideBearing: 48,\r\n * advanceWidth: 286,\r\n * }\r\n * ```\r\n */\r\n protected glyphs: Record = {};\r\n protected description?: string;\r\n protected serifs: boolean = false;\r\n protected monospaced: boolean = false;\r\n protected italic: boolean = false;\r\n protected bold: boolean = false;\r\n protected superscriptOffset: number = 0;\r\n protected subscriptOffset: number = 0;\r\n protected maxSizeGlyph: string = '@';\r\n\r\n // This is an internal key used to index the `textWidthCache`.\r\n protected cacheKey: string = '';\r\n\r\n /**\r\n * Use `TextFormatter.create(...)` to build an instance from information previously\r\n * registered via `TextFormatter.registerInfo(info)`.\r\n */\r\n private constructor(formatterInfo: TextFormatterInfo) {\r\n this.updateParams(formatterInfo);\r\n }\r\n get localHeightCache(): Record {\r\n if (textHeightCache[this.cacheKey] === undefined) {\r\n textHeightCache[this.cacheKey] = {};\r\n }\r\n return textHeightCache[this.cacheKey] ?? {};\r\n }\r\n updateParams(params: TextFormatterInfo): void {\r\n if (params.family) this.family = params.family;\r\n if (params.resolution) this.resolution = params.resolution;\r\n if (params.glyphs) this.glyphs = params.glyphs;\r\n if (params.serifs) this.serifs = params.serifs;\r\n if (params.monospaced) this.monospaced = params.monospaced;\r\n if (params.italic) this.italic = params.italic;\r\n if (params.bold) this.bold = params.bold;\r\n if (params.maxSizeGlyph) this.maxSizeGlyph = params.maxSizeGlyph;\r\n if (params.superscriptOffset) this.superscriptOffset = params.superscriptOffset;\r\n if (params.subscriptOffset) this.subscriptOffset = params.subscriptOffset;\r\n this.updateCacheKey();\r\n }\r\n\r\n /** Create a hash with the current font data, so we can cache computed widths. */\r\n updateCacheKey(): void {\r\n const family = this.family.replace(/\\s+/g, '_');\r\n const size = this.size;\r\n const weight = this.bold ? VF.FontWeight.BOLD : VF.FontWeight.NORMAL;\r\n const style = this.italic ? VF.FontStyle.ITALIC : VF.FontStyle.NORMAL;\r\n // Use the same key format as SVGContext.\r\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\r\n }\r\n\r\n /**\r\n * The glyphs table is indexed by the character (e.g., 'C', '@').\r\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\r\n */\r\n getGlyphMetrics(character: string): FontGlyph {\r\n if (this.glyphs[character]) {\r\n return this.glyphs[character];\r\n } else {\r\n return this.glyphs[this.maxSizeGlyph];\r\n }\r\n }\r\n\r\n get maxHeight(): number {\r\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\r\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\r\n * For the space character ' ' as defined in the:\r\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\r\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\r\n */\r\n getWidthForCharacterInEm(c: string): number {\r\n const metrics = this.getGlyphMetrics(c);\r\n if (!metrics) {\r\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\r\n return 0.65;\r\n } else {\r\n const advanceWidth = metrics.advanceWidth ?? 0;\r\n return advanceWidth / this.resolution;\r\n }\r\n }\r\n /**\r\n * Retrieve the character's y bounds (ymin, ymax) and height.\r\n */\r\n getYForCharacterInPx(c: string): yExtent {\r\n const metrics = this.getGlyphMetrics(c);\r\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n if (!metrics) {\r\n return rv;\r\n } else {\r\n if (typeof metrics.yMin === 'number') {\r\n rv.yMin = (metrics.yMin / this.resolution) * this.fontSizeInPixels;\r\n }\r\n if (typeof metrics.yMax === 'number') {\r\n rv.yMax = (metrics.yMax / this.resolution) * this.fontSizeInPixels;\r\n }\r\n rv.height = rv.yMax - rv.yMin;\r\n return rv;\r\n }\r\n }\r\n getYForStringInPx(str: string): yExtent {\r\n const entry = this.localHeightCache;\r\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n const cache = entry[str];\r\n if (cache !== undefined) {\r\n return cache;\r\n }\r\n for (let i = 0; i < str.length; ++i) {\r\n const curY = this.getYForCharacterInPx(str[i]);\r\n extent.yMin = Math.min(extent.yMin, curY.yMin);\r\n extent.yMax = Math.max(extent.yMax, curY.yMax);\r\n extent.height = extent.yMax - extent.yMin;\r\n }\r\n entry[str] = extent;\r\n return extent;\r\n }\r\n /**\r\n * Retrieve the total width of `text` in `em` units.\r\n */\r\n getWidthForTextInEm(text: string): number {\r\n const key = this.cacheKey;\r\n // Get the cache for this specific font family, size, weight, style combination.\r\n // The cache contains previously computed widths for different `text` strings.\r\n let cachedWidths = textWidthCache[key];\r\n if (cachedWidths === undefined) {\r\n cachedWidths = {};\r\n textWidthCache[key] = cachedWidths;\r\n }\r\n\r\n let width = cachedWidths[text];\r\n if (width === undefined) {\r\n width = 0;\r\n for (let i = 0; i < text.length; ++i) {\r\n width += this.getWidthForCharacterInEm(text[i]);\r\n }\r\n cachedWidths[text] = width;\r\n }\r\n return width;\r\n }\r\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\r\n getWidthForTextInPx(text: string): number {\r\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * @param size in pt.\r\n */\r\n setFontSize(size: number): this {\r\n this.size = size;\r\n // The width cache key depends on the current font size.\r\n this.updateCacheKey();\r\n return this;\r\n }\r\n\r\n /** `this.size` is specified in points. Convert to pixels. */\r\n get fontSizeInPixels(): number {\r\n return this.size * VF.Font.scaleToPxFrom.pt;\r\n }\r\n\r\n getResolution(): number {\r\n return this.resolution;\r\n }\r\n}\r\n","import { Vex as SmoVex, Note as VexNote, StaveNote as VexStaveNote, StemmableNote as VexStemmableNote, Beam as VexBeam, Tuplet as VexTuplet, \r\n Voice as VexVoice, Formatter as VexFormatter, Accidental as VexAccidental, \r\n Annotation as VexAnnotation, StaveNoteStruct as VexStaveNoteStruct, \r\n StaveText as VexStaveText, StaveModifier as VexStaveModifier,\r\nStave as VexStave, StaveModifierPosition as VexStaveModifierPosition,\r\nFont as VexFont, FontInfo as VexFontInfo, FontStyle as VexFontStyle, FontWeight as VexFontWeight,\r\nTupletOptions as VexTupletOptions, Curve as VexCurve, StaveTie as VexStaveTie,\r\n Music as VexMusic, ChordSymbol as VexChordSymbol, ChordSymbolBlock as VexChordSymbolBlock } from \"vexflow_smoosic\";\r\n\r\n /**\r\n * Module vex.ts. This handles vexflow calls and structures that have changed \r\n * between v4 and v5. There will be a custom version of this file for each.\r\n * Most of the differences are trivial - e.g. different naming conventions for variables.\r\n */\r\nimport { smoSerialize } from \"./serializationHelpers\";\r\n// export type Vex = SmoVex;\r\nexport const VexFlow = SmoVex.Flow;\r\nconst VF = VexFlow;\r\nexport type Music = VexMusic;\r\nexport type Note = VexNote;\r\nexport type StaveNote = VexStaveNote;\r\nexport type StemmableNote = VexStemmableNote;\r\nexport type Beam = VexBeam;\r\nexport type Tuplet = VexTuplet;\r\nexport type TupletOptions = VexTupletOptions;\r\nexport type Voice = VexVoice;\r\nexport type Accidental = VexAccidental;\r\nexport type Font = VexFont;\r\nexport type FontInfo = VexFontInfo;\r\nexport type FontStyle = VexFontStyle;\r\nexport type FontWeight = VexFontWeight;\r\nexport type Formatter = VexFormatter;\r\nexport type Annotation = VexAnnotation;\r\nexport type StaveNoteStruct = VexStaveNoteStruct;\r\nexport type StaveModifier = VexStaveModifier;\r\nexport type StaveText = VexStaveText;\r\nexport type Stave = VexStave;\r\nexport type Curve = VexCurve;\r\nexport type StaveTie = VexStaveTie;\r\nexport type StaveModifierPosition = VexStaveModifierPosition;\r\n\r\n\r\nexport interface GlyphInfo {\r\n width: number,\r\n height: number,\r\n yTop: number,\r\n yBottom: number,\r\n spacingRight: number,\r\n vexGlyph: string | null\r\n}\r\n\r\n// DI interfaces to create vexflow objects\r\nexport interface CreateVexNoteParams {\r\n isTuplet: boolean, measureIndex: number, clef: string,\r\n closestTicks: string, exactTicks: string, keys: string[],\r\n noteType: string\r\n}; \r\n\r\n export interface SmoVexTupletParams {\r\n vexNotes: Note[],\r\n numNotes: number,\r\n notesOccupied: number,\r\n location: number\r\n};\r\n\r\nexport function chordSubscriptOffset() {\r\n return VF.ChordSymbol.subscriptOffset;\r\n}\r\nexport function chordSuperscriptOffset() {\r\n return VF.ChordSymbol.superscriptOffset;\r\n}\r\nexport interface SmoVexVoiceParams {\r\n actualBeats: number,\r\n beatDuration: number,\r\n notes: Note[]\r\n}\r\nexport function createVoice(params: SmoVexVoiceParams) {\r\n const voice = new VF.Voice({\r\n num_beats: params.actualBeats,\r\n beat_value: params.beatDuration\r\n }).setMode(VF.Voice.Mode.SOFT);\r\n voice.addTickables(params.notes);\r\n return voice;\r\n}\r\nexport interface SmoVexStaveParams {\r\n x: number,\r\n y: number,\r\n padLeft: number,\r\n id: string,\r\n staffX: number,\r\n staffY: number,\r\n staffWidth: number,\r\n forceClef: boolean,\r\n clef: string,\r\n forceKey: boolean,\r\n key: string,\r\n canceledKey: string | null,\r\n startX: number,\r\n adjX: number,\r\n context: any\r\n}\r\n/**\r\n * Vex4 and Vex5 handle width differently. Vex5, width comes directly from the \r\n * font glyph, vex4 the glyph is a path so it comes from the stored information about \r\n * the path.\r\n * \r\n * @param smoGlyph \r\n * @returns \r\n */\r\nexport function getGlyphWidth(smoGlyph: GlyphInfo) {\r\n if (smoGlyph.vexGlyph) {\r\n /* const vexGlyph = (VF.Glyphs as Record)[smoGlyph.vexGlyph];\r\n if (vexGlyph) {\r\n return VF.Element.measureWidth(vexGlyph);\r\n }\r\n return VF.Element.measureWidth(smoGlyph.vexGlyph); */\r\n const vf = VF.Glyph.MUSIC_FONT_STACK[0].getGlyphs()[smoGlyph.vexGlyph];\r\n return (vf.x_max - vf.x_min) * glyphPixels();\r\n } \r\n return smoGlyph.width;\r\n}\r\n/**\r\n * V4 uses the glyph name, V5 uses the unicode value\r\n * @returns \r\n */\r\nexport function getSlashGlyph() {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getRepeatBar() {\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getMultimeasureRest(multimeasureLength: number) {\r\n return new VF.MultiMeasureRest(multimeasureLength,\r\n // { numberOfMeasures: this.smoMeasure.svg.multimeasureLength });\r\n { number_of_measures: multimeasureLength });\r\n}\r\nexport function pitchToLedgerLine(vexPitch: string, clef: string) {\r\n return -1.0 * (VF.keyProperties(vexPitch).line - 4.5)\r\n - VF.clefProperties(clef).line_shift;\r\n}\r\nexport function vexCanonicalNotes(): any {\r\n // return VF.Music.canonicalNotes[SmoMusic.noteValues[vexKey].int_val];\r\n return VF.Music.canonical_notes;\r\n}\r\nexport function createStave(params: SmoVexStaveParams) {\r\n const stave = new VF.Stave(params.x, params.y, params.staffWidth - params.padLeft);\r\n stave.setAttribute('id', params.id);\r\n // If there is padLeft, draw an invisible box so the padding is included in the measure box\r\n if (params.padLeft) {\r\n params.context.rect(params.staffX, params.y, params.padLeft, 50, {\r\n fill: 'none', 'stroke-width': 1, stroke: 'white'\r\n });\r\n }\r\n // stave.options.spaceAboveStaffLn = 0; // don't let vex place the staff, we want to.\r\n stave.options.space_above_staff_ln = 0; // don't let vex place the staff, we want to.\r\n // Add a clef and time signature.\r\n if (params.forceClef) {\r\n stave.addClef(params.clef);\r\n }\r\n if (params.forceKey) {\r\n const sig = new VF.KeySignature(params.key);\r\n if (params.canceledKey) {\r\n sig.cancelKey(params.canceledKey);\r\n }\r\n sig.addToStave(stave);\r\n }\r\n const curX = stave.getNoteStartX();\r\n stave.setNoteStartX(curX + (params.startX - params.adjX)); \r\n\r\n return stave;\r\n}\r\n\r\nexport function getVexTuplets(params: SmoVexTupletParams) {\r\n const vexTuplet = new VF.Tuplet(params.vexNotes, {\r\n num_notes: params.numNotes,\r\n notes_occupied: params.notesOccupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: params.location\r\n });\r\n return vexTuplet;\r\n}\r\nexport function getVexNoteParameters(params: CreateVexNoteParams) {\r\n // If this is a tuplet, we only get the duration so the appropriate stem\r\n // can be rendered. Vex calculates the actual ticks later when the tuplet is made\r\n var duration =\r\n params.isTuplet ?\r\n params.closestTicks :\r\n params.exactTicks;\r\n if (typeof (duration) === 'undefined') {\r\n console.warn('bad duration in measure ' + params.measureIndex);\r\n duration = '8';\r\n } \r\n // transpose for instrument-specific keys\r\n const noteParams: StaveNoteStruct = {\r\n clef: params.clef,\r\n keys: params.keys,\r\n duration: duration + params.noteType\r\n };\r\n return { noteParams, duration };\r\n}\r\nexport interface SmoVexStemParams {\r\n voiceCount: number,\r\n voiceIx: number,\r\n isAuto: boolean,\r\n isUp: boolean\r\n}\r\nexport function applyStemDirection(params: SmoVexStemParams, vxParams: StaveNoteStruct) {\r\n if (params.voiceCount === 1 && params.isAuto) {\r\n vxParams.auto_stem = true;\r\n } else if (!params.isAuto) {\r\n vxParams.stem_direction = params.isUp ? 1 : -1;\r\n } else if (params.voiceIx % 2) {\r\n vxParams.stem_direction = -1;\r\n } else {\r\n vxParams.stem_direction = 1;\r\n }\r\n}\r\nconst setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n};\r\nexport function createStaveText(text: string, position: number, options: any) {\r\n return new VexStaveText(text, position, options);\r\n}\r\nexport interface SmoVexHairpinParams {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n hairpinType: number,\r\n height: number,\r\n yOffset: number,\r\n leftShiftPx: number,\r\n rightShiftPx: number\r\n}\r\nexport function createHairpin(params: SmoVexHairpinParams) {\r\n const vexParams: Record = {};\r\n if (params.vxStart) {\r\n vexParams.first_note = params.vxStart;\r\n }\r\n if (params.vxEnd) {\r\n vexParams.last_note = params.vxEnd;\r\n }\r\n const hairpin = new VF.StaveHairpin(\r\n vexParams, params.hairpinType);\r\n hairpin.setRenderOptions({\r\n height: params.height,\r\n y_shift: params.yOffset,\r\n left_shift_px: params.leftShiftPx,\r\n right_shift_px: params.rightShiftPx\r\n });\r\n return hairpin;\r\n}\r\nexport interface SmoVexSlurParameters {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n thickness: number,\r\n xShift: number,\r\n yShift: number,\r\n cps: DOMPoint[],\r\n invert: boolean,\r\n position: number,\r\n positionEnd: number\r\n}\r\nexport const defaultMeasurePadding = VF.Stave.defaultPadding;\r\nexport function createSlur(params: SmoVexSlurParameters): Curve {\r\n if (params.vxStart === null && params.vxEnd === null) {\r\n throw(' slur with no points');\r\n }\r\n const vxStart = setSameIfNull(params.vxStart, params.vxEnd);\r\n const vxEnd = setSameIfNull(params.vxEnd, params.vxStart);\r\n const curve = new VF.Curve(vxStart!, vxEnd!,\r\n {\r\n thickness: params.thickness,\r\n x_shift: params.xShift,\r\n y_shift: params.yShift,\r\n cps: params.cps,\r\n invert: params.invert,\r\n position: params.position,\r\n position_end: params.positionEnd\r\n });\r\n return curve;\r\n}\r\nexport interface SmoVexTieParams {\r\n fromLines: number[],\r\n toLines: number[],\r\n firstNote: Note | null,\r\n lastNote: Note | null,\r\n vexOptions: any\r\n}\r\nexport function createTie(params: SmoVexTieParams): StaveTie {\r\n const fromLines = params.fromLines;\r\n const toLines = params.toLines;\r\n const tie = new VF.StaveTie({\r\n first_note: params.firstNote,\r\n last_note: params.lastNote,\r\n first_indices: fromLines,\r\n last_indices: toLines\r\n });\r\n smoSerialize.vexMerge(tie.render_options, params.vexOptions);\r\n return tie;\r\n}\r\nexport const defaultNoteScale: number = 30;\r\nexport const defaultCueScale: number = 19.8;\r\n\r\nexport function glyphPixels() {\r\n return 96 * (defaultNoteScale / (VF.Glyph.MUSIC_FONT_STACK[0].getResolution() * 72));\r\n // return defaultNoteScale;\r\n}\r\n\r\nexport function setFontStack(font: string) {\r\n const fs: Record void> = {\r\n /* Bravura: () => { VexFlow.setFonts('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setFonts('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setFonts('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setFonts('Leland', 'Bravura', 'Gonville', 'Custom'); } */\r\n Bravura: () => { VexFlow.setMusicFont('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setMusicFont('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setMusicFont('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setMusicFont('Leland', 'Bravura', 'Gonville', 'Custom'); }\r\n };\r\n fs[font]();\r\n}\r\n/**\r\n * Render a dynamics glyph. Return the height of width/height of the glyph\r\n * @param context \r\n * @param text \r\n * @param fontSize \r\n * @param x \r\n * @param y \r\n * @returns \r\n */\r\nexport function renderDynamics(context: any, text: string, fontSize: number, x: number, y: number) {\r\n /* const glyph = new VF.Element();\r\n glyph.setText(text);\r\n glyph.setFontSize(fontSize);\r\n glyph.renderText(context, x, y);\r\n return { width: glyph.getWidth(), height: glyph.getHeight() };*/\r\n const glyph = new VF.Glyph(text, fontSize);\r\n glyph.render(context, x, y);\r\n // vex 5 incompatibility.\r\n // x += VF.TextDynamics.GLYPHS[text].width;\r\n const metrics = glyph.getMetrics();\r\n return { width: metrics.width, height: metrics.height }; \r\n}\r\nexport function getOrnamentGlyph(glyph: string) {\r\n return glyph;\r\n // return vexOrnaments[glyph];\r\n}\r\n\r\nexport function addChordGlyph(cs: VexChordSymbol, symbol: string) {\r\n cs.addGlyph(symbol);\r\n}\r\n/**\r\n * get a glyph code to render\r\n * @param code \r\n * @returns \r\n */\r\nexport function getVexGlyphFromChordCode(code: string) {\r\n if (code === 'csymDiminished' || code === 'csymHalfDiminished' || code === 'csymAugmented' || code === 'csymMajorSeventh') {\r\n return code;\r\n }\r\n return ChordSymbolGlyphs[code].code;\r\n}\r\n/**\r\n * Get the chord symbol glyph from the vex glyph\r\n * @export\r\n * @param {string} code\r\n * @return {*} \r\n */\r\nexport function getChordSymbolGlyphFromCode(code: string) {\r\n const keys = Object.keys(ChordSymbolGlyphs);\r\n const rv = keys.find((key) => ChordSymbolGlyphs[key].code === code);\r\n if (typeof(rv) === 'string') {\r\n return rv;\r\n }\r\n return code;\r\n}\r\nexport function getChordSymbolMetricsForGlyph(code: string) {\r\n if (code === 'b') {\r\n code = 'accidentalFlat';\r\n }\r\n if (code === '#') {\r\n code = 'accidentalSharp';\r\n }\r\n const glyphMetrics = VexChordSymbol.metrics.glyphs;\r\n return glyphMetrics[code];\r\n}\r\n/**\r\n * Vex 5 compatibility. yShift\r\n */\r\nexport function blockMetricsYShift(metrics: any) {\r\n return metrics.y_shift;\r\n}\r\n// Glyph data. Note Vex4 and Vex5 have different requirements. Vex5 expects the unicode identifier (16-bit number)\r\n// where vex4 expects a string glyph\r\nexport const ChordSymbolGlyphs: Record = {\r\n diminished: {\r\n code: 'csymDiminished',\r\n },\r\n dim: {\r\n code: 'csymDiminished',\r\n },\r\n halfDiminished: {\r\n code: 'csymHalfDiminished',\r\n },\r\n '+': {\r\n code: 'csymAugmented',\r\n },\r\n augmented: {\r\n code: 'csymAugmented',\r\n },\r\n majorSeventh: {\r\n code: 'csymMajorSeventh',\r\n },\r\n csymMinor: {\r\n code: 'csymMinor',\r\n },\r\n minor: {\r\n code: 'csymMinor',\r\n },\r\n '-': {\r\n code: 'csymMinor',\r\n },\r\n '(': {\r\n code: 'csymParensLeftTall',\r\n }, \r\n leftParen: {\r\n code: 'csymParensLeftTall',\r\n },\r\n ')': {\r\n code: 'csymParensRightTall',\r\n },\r\n rightParen: {\r\n code: 'csymParensRightTall',\r\n },\r\n leftBracket: {\r\n code: 'csymBracketLeftTall',\r\n },\r\n rightBracket: {\r\n code: 'csymBracketRightTall',\r\n }, \r\n leftParenTall: {\r\n code: 'csymParensLeftVeryTall',\r\n }, rightParenTall: {\r\n code: 'csymParensRightVeryTall',\r\n },\r\n '/': {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n over: {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n '#': {\r\n code: 'accidentalSharp',\r\n },\r\n b: {\r\n code: 'accidentalFlat',\r\n },\r\n};\r\nexport const vexOrnaments: Record = {\r\n mordent: '\\ue56c' /*ornamentShortTrill*/,\r\n mordent_inverted: '\\ue56d' /*ornamentMordent*/,\r\n turn: '\\ue567' /*ornamentTurn*/,\r\n turn_inverted: '\\ue569' /*ornamentTurnSlash*/,\r\n tr: '\\ue566' /*ornamentTrill*/,\r\n upprall: '\\ue5b5' /*ornamentPrecompSlideTrillDAnglebert*/,\r\n downprall: '\\ue5c3' /*ornamentPrecompDoubleCadenceUpperPrefix*/,\r\n prallup: '\\ue5bb' /*ornamentPrecompTrillSuffixDandrieu*/,\r\n pralldown: '\\ue5c8' /*ornamentPrecompTrillLowerSuffix*/,\r\n upmordent: '\\ue5b8' /*ornamentPrecompSlideTrillBach*/,\r\n downmordent: '\\ue5c4' /*ornamentPrecompDoubleCadenceUpperPrefixTurn*/,\r\n lineprall: '\\ue5b2' /*ornamentPrecompAppoggTrill*/,\r\n prallprall: '\\ue56e' /*ornamentTremblement*/,\r\n scoop: '\\ue5d0' /*brassScoop*/,\r\n doit: '\\ue5d5' /*brassDoitMedium*/,\r\n fall: '\\ue5d7' /*brassFallLipShort*/,\r\n doitLong: '\\ue5d2' /*brassLiftMedium*/,\r\n fallLong: '\\ue5de' /*brassFallRoughMedium*/,\r\n bend: '\\ue5e3' /*brassBend*/,\r\n plungerClosed: '\\ue5e5' /*brassMuteClosed*/,\r\n plungerOpen: '\\ue5e7' /*brassMuteOpen*/,\r\n flip: '\\ue5e1' /*brassFlip*/,\r\n jazzTurn: '\\ue5e4' /*brassJazzTurn*/,\r\n smear: '\\ue5e2' /*brassSmear*/,\r\n}","import { SmoSelector, SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\n\r\n/**\r\n * A generic function that can be sent used to animate playback\r\n */\r\nexport type AudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => void;\r\n/**\r\n * A generic function that can be sent used to clean up playback animation\r\n */\r\nexport type ClearAudioAnimationHandler = (delay: number) => void;\r\n\r\n/**\r\n * Allow users to specify their own music playback animations.\r\n * @category SuiAudio\r\n*/\r\nexport interface SuiAudioAnimationParams {\r\n audioAnimationHandler: AudioAnimationHandler,\r\n clearAudioAnimationHandler: ClearAudioAnimationHandler\r\n}\r\nexport const defaultClearAudioAnimationHandler = (delay: number) => {\r\n if (delay < 1) {\r\n const ell = document.getElementById('vf-music-cursor');\r\n if (ell) {\r\n ell.remove();\r\n }\r\n } else {\r\n setTimeout(() => {\r\n defaultClearAudioAnimationHandler(0);\r\n }, delay);\r\n }\r\n}\r\n /**\r\n * default implementation of playback animation.\r\n * @param selector \r\n * @returns \r\n */\r\n export const defaultAudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => {\r\n const score = view.renderer.score;\r\n \r\n if (!score) {\r\n return;\r\n }\r\n const scroller = view.scroller;\r\n const renderer = view.renderer;\r\n // Get note from 0th staff if we can\r\n const measureSel = SmoSelection.measureSelection(score,\r\n score.staves.length - 1, selector.measure);\r\n const zmeasureSel = SmoSelection.measureSelection(score,\r\n 0, selector.measure);\r\n const measure = measureSel?.measure as SmoMeasure;\r\n if (measure.svg.logicalBox && zmeasureSel?.measure?.svg?.logicalBox) {\r\n const context = renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n const topBox = SvgHelpers.smoBox(zmeasureSel.measure.svg.logicalBox);\r\n topBox.y -= context.box.y;\r\n const botBox = SvgHelpers.smoBox(measure.svg.logicalBox);\r\n botBox.y -= context.box.y;\r\n const height = (botBox.y + botBox.height) - topBox.y;\r\n const measureWidth = botBox.width - measure.svg.adjX;\r\n const nhWidth = 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n let width = measureWidth * durationPct - 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n width = Math.max(nhWidth, width);\r\n const y = topBox.y;\r\n let x = topBox.x + measure.svg.adjX + offsetPct * measureWidth;\r\n const noteBox = score.staves[selector.staff].measures[selector.measure].voices[selector.voice].notes[selector.tick];\r\n if (noteBox && noteBox.logicalBox) {\r\n x = noteBox.logicalBox.x;\r\n }\r\n const screenBox = SvgHelpers.boxPoints(x, y, width, height);\r\n const fillParams: Record = {};\r\n fillParams['fill-opacity'] = '0.5';\r\n fillParams['fill'] = '#4444ff';\r\n const ctx = context.getContext();\r\n defaultClearAudioAnimationHandler(0);\r\n ctx.save();\r\n ctx.openGroup('music-cursor', 'music-cursor');\r\n ctx.rect(x, screenBox.y, width, screenBox.height, fillParams);\r\n ctx.closeGroup();\r\n ctx.restore();\r\n layoutDebug.updatePlayDebug(selector, measure.svg.logicalBox);\r\n scroller.scrollVisibleBox(zmeasureSel.measure.svg.logicalBox); \r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoOscillatorInfo } from '../../smo/data/staffModifiers';\r\nimport { SuiSampleMedia, AudioSample } from './samples';\r\n\r\n/**\r\n * Create audio reverb node.\r\n * @category SuiAudio\r\n */\r\nexport class SuiReverb {\r\n static get defaults() {\r\n return { length: 0.2, decay: 2 };\r\n }\r\n static impulse: AudioBuffer | null;\r\n\r\n connect(destination: AudioNode) {\r\n this.output.connect(destination);\r\n }\r\n\r\n disconnect() {\r\n this.output.disconnect();\r\n this.input.disconnect();\r\n }\r\n\r\n // credit: https://github.com/nick-thompson\r\n _buildImpulse() {\r\n let n = 0;\r\n let i = 0;\r\n if (SuiReverb.impulse) {\r\n this.input.buffer = SuiReverb.impulse;\r\n return;\r\n }\r\n\r\n const rate = this._context.sampleRate;\r\n const length = rate * this.length;\r\n const decay = this.decay;\r\n const impulse = this._context.createBuffer(2, length, rate);\r\n const impulseL = impulse.getChannelData(0);\r\n const impulseR = impulse.getChannelData(1);\r\n\r\n for (i = 0; i < length; i++) {\r\n n = this.reverse ? length - i : i;\r\n impulseL[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n impulseR[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n }\r\n SuiReverb.impulse = impulse;\r\n\r\n this.input.buffer = impulse;\r\n }\r\n output: ConvolverNode;\r\n input: ConvolverNode;\r\n length: number;\r\n decay: number;\r\n damp: number = 1.0;\r\n reverse: boolean = false;\r\n _context: AudioContext;\r\n constructor(context: AudioContext) {\r\n this.input = this.output = context.createConvolver();\r\n this.length = SuiReverb.defaults.length;\r\n this.decay = SuiReverb.defaults.decay;\r\n this._context = context;\r\n this._buildImpulse();\r\n }\r\n}\r\n\r\n/**\r\n * Audio custom osc node. Not used much.\r\n */\r\nexport interface WaveTable {\r\n real: number[],\r\n imaginary: number[]\r\n}\r\n/**\r\n * Parameters to create an oscillator for a single note of music\r\n * @category SuiAudio\r\n */\r\nexport interface SuiOscillatorParams {\r\n duration: number,\r\n frequency: number,\r\n attackEnv: number,\r\n decayEnv: number,\r\n sustainEnv: number,\r\n releaseEnv: number,\r\n sustainLevel: number,\r\n releaseLevel: number,\r\n waveform: OscillatorType,\r\n gain: number,\r\n wavetable?: WaveTable,\r\n useReverb: boolean,\r\n instrument: string\r\n}\r\n\r\nexport const SynthWavetable: WaveTable = {\r\n real: [0,\r\n 0.3, 0.3, 0, 0, 0,\r\n 0.1, 0, 0, 0, 0,\r\n 0.05, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0],\r\n imaginary: [0,\r\n 0, 0.05, 0, 0, 0,\r\n 0, 0.01, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0]\r\n};\r\n/**\r\n * Simple waveform synthesizer thing that plays notes. Oscillator works in either\r\n * analog synthisizer or sampler mode.\r\n * @category SuiAudio\r\n */\r\nexport abstract class SuiOscillator {\r\n static audio: AudioContext = new AudioContext();\r\n static created: number = 0;\r\n static get defaults(): SuiOscillatorParams {\r\n const wavetable: WaveTable = {\r\n real: [], imaginary: []\r\n };\r\n const obj = {\r\n duration: 1000,\r\n frequency: 440,\r\n attackEnv: 0.05,\r\n decayEnv: 0.4,\r\n sustainEnv: 0.8,\r\n releaseEnv: 0.25,\r\n sustainLevel: 0.5,\r\n releaseLevel: 0.1,\r\n waveform: 'custom',\r\n gain: 0.2,\r\n wavetable,\r\n useReverb: false,\r\n instrument: 'piano'\r\n };\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n static sampleFiles: string[] = ['bb4', 'cn4'];\r\n static samples: AudioSample[] = [];\r\n static playSelectionNow(selection: SmoSelection, score: SmoScore, gain: number) {\r\n // In the midst of re-rendering...\r\n if (!selection.note) {\r\n return;\r\n }\r\n if (selection.note.isRest() || selection.note.isSlash() || selection.note.isHidden()) {\r\n return;\r\n }\r\n const soundInfo = selection.staff.getStaffInstrument(selection.selector.measure);\r\n const oscInfo = SuiSampleMedia.getSmoOscillatorInfo(soundInfo.instrument);\r\n setTimeout(() => {\r\n const ar = SuiOscillator.fromNote(selection.measure, selection.note!, score, oscInfo[0], gain);\r\n ar.forEach((osc) => {\r\n osc.play();\r\n });\r\n }, 1);\r\n }\r\n\r\n static get attackTime() {\r\n return 25;\r\n }\r\n static get decayTime() {\r\n return 15;\r\n }\r\n // ### fromNote\r\n // Create an areray of oscillators for each pitch in a note\r\n static fromNote(measure: SmoMeasure, note: SmoNote, score: SmoScore, soundInfo: SmoOscillatorInfo, gain: number): SuiOscillator[] {\r\n let frequency = 0;\r\n let duration = 0;\r\n const tempo = measure.getTempo();\r\n const bpm = tempo.bpm;\r\n const beats = note.tickCount / 4096;\r\n duration = (beats / bpm) * 60000;\r\n\r\n // adjust if bpm is over something other than 1/4 note\r\n duration = duration * (4096 / tempo.beatDuration);\r\n if (soundInfo.waveform === 'sample') {\r\n duration = 250;\r\n }\r\n\r\n const ar: SuiOscillator[] = [];\r\n gain = isNaN(gain) ? 0.2 : gain;\r\n gain = gain / note.pitches.length;\r\n if (note.noteType === 'r') {\r\n gain = 0.001;\r\n }\r\n note.pitches.forEach((pitch, pitchIx) => {\r\n const mtone: SmoMicrotone | null = note.getMicrotone(pitchIx) ?? null;\r\n frequency = SmoAudioPitch.smoPitchToFrequency(pitch, -1 * measure.transposeIndex, mtone);\r\n const def = SuiOscillator.defaults;\r\n def.instrument = soundInfo.instrument;\r\n def.frequency = frequency;\r\n def.duration = duration;\r\n def.gain = gain;\r\n if (soundInfo.waveform !== 'sample') {\r\n def.waveform = soundInfo.waveform;\r\n if (def.waveform === 'custom') {\r\n def.wavetable = SynthWavetable;\r\n }\r\n const osc = new SuiWavetable(def);\r\n ar.push(osc);\r\n } else {\r\n const osc = new SuiSampler(def);\r\n ar.push(osc);\r\n }\r\n });\r\n\r\n return ar;\r\n }\r\n\r\n static get attributes() {\r\n return ['duration', 'frequency', 'pitch', 'attackEnv', 'sustainEnv', 'decayEnv',\r\n 'releaseEnv', 'sustainLevel', 'releaseLevel', 'waveform', 'wavetable', 'gain'];\r\n }\r\n \r\n static resolveAfter(time: number) {\r\n return new Promise((resolve) => {\r\n const timerFunc = () => {\r\n resolve();\r\n }\r\n setTimeout(() => {\r\n timerFunc();\r\n }, time);\r\n });\r\n }\r\n _playPromise(duration: number, gain: GainNode) {\r\n const audio = SuiOscillator.audio;\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, duration + 500);\r\n });\r\n return promise;\r\n }\r\n\r\n static toFloatArray(ar: number[]): Float32Array {\r\n const rv = new Float32Array(ar.length);\r\n let i = 0;\r\n for (i = 0; i < ar.length; ++i) {\r\n rv[i] = ar[i];\r\n }\r\n return rv;\r\n }\r\n reverb: SuiReverb | null;\r\n attack: number;\r\n decay: number;\r\n sustain: number;\r\n release: number;\r\n waveform: OscillatorType;\r\n attackEnv: number = -1;\r\n duration: number = -1;\r\n decayEnv: number = -1;\r\n sustainEnv: number = -1;\r\n releaseEnv: number = -1;\r\n gain: number = 1.0;\r\n sustainLevel: number = 0;\r\n releaseLevel: number = 0;\r\n frequency: number = -1;\r\n wavetable: WaveTable | null = null;\r\n useReverb: boolean;\r\n gainNode: GainNode | undefined;\r\n delayNode: DelayNode | undefined;\r\n instrument: string;\r\n osc: AudioScheduledSourceNode | undefined;\r\n constructor(parameters: SuiOscillatorParams) {\r\n smoSerialize.serializedMerge(SuiOscillator.attributes, parameters, this);\r\n this.reverb = null;\r\n // this.reverb = null;\r\n this.attack = this.attackEnv * SuiOscillator.attackTime;\r\n this.decay = this.decayEnv * SuiOscillator.decayTime;\r\n this.sustain = this.sustainEnv * this.duration;\r\n this.release = this.releaseEnv * this.duration;\r\n this.instrument = parameters.instrument;\r\n if (parameters.wavetable) {\r\n this.wavetable = parameters.wavetable;\r\n }\r\n this.useReverb = parameters.useReverb;\r\n // this.frequency = this.frequency / 2; // Overtones below partial\r\n this.waveform = parameters.waveform;\r\n if (!parameters.wavetable && this.waveform === 'custom') {\r\n this.waveform = 'sine';\r\n }\r\n }\r\n abstract play(): Promise;\r\n abstract createAudioNode(): AudioScheduledSourceNode;\r\n\r\n disconnect() {\r\n if (this.osc) {\r\n this.osc.disconnect();\r\n }\r\n if (this.gainNode) {\r\n this.gainNode.disconnect();\r\n }\r\n if (this.delayNode) {\r\n this.delayNode.disconnect();\r\n }\r\n if (this.reverb) {\r\n this.reverb.disconnect();\r\n }\r\n SuiOscillator.created -= 1;\r\n }\r\n\r\n /**\r\n * Connect the audio sound source to the output, combining other\r\n * nodes in the mix such as convolver (reverb), delay, and gain.\r\n * Also set up the envelope\r\n * @returns - a promise that tis resolved when `duration` time has expired\r\n */\r\n async createAudioGraph(): Promise {\r\n if (this.frequency === 0) {\r\n return SuiSampler.resolveAfter(this.duration);\r\n }\r\n const audio = SuiOscillator.audio;\r\n const attack = this.attack / 1000;\r\n const decay = this.decay / 1000;\r\n const sustain = this.sustain / 1000;\r\n const release = this.release / 1000;\r\n this.gainNode = audio.createGain();\r\n this.osc = this.createAudioNode();\r\n const gp1 = this.gain;\r\n\r\n if (this.useReverb) {\r\n this.reverb = new SuiReverb(SuiOscillator.audio);\r\n }\r\n\r\n if (this.useReverb && this.reverb) {\r\n this.delayNode = audio.createDelay(this.reverb.length);\r\n }\r\n this.gainNode.gain.exponentialRampToValueAtTime(gp1, audio.currentTime + attack);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.sustainLevel * gp1, audio.currentTime + attack + decay);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.releaseLevel * gp1, audio.currentTime + attack + decay + sustain);\r\n this.gainNode.gain.exponentialRampToValueAtTime(0.001, audio.currentTime + attack + decay + sustain + release);\r\n\r\n // osc.connect(gain1);\r\n if (this.useReverb && this.reverb && this.osc) {\r\n this.osc.connect(this.reverb.input);\r\n }\r\n this.osc.connect(this.gainNode);\r\n if (this.delayNode && this.reverb) {\r\n this.reverb.connect(this.delayNode);\r\n this.delayNode.connect(audio.destination);\r\n }\r\n this.gainNode.connect(audio.destination);\r\n SuiOscillator.created += 1;\r\n return this.playPromise(this.duration);\r\n }\r\n playPromise(duration: number): Promise {\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, Math.round(duration * 1.05));\r\n });\r\n return promise;\r\n }\r\n}\r\n/**\r\n * An audio output that uses browser audio api OscillatorNode as a sound source\r\n * @category SuiAudio\r\n */\r\nexport class SuiWavetable extends SuiOscillator {\r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createOscillator();\r\n if (this.wavetable && this.wavetable.imaginary.length > 0 && this.wavetable.real.length > 0 && this.waveform === 'custom') {\r\n const wave = SuiOscillator.audio.createPeriodicWave(SuiOscillator.toFloatArray(this.wavetable.real),\r\n SuiOscillator.toFloatArray(this.wavetable.imaginary),\r\n { disableNormalization: false });\r\n node.setPeriodicWave(wave);\r\n } else {\r\n node.type = this.waveform;\r\n }\r\n node.frequency.value = this.frequency;\r\n return node;\r\n }\r\n // play the audio oscillator for the specified duration. Return a promise that\r\n // resolves after the duration. Also dispose of the audio resources after the play is complete.\r\n async play() {\r\n return this.createAudioGraph();\r\n }\r\n}\r\n\r\n/**\r\n * An audio output primitive that uses frequency-adjusted sampled sounds\r\n */\r\nexport class SuiSampler extends SuiOscillator {\r\n constructor(params: SuiOscillatorParams) {\r\n super(params);\r\n if (SuiSampleMedia.sampleOscMap[this.instrument]) {\r\n const sampleInfo = SuiSampleMedia.sampleOscMap[this.instrument];\r\n if (sampleInfo.length) {\r\n if (sampleInfo[0].sustain === 'sustained') {\r\n this.attack = 0.1 * this.duration;\r\n }\r\n }\r\n }\r\n }\r\n // Note: samplePromise must be complete before you call this \r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createBufferSource();\r\n const chooserParams = {\r\n instrument: this.instrument,\r\n frequency: this.frequency,\r\n duration: this.duration,\r\n gain: this.gain\r\n }\r\n const sample = SuiSampleMedia.matchedSample(chooserParams);\r\n if (!sample) {\r\n return node;\r\n }\r\n \r\n const cents = 1200 * (Math.log(this.frequency / sample!.frequency))\r\n / Math.log(2);\r\n this.gain = this.gain * sample.gain;\r\n node.buffer = sample!.sample;\r\n node.detune.value = cents; \r\n return node;\r\n }\r\n async play() {\r\n const self = this;\r\n return SuiSampleMedia.samplePromise(SuiOscillator.audio).then(() => {\r\n self.createAudioGraph();\r\n });\r\n }\r\n\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiOscillator, SuiSampler, SuiWavetable, SynthWavetable } from './oscillator';\r\nimport { SmoAudioScore } from '../../smo/xform/audioTrack';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SuiAudioAnimationParams } from './musicCursor';\r\n\r\n/**\r\n * Create audio player for the score from the start point\r\n * @category SuiAudio\r\n */\r\nexport interface SuiAudioPlayerParams {\r\n startIndex: number,\r\n view: SuiScoreView,\r\n score: SmoScore,\r\n audioAnimation: SuiAudioAnimationParams\r\n}\r\n/**\r\n * Parameters used to create just-in-time oscillators\r\n * @category SuiAudio\r\n */\r\nexport interface SoundParams {\r\n frequencies: number[],\r\n duration: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n volume: number,\r\n noteType: string,\r\n instrument: string,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of sound parameters for just-in-time oscillator creation\r\n * @category SuiAudio\r\n */\r\n export interface SoundParamMeasureLink {\r\n soundParams: Record,\r\n endTicks: number,\r\n next: SoundParamMeasureLink | null\r\n}\r\n/**\r\n * A set of oscillators to be played at a certain time.\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioContext {\r\n oscs: SuiOscillator[],\r\n playMeasureIndex: number,\r\n playTickIndex: number,\r\n waitTime: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of oscillators. We keep them in a list until played so we \r\n * can GC them if playing is cancelled\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioLink {\r\n sound: CuedAudioContext;\r\n next: CuedAudioLink | null;\r\n}\r\n/**\r\n * Maintain a list of buffers ready to play, since this is a \r\n * system resource.\r\n * @category SuiAudio\r\n */\r\nexport class CuedAudioContexts {\r\n soundHead: CuedAudioLink | null = null;\r\n soundTail: CuedAudioLink | null = null;\r\n paramLinkHead: SoundParamMeasureLink | null = null;\r\n paramLinkTail: SoundParamMeasureLink | null = null;\r\n soundListLength = 0;\r\n playWaitTimer = 0; \r\n playMeasureIndex: number = 0; // index of the measure we are playing\r\n cueMeasureIndex: number = 0; // measure index we are populating\r\n complete: boolean = false;\r\n addToTail(cuedSound: CuedAudioContext) {\r\n const tail = { sound: cuedSound, next: null };\r\n if (this.soundTail === null) {\r\n this.soundTail = tail;\r\n this.soundHead = tail;\r\n } else {\r\n this.soundTail.next = { sound: cuedSound, next: null };\r\n this.soundTail = this.soundTail.next;\r\n }\r\n this.soundListLength += cuedSound.oscs.length;\r\n }\r\n advanceHead(): CuedAudioContext | null {\r\n if (this.soundHead === null) {\r\n return null;\r\n }\r\n const cuedSound = this.soundHead.sound;\r\n this.soundHead = this.soundHead.next;\r\n this.soundListLength -= cuedSound.oscs.length;\r\n return cuedSound;\r\n }\r\n get soundCount() {\r\n return this.soundListLength;\r\n }\r\n reset() {\r\n this.soundHead = null;\r\n this.soundTail = null;\r\n this.paramLinkHead = null;\r\n this.paramLinkTail = null;\r\n this.soundListLength = 0;\r\n this.playWaitTimer = 0;\r\n this.playMeasureIndex = 0;\r\n this.cueMeasureIndex = 0;\r\n this.complete = false;\r\n }\r\n}\r\n/**\r\n * Play the music, ja!\r\n * @category SuiAudio\r\n */\r\nexport class SuiAudioPlayer {\r\n static _playing: boolean = false;\r\n static instanceId: number = 0;\r\n static duplicatePitchThresh = 4;\r\n static voiceThresh = 16;\r\n static _playingInstance: SuiAudioPlayer | null = null;\r\n static set playing(val) {\r\n SuiAudioPlayer._playing = val;\r\n }\r\n static get audioBufferSize() {\r\n return 512;\r\n }\r\n static incrementInstanceId() {\r\n const id = SuiAudioPlayer.instanceId + 1;\r\n SuiAudioPlayer.instanceId = id;\r\n return id;\r\n }\r\n static get playing() {\r\n if (typeof (SuiAudioPlayer._playing) === 'undefined') {\r\n SuiAudioPlayer._playing = false;\r\n }\r\n return SuiAudioPlayer._playing;\r\n }\r\n\r\n static pausePlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.paused = true;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n }\r\n SuiAudioPlayer.playing = false;\r\n\r\n }\r\n instanceId: number;\r\n paused: boolean;\r\n view: SuiScoreView;\r\n score: SmoScore;\r\n cuedSounds: CuedAudioContexts;\r\n audioDefaults = SuiOscillator.defaults;\r\n openTies: Record = {};\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(parameters: SuiAudioPlayerParams) {\r\n this.instanceId = SuiAudioPlayer.incrementInstanceId();\r\n this.paused = false;\r\n this.view = parameters.view;\r\n this.score = parameters.score;\r\n // Assume tempo is same for all measures\r\n this.cuedSounds = new CuedAudioContexts();\r\n this.audioAnimation = parameters.audioAnimation;\r\n }\r\n\r\n getNoteSoundData(measureIndex: number) {\r\n const measureNotes: Record = {};\r\n let measureTicks = this.score.staves[0].measures[measureIndex].getMaxTicksVoice();\r\n const freqDuplicates: Record> = {};\r\n const voiceCount: Record = {};\r\n this.score.staves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[measureIndex];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let curTick = 0;\r\n const instrument = staff.getStaffInstrument(measure.measureNumber.measureIndex);\r\n voice.notes.forEach((smoNote, tickIx) => {\r\n const frequencies: number[] = [];\r\n const xpose = -1 * measure.transposeIndex;\r\n const selector: SmoSelector = SmoSelector.default;\r\n selector.measure = measureIndex;\r\n selector.staff = staffIx;\r\n selector.voice = voiceIx;\r\n selector.tick = tickIx;\r\n let ties: SmoTie[] = [];\r\n const tieIx = '' + staffIx + '-' + measureIndex + '-' + voiceIx;\r\n const prevMeasureIx = '' + staffIx + '-' + (measureIndex - 1) + '-' + voiceIx;\r\n if (smoNote.noteType === 'n' && !smoNote.isHidden()) {\r\n ties = staff.getTiesStartingAt(selector);\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n const freq = SmoAudioPitch.smoPitchToFrequency(pitch, xpose, smoNote.getMicrotone(pitchIx) ?? null);\r\n const freqRound = Math.round(freq);\r\n if (!freqDuplicates[curTick]) {\r\n freqDuplicates[curTick] = {};\r\n voiceCount[curTick] = 0;\r\n }\r\n const freqBeat = freqDuplicates[curTick];\r\n if (!freqBeat[freqRound]) {\r\n freqBeat[freqRound] = 0;\r\n }\r\n if (freqBeat[freqRound] < SuiAudioPlayer.duplicatePitchThresh && voiceCount[curTick] < SuiAudioPlayer.voiceThresh) {\r\n frequencies.push(freq);\r\n freqBeat[freqRound] += 1;\r\n voiceCount[curTick] += 1;\r\n }\r\n });\r\n const duration = smoNote.tickCount;\r\n const volume = SmoAudioScore.volumeFromNote(smoNote, SmoAudioScore.dynamicVolumeMap.mf);\r\n const soundData: SoundParams = {\r\n frequencies,\r\n volume,\r\n offsetPct: curTick / measureTicks,\r\n durationPct: duration / measureTicks,\r\n noteType: smoNote.noteType,\r\n duration,\r\n instrument: instrument.instrument,\r\n selector\r\n };\r\n const pushTickArray = (curTick: number, soundData: SoundParams) => {\r\n if (typeof(measureNotes[curTick]) === 'undefined') {\r\n measureNotes[curTick] = [];\r\n }\r\n measureNotes[curTick].push(soundData);\r\n }\r\n // If this is continuation of tied note, just change duration\r\n if (this.openTies[prevMeasureIx]) {\r\n this.openTies[prevMeasureIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[prevMeasureIx] = null;\r\n }\r\n }\r\n else if (this.openTies[tieIx]) {\r\n this.openTies[tieIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[tieIx] = null;\r\n }\r\n } else if (ties.length) {\r\n // If start of tied note, record the tie note, the next note in this voice\r\n // will adjust duration\r\n this.openTies[tieIx] = soundData;\r\n pushTickArray(curTick, soundData);\r\n } else {\r\n pushTickArray(curTick, soundData);\r\n }\r\n }\r\n curTick += Math.round(smoNote.tickCount);\r\n });\r\n });\r\n });\r\n const keys = Object.keys(measureNotes).map((x) => parseInt(x, 10));\r\n if (keys.length) {\r\n measureTicks -= keys.reduce((a, b) => a > b ? a : b);\r\n }\r\n return { endTicks: measureTicks, measureNotes };\r\n }\r\n \r\n createCuedSound(measureIndex: number) {\r\n let i = 0;\r\n let j = 0;\r\n let measureBeat = 0;\r\n if (!SuiAudioPlayer.playing || this.cuedSounds.paramLinkHead === null) {\r\n return;\r\n }\r\n // TODO base on the selection start.\r\n const { endTicks, measureNotes } = { endTicks: this.cuedSounds.paramLinkHead.endTicks, measureNotes: this.cuedSounds.paramLinkHead.soundParams };\r\n this.cuedSounds.paramLinkHead = this.cuedSounds.paramLinkHead.next;\r\n const maxMeasures = this.score.staves[0].measures.length;\r\n const smoTemp = this.score.staves[0].measures[measureIndex].getTempo();\r\n const tempo = smoTemp.bpm * (smoTemp.beatDuration / 4096);\r\n const keys: number[] = [];\r\n Object.keys(measureNotes).forEach((key) => {\r\n keys.push(parseInt(key, 10));\r\n }); \r\n // There is a key for each note in the measure. The value is the number of ticks before that note is played\r\n for (j = 0; j < keys.length; ++j) {\r\n const beatTime = keys[j];\r\n const soundData = measureNotes[beatTime];\r\n let durationPct = 0;\r\n let offsetPct = 0;\r\n if (soundData.length === 0) {\r\n console.log('empty sound measure');\r\n continue;\r\n }\r\n soundData.forEach((ss) => {\r\n if (durationPct === 0) {\r\n durationPct = ss.durationPct;\r\n offsetPct = ss.offsetPct;\r\n }\r\n durationPct = Math.min(durationPct, ss.durationPct);\r\n offsetPct = Math.min(offsetPct, ss.offsetPct);\r\n });\r\n const cuedSound: CuedAudioContext = { oscs: [], waitTime: 0, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n const timeRatio = 60000 / (tempo * 4096);\r\n // If there is complete silence here, put a silent beat\r\n if (beatTime > measureBeat) {\r\n const params = this.audioDefaults;\r\n params.frequency = 0;\r\n params.duration = (beatTime - measureBeat) * timeRatio;\r\n params.gain = 0;\r\n params.useReverb = false;\r\n const silence: CuedAudioContext = { oscs: [], waitTime: params.duration, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n silence.oscs.push(new SuiSampler(params));\r\n this.cuedSounds.addToTail(silence);\r\n measureBeat = beatTime;\r\n }\r\n this.cuedSounds.addToTail(cuedSound);\r\n soundData.forEach((sound) => {\r\n const adjDuration = Math.round(sound.duration * timeRatio) + 150;\r\n for (i = 0; i < sound.frequencies.length && sound.noteType === 'n'; ++i) {\r\n const freq = sound.frequencies[i];\r\n const params = this.audioDefaults;\r\n params.frequency = freq;\r\n params.duration = adjDuration;\r\n params.gain = sound.volume;\r\n params.instrument = sound.instrument;\r\n params.useReverb = this.score.audioSettings.reverbEnable;\r\n if (this.score.audioSettings.playerType === 'synthesizer') {\r\n params.wavetable = SynthWavetable;\r\n params.waveform = this.score.audioSettings.waveform;\r\n cuedSound.oscs.push(new SuiWavetable(params));\r\n } else {\r\n cuedSound.oscs.push(new SuiSampler(params));\r\n }\r\n }\r\n });\r\n if (j + 1 < keys.length) {\r\n const diff = (keys[j + 1] - keys[j]);\r\n cuedSound.waitTime = diff * timeRatio;\r\n measureBeat += diff;\r\n } else if (measureIndex + 1 < maxMeasures) {\r\n // If the next measure, calculate the frequencies for the next track.\r\n this.cuedSounds.cueMeasureIndex += 1;\r\n cuedSound.waitTime = endTicks * timeRatio;\r\n } else {\r\n this.cuedSounds.complete = true;\r\n }\r\n // }, 1);\r\n }\r\n }\r\n populateSounds(measureIndex: number) {\r\n if (!SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n const interval = 20;\r\n let draining = false;\r\n const buffer = SuiAudioPlayer.audioBufferSize;\r\n const timer = setInterval(() => {\r\n if (this.cuedSounds.complete || SuiAudioPlayer.playing === false) {\r\n clearInterval(timer);\r\n return;\r\n }\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.complete = true;\r\n return;\r\n }\r\n if (draining && this.cuedSounds.soundCount > buffer / 4) {\r\n return;\r\n }\r\n if (this.cuedSounds.soundCount > buffer) {\r\n draining = true;\r\n return;\r\n }\r\n draining = false;\r\n this.createCuedSound(measureIndex);\r\n measureIndex += 1;\r\n }, interval);\r\n }\r\n playSounds() {\r\n this.cuedSounds.playMeasureIndex = 0;\r\n this.cuedSounds.playWaitTimer = 0;\r\n let previousDuration = 0;\r\n const timer = () => {\r\n setTimeout(() => {\r\n const cuedSound = this.cuedSounds.advanceHead();\r\n if (cuedSound === null) {\r\n SuiAudioPlayer._playing = false;\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (SuiAudioPlayer._playing === false) {\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (cuedSound.oscs.length === 0) {\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n console.warn('empty oscs in playback');\r\n timer(); \r\n return;\r\n }\r\n previousDuration = cuedSound.oscs[0].duration;\r\n SuiAudioPlayer._playChord(cuedSound.oscs);\r\n this.audioAnimation.audioAnimationHandler(this.view, cuedSound.selector,\r\n cuedSound.offsetPct, cuedSound.durationPct);\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n timer();\r\n }, this.cuedSounds.playWaitTimer);\r\n }\r\n timer();\r\n }\r\n playAfter(milliseconds: number, oscs: SuiOscillator[]) {\r\n setTimeout(() => {\r\n SuiAudioPlayer._playChord(oscs);\r\n }, milliseconds)\r\n }\r\n startPlayer(measureIndex: number) {\r\n this.openTies = {};\r\n this.cuedSounds.reset();\r\n this.cuedSounds.cueMeasureIndex = measureIndex;\r\n this.cuedSounds.playMeasureIndex = this.cuedSounds.cueMeasureIndex;\r\n this.cuedSounds.paramLinkHead = null;\r\n this.cuedSounds.paramLinkTail = null;\r\n const endMeasure = this.score.staves[0].measures.length;\r\n let i = 0;\r\n for (i = this.cuedSounds.cueMeasureIndex; i < endMeasure; ++i) {\r\n const { endTicks, measureNotes } = this.getNoteSoundData(i);\r\n const node = {\r\n soundParams: measureNotes,\r\n endTicks,\r\n next: null\r\n };\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.paramLinkHead = node;\r\n this.cuedSounds.paramLinkTail = node;\r\n } else {\r\n this.cuedSounds.paramLinkTail!.next = node;\r\n this.cuedSounds.paramLinkTail = this.cuedSounds.paramLinkTail!.next;\r\n }\r\n }\r\n setTimeout(() => {\r\n this.populateSounds(measureIndex);\r\n }, 1);\r\n const bufferThenPlay = () => {\r\n setTimeout(() => {\r\n if (this.cuedSounds.soundListLength >= SuiAudioPlayer.audioBufferSize || this.cuedSounds.complete) {\r\n this.playSounds();\r\n } else {\r\n bufferThenPlay();\r\n }\r\n }, 50);\r\n }\r\n bufferThenPlay();\r\n }\r\n\r\n static stopPlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n a.paused = false;\r\n a.cuedSounds.reset();\r\n }\r\n SuiAudioPlayer.playing = false;\r\n }\r\n\r\n static get playingInstance() {\r\n if (!SuiAudioPlayer._playingInstance) {\r\n return null;\r\n }\r\n return SuiAudioPlayer._playingInstance;\r\n }\r\n\r\n // the oscAr contains an oscillator for each pitch in the chord.\r\n // each inner oscillator is a promise, the combined promise is resolved when all\r\n // the beats have completed.\r\n static _playChord(oscAr: SuiOscillator[]) {\r\n var par: Promise[] = [];\r\n oscAr.forEach((osc) => {\r\n par.push(osc.play());\r\n });\r\n return Promise.all(par);\r\n }\r\n\r\n // Starts the player.\r\n play() {\r\n let i = 0;\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n SuiAudioPlayer._playingInstance = this;\r\n SuiAudioPlayer.playing = true;\r\n const startIndex = this.view.tracker.getFirstMeasureOfSelection()?.measureNumber.measureIndex ?? 0;\r\n //for (i = this.startIndex; i < this.score.staves[0].measures.length; ++i) {\r\n // this.tracks.push(SuiAudioPlayer.getTrackSounds(this.audio.tracks, i));\r\n // }\r\n // const sounds = SuiAudioPlayer.getTrackSounds(this.audio.tracks, this.startIndex);\r\n // this.playSoundsAtOffset(sounds, 0);\r\n this.startPlayer(startIndex);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoOscillatorInfo, SmoInstrument, SmoOscillatorInfoAllTypes,\r\n SmoOscillatorInfoNumberType, SmoOscillatorInfoNumberArType, SmoOscillatorInfoStringType, SmoOscillatorInfoStringNullType,\r\n SmoOscillatorInfoWaveformType, SmoOscillatorInfoSustainType, SmoOscillatorInfoOptionsType } from '../../smo/data/staffModifiers';\r\n/**\r\n * A set of parameters from the instrument interface used to create audio from samples.\r\n * @category SuiAudio\r\n */\r\n export interface SampleChooserParams {\r\n family?: string,\r\n instrument: string,\r\n frequency: number,\r\n duration: number,\r\n gain: number,\r\n articulation?: string\r\n}\r\n/**\r\n * A function prototype that chooses from among samples to return the correct one for that note\r\n */\r\nexport type SampleChooser = (params: SampleChooserParams, samples: SmoOscillatorInfo[]) => AudioSample | null;\r\n/**\r\n * A specific audio sample that can be converted into an audio node\r\n * @category SuiAudio\r\n */\r\nexport interface AudioSample {\r\n sample: AudioBuffer,\r\n frequency: number,\r\n patch: string,\r\n gain: number\r\n}\r\n/**\r\n * Interface for a chooser function and a set of samples\r\n * @category SuiAudio\r\n */\r\nexport interface InstrumentSampleChooser {\r\n instrument: string,\r\n sampleChooser: SampleChooser,\r\n samples: SmoOscillatorInfo[]\r\n}\r\n\r\nexport const sampleForPercussion = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.instrument === 'percussion');\r\n let sample: AudioSample | null = null;\r\n if (longSamples.length) {\r\n sample = sampleFromFrequency(params, longSamples);\r\n if (sample) {\r\n return sample;\r\n }\r\n }\r\n return sampleFromFrequency(params, samples);\r\n}\r\n/**\r\n * For instruments like violin that require different samples depending on note duration\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n */\r\nexport const sampleFromMinDuration = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.minDuration < params.duration && ss.minDuration > 0);\r\n if (longSamples.length) {\r\n return sampleFromFrequency(params, longSamples);\r\n }\r\n return sampleFromFrequency(params, samples.filter((ss) => ss.minDuration === 0));\r\n}\r\n\r\n/**\r\n * Give a set of samples, return the one that closest matches the frequency\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n*/\r\nexport const sampleFromFrequency = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n const f = params.frequency;\r\n for (i = 0; i < samples.length; ++i) {\r\n const oscInfo = samples[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const gain = oscInfo.dynamic / 100;\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n}\r\n/**\r\n * Logic to create audio nodes out of HTML5 media elements\r\n * @category SuiAudio\r\n */\r\nexport class SuiSampleMedia {\r\n static sampleFiles: SmoOscillatorInfo[] = [];\r\n static sampleBufferMap: Record = {};\r\n static sampleOscMap: Record = {};\r\n static instrumentChooser: Record = {};\r\n static receivedBuffer: boolean = false;\r\n static getFamilyForInstrument(instKey: string): string {\r\n const sound = SuiSampleMedia.instrumentChooser[instKey];\r\n if (sound && sound.samples.length) {\r\n return sound.samples[0].family;\r\n }\r\n return 'keyboard';\r\n }\r\n static insertIntoMap(sample: Partial) {\r\n const oscInfo = SmoInstrument.defaultOscillatorParam;\r\n const populatePartial = (partial: Partial, full: SmoOscillatorInfo, \r\n param: SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | SmoOscillatorInfoOptionsType | SmoOscillatorInfoSustainType | SmoOscillatorInfoWaveformType) => {\r\n (full[param] as any) = typeof(partial[param]) === 'undefined' ? full[param] : partial[param];\r\n }\r\n SmoOscillatorInfoAllTypes.forEach((paramType) => {\r\n populatePartial(sample, oscInfo, paramType as any);\r\n });\r\n if (!this.sampleOscMap[oscInfo.instrument]) {\r\n this.sampleOscMap[oscInfo.instrument] = [];\r\n }\r\n this.sampleOscMap[oscInfo.instrument].push(oscInfo);\r\n SuiSampleMedia.sampleFiles.push(oscInfo);\r\n }\r\n static populateSampleMap() {\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'samplecn4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'samplebb4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'b', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-a2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-fs2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: '#', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c2-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c3-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-e3',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-d4',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a1',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 1 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a3',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-c4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-b5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e6',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-bb3',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-c4',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-g5-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-e4-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-e4',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-g3',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g3-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g4-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c2',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c3',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c5',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c6',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c4',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c5',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-d2-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 2 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-c3-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 12, null) - 5,\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c4-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c5-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-hh-closed',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-snare',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom1',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom2',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-kick',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n const instrumentMap = Object.keys(SuiSampleMedia.sampleOscMap);\r\n instrumentMap.forEach((instrumentKey) => {\r\n SuiSampleMedia.instrumentChooser[instrumentKey] = {\r\n instrument: instrumentKey,\r\n samples: SuiSampleMedia.sampleOscMap[instrumentKey],\r\n sampleChooser: sampleFromFrequency\r\n }\r\n });\r\n SuiSampleMedia.instrumentChooser['violin'].sampleChooser = sampleFromMinDuration;\r\n SuiSampleMedia.instrumentChooser['percussion'].sampleChooser = sampleForPercussion;\r\n }\r\n static getSmoOscillatorInfo(instrument: string) {\r\n if (!SuiSampleMedia.sampleOscMap[instrument]) {\r\n return SuiSampleMedia.sampleOscMap['piano'];\r\n }\r\n return SuiSampleMedia.sampleOscMap[instrument];\r\n }\r\n /**\r\n * Load samples so we can play the music\r\n * @returns - promise, resolved when loaded\r\n */\r\n static samplePromise(audio: AudioContext): Promise {\r\n const mediaElements: HTMLMediaElement[] = [];\r\n let i = 0;\r\n if (SuiSampleMedia.receivedBuffer) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n SuiSampleMedia.populateSampleMap();\r\n const loadedSamples: Record = {};\r\n for (i = 0; i < SuiSampleMedia.sampleFiles.length; ++i) {\r\n const file = SuiSampleMedia.sampleFiles[i];\r\n if (!file.sample) {\r\n continue;\r\n }\r\n const sampleName = file.sample;\r\n const audioElement: HTMLMediaElement | null = document.getElementById(file.sample) as HTMLMediaElement;\r\n if (!loadedSamples[file.sample] && audioElement) {\r\n loadedSamples[file.sample] = true;\r\n const media = audio.createMediaElementSource(audioElement);\r\n mediaElements.push(audioElement);\r\n const req = new XMLHttpRequest();\r\n req.open('GET', media.mediaElement.src, true);\r\n req.responseType = 'arraybuffer';\r\n req.send();\r\n req.onload = () => {\r\n const audioData = req.response;\r\n audio.decodeAudioData(audioData, (decoded) => {\r\n SuiSampleMedia.sampleBufferMap[sampleName] = decoded;\r\n SuiSampleMedia.receivedBuffer = true;\r\n });\r\n };\r\n }\r\n if (mediaElements.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n const checkSample = () => {\r\n setTimeout(() => {\r\n if (!SuiSampleMedia.receivedBuffer) {\r\n checkSample();\r\n } else {\r\n resolve();\r\n }\r\n }, 100);\r\n };\r\n checkSample();\r\n });\r\n return rv;\r\n }\r\n\r\n static sampleForFrequency(f: number, oscs: SmoOscillatorInfo[]): AudioSample | null {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n for (i = 0; i < oscs.length; ++i) {\r\n const oscInfo = oscs[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n const gain = oscInfo.dynamic / 100;\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n }\r\n static matchedSample(params: SampleChooserParams): AudioSample | null {\r\n let instrumentKey = params.instrument;\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n instrumentKey = 'piano';\r\n }\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n const keys = Object.keys(SuiSampleMedia.sampleOscMap);\r\n if (keys.length === 0) {\r\n return null;\r\n }\r\n instrumentKey = keys[0];\r\n }\r\n return SuiSampleMedia.instrumentChooser[instrumentKey].sampleChooser(params, SuiSampleMedia.instrumentChooser[instrumentKey].samples);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Utilities for formatting the music by estimating the geometry of the music.\r\n * @module /render/sui/formatter\r\n */\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { vexGlyph } from '../vex/glyphDimensions';\r\nimport { SmoDynamicText, SmoLyric, SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoStaffHairpin, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { ScaledPageLayout, SmoLayoutManager, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../../smo/data/measure';\r\nimport { TimeSignature, SmoTempoText } from '../../smo/data//measureModifiers';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, defaultMeasurePadding } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\nconst VF = VexFlow;\r\n\r\nexport interface SuiTickContext {\r\n widths: number[],\r\n tickCounts: number[]\r\n}\r\n/**\r\n * Estimated x, y position of the measure\r\n * @category SuiRender\r\n */\r\nexport interface MeasureEstimate {\r\n measures: SmoMeasure[], x: number, y: number\r\n}\r\nexport interface LineRender {\r\n systems: Record\r\n}\r\n\r\n/**\r\n * Keep track of start/end measures on a page. If the page\r\n * content doesn't change, and the measures don't change, we don't\r\n * need to re-render the content\r\n * @catgegory SuiRender\r\n */\r\nexport interface RenderedPage {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\n/**\r\n * Utilities for estimating measure/system/page width and height\r\n * @category SuiRender\r\n */\r\nexport class SuiLayoutFormatter {\r\n score: SmoScore;\r\n systems: Record = {};\r\n columnMeasureMap: Record;\r\n currentPage: number = 0;\r\n svg: SvgPageMap;\r\n renderedPages: Record;\r\n lines: number[] = [];\r\n constructor(score: SmoScore, svg: SvgPageMap, renderedPages: Record) {\r\n this.score = score;\r\n this.svg = svg;\r\n this.columnMeasureMap = {};\r\n this.renderedPages = renderedPages;\r\n this.score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (!this.columnMeasureMap[measure.measureNumber.measureIndex]) {\r\n this.columnMeasureMap[measure.measureNumber.measureIndex] = [];\r\n }\r\n this.columnMeasureMap[measure.measureNumber.measureIndex].push(measure);\r\n });\r\n });\r\n }\r\n \r\n /**\r\n * Once we know which line a measure is going on, make a map for it for easy\r\n * looking during rendering\r\n * @param measures \r\n * @param lineIndex \r\n * @param systemIndex \r\n */\r\n updateSystemMap(measures: SmoMeasure[], lineIndex: number, systemIndex: number) {\r\n if (!this.systems[lineIndex]) {\r\n const nextLr: LineRender = {\r\n systems: {}\r\n };\r\n this.systems[lineIndex] = nextLr;\r\n }\r\n const systemRender = this.systems[lineIndex];\r\n if (!systemRender.systems[systemIndex]) {\r\n systemRender.systems[systemIndex] = measures;\r\n }\r\n }\r\n trimPages(startPageCount: number): boolean {\r\n let pl: SmoPageLayout[] | undefined = this.score?.layoutManager?.pageLayouts;\r\n if (pl) {\r\n if (this.currentPage < pl.length - 1) {\r\n this.score!.layoutManager!.trimPages(this.currentPage);\r\n pl = this.score?.layoutManager?.pageLayouts;\r\n }\r\n if (pl && pl.length !== startPageCount) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * see if page breaks this boundary. If it does, bump the current page and move the system down\r\n * to the new page\r\n * @param scoreLayout \r\n * @param currentLine \r\n * @param bottomMeasure \r\n * @returns \r\n */\r\n checkPageBreak(scoreLayout: ScaledPageLayout, currentLine: SmoMeasure[], bottomMeasure: SmoMeasure): ScaledPageLayout {\r\n let pageAdj = 0;\r\n const lm: SmoLayoutManager = this.score!.layoutManager!;\r\n // See if this measure breaks a page.\r\n const maxY = bottomMeasure.svg.logicalBox.y + bottomMeasure.svg.logicalBox.height;\r\n if (maxY > ((this.currentPage + 1) * scoreLayout.pageHeight) - scoreLayout.bottomMargin) {\r\n this.currentPage += 1;\r\n // If this is a new page, make sure there is a layout for it.\r\n lm.addToPageLayouts(this.currentPage);\r\n scoreLayout = lm.getScaledPageLayout(this.currentPage);\r\n\r\n // When adjusting the page, make it so the top staff of the system\r\n // clears the bottom of the page.\r\n const topMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y < b.svg.logicalBox.y ? a : b\r\n );\r\n const minMaxY = topMeasure.svg.logicalBox.y;\r\n pageAdj = (this.currentPage * scoreLayout.pageHeight) - minMaxY;\r\n pageAdj = pageAdj + scoreLayout.topMargin;\r\n\r\n // For each measure on the current line, move it down past the page break;\r\n currentLine.forEach((measure) => {\r\n measure.setBox(SvgHelpers.boxPoints(\r\n measure.svg.logicalBox.x, measure.svg.logicalBox.y + pageAdj, measure.svg.logicalBox.width, measure.svg.logicalBox.height), '_checkPageBreak');\r\n measure.setY(measure.staffY + pageAdj, '_checkPageBreak');\r\n measure.svg.pageIndex = this.currentPage;\r\n });\r\n }\r\n return scoreLayout;\r\n }\r\n measureToLeft(measure: SmoMeasure) {\r\n const j = measure.measureNumber.staffId;\r\n const i = measure.measureNumber.measureIndex;\r\n return (i > 0 ? this.score!.staves[j].measures[i - 1] : null);\r\n }\r\n // {measures,y,x} the x and y at the left/bottom of the render\r\n /**\r\n * Estimate the dimensions of a column when it's rendered.\r\n * @param scoreLayout \r\n * @param measureIx \r\n * @param systemIndex \r\n * @param lineIndex \r\n * @param x \r\n * @param y \r\n * @returns { MeasureEstimate } - the measures in the column and the x, y location\r\n */\r\n estimateColumn(scoreLayout: ScaledPageLayout, measureIx: number, systemIndex: number, lineIndex: number, x: number, y: number): MeasureEstimate {\r\n const s: any = {};\r\n const measures = this.columnMeasureMap[measureIx];\r\n let rowInSystem = 0;\r\n let voiceCount = 0;\r\n let unalignedCtxCount = 0;\r\n let wsum = 0;\r\n let dsum = 0;\r\n let maxCfgWidth = 0;\r\n let isPickup = false;\r\n // Keep running tab of accidental widths for justification\r\n const contextMap: Record = {};\r\n let forceClefCount = 0;\r\n let measureToSkip = false;\r\n let maxColumnStartX = 0;\r\n measures.forEach((measure) => {\r\n // use measure to left to figure out whether I need to render key signature, etc.\r\n // If I am the first measure, just use self and we always render them on the first measure.\r\n let measureToLeft = this.measureToLeft(measure);\r\n if (!measureToLeft) {\r\n measureToLeft = measure;\r\n }\r\n s.measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, 0);\r\n s.keySigLast = SmoMusic.vexKeySignatureTranspose(measureToLeft.keySignature, 0);\r\n s.tempoLast = measureToLeft.getTempo();\r\n s.timeSigLast = measureToLeft.timeSignature;\r\n s.clefLast = measureToLeft.clef;\r\n this.calculateBeginningSymbols(systemIndex, measure, s.clefLast, s.keySigLast, s.timeSigLast, s.tempoLast);\r\n const startX = SuiLayoutFormatter.estimateStartSymbolWidth(measure);\r\n measure.svg.adjX = startX;\r\n maxColumnStartX = Math.max(maxColumnStartX, startX);\r\n });\r\n measures.forEach((measure) => {\r\n measure.svg.maxColumnStartX = maxColumnStartX;\r\n SmoBeamer.applyBeams(measure);\r\n voiceCount += measure.voices.length;\r\n if (measure.isPickup()) {\r\n isPickup = true;\r\n }\r\n if (measure.format.skipMeasureCount) {\r\n measureToSkip = true;\r\n }\r\n measure.measureNumber.systemIndex = systemIndex;\r\n measure.svg.rowInSystem = rowInSystem;\r\n measure.svg.lineIndex = lineIndex;\r\n measure.svg.pageIndex = this.currentPage;\r\n\r\n // calculate vertical offsets from the baseline\r\n const offsets = this.estimateMeasureHeight(measure);\r\n measure.setYTop(offsets.aboveBaseline, 'render:estimateColumn');\r\n measure.setY(y - measure.yTop, 'estimateColumns height');\r\n measure.setX(x, 'render:estimateColumn');\r\n\r\n // Add custom width to measure:\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, offsets.belowBaseline - offsets.aboveBaseline), 'render: estimateColumn');\r\n this.estimateMeasureWidth(measure, scoreLayout, contextMap);\r\n y = y + measure.svg.logicalBox.height + scoreLayout.intraGap;\r\n maxCfgWidth = Math.max(maxCfgWidth, measure.staffWidth);\r\n rowInSystem += 1;\r\n });\r\n // justify this column to the maximum width.\r\n const startX = measures[0].staffX;\r\n const adjX = measures[0].svg.maxColumnStartX;\r\n const contexts = Object.keys(contextMap);\r\n const widths: number[] = [];\r\n const durations: number[] = [];\r\n let minTotalWidth = 0;\r\n contexts.forEach((strIx) => {\r\n const ix = parseInt(strIx);\r\n let tickWidth = 0;\r\n const context = contextMap[ix];\r\n if (context.tickCounts.length < voiceCount) {\r\n unalignedCtxCount += 1;\r\n }\r\n context.widths.forEach((w, ix) => {\r\n wsum += w;\r\n dsum += context.tickCounts[ix];\r\n widths.push(w);\r\n durations.push(context.tickCounts[ix]);\r\n tickWidth = Math.max(tickWidth, w);\r\n });\r\n minTotalWidth += tickWidth;\r\n });\r\n // Vex formatter adjusts location of ticks based to keep the justified music aligned. It does this\r\n // by moving notes to the right. We try to add padding to each tick context based on the 'entropy' of the \r\n // music. 4 quarter notes with no accidentals in all voices will have 0 entropy. All the notes need the same\r\n // amount of space, so they don't need additional space to align.\r\n // wvar - the std deviation in the widths or 'width entropy'\r\n // dvar - the std deviation in the duration between voices or 'duration entropy'\r\n const sumArray = (arr: number[]) => arr.reduce((a, b) => a + b, 0);\r\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\r\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\r\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\r\n\r\n const davg = dsum / durations.length;\r\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\r\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\r\n const unalignedPadding = 2;\r\n\r\n const padmax = Math.max(dpads, wpads) * contexts.length * unalignedPadding;\r\n const unalignedPad = unalignedPadding * unalignedCtxCount;\r\n let maxWidth = Math.max(adjX + minTotalWidth + Math.max(unalignedPad, padmax), maxCfgWidth);\r\n if (scoreLayout.maxMeasureSystem > 0 && !isPickup && !measureToSkip) {\r\n // Add 1 because there is some overhead in each measure, \r\n // so there can never be (width/max) measures in the system\r\n const defaultWidth = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1));\r\n maxWidth = Math.max(maxWidth, defaultWidth);\r\n }\r\n const maxX = startX + maxWidth;\r\n measures.forEach((measure) => {\r\n measure.setWidth(maxWidth, 'render:estimateColumn');\r\n // measure.svg.adjX = adjX;\r\n });\r\n const rv = { measures, y, x: maxX };\r\n return rv;\r\n }\r\n /**\r\n * return true if this is the last measure, taking into account multimeasure rest\r\n * @param measureIx \r\n * @returns \r\n */\r\n isLastVisibleMeasure(measureIx: number) {\r\n if (measureIx >= this.score.staves[0].measures.length) {\r\n return true;\r\n }\r\n if (this.score.staves[0].partInfo.expandMultimeasureRests) {\r\n return false;\r\n }\r\n let i = 0;\r\n for (i = measureIx; i < this.score.staves[0].measures.length; ++i) {\r\n const mm = this.score.staves[0].measures[i];\r\n if (!mm.svg.hideMultimeasure) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Calculate the geometry for the entire score, based on estimated measure width and height.\r\n * @returns \r\n */\r\n layout() {\r\n let measureIx = 0;\r\n let systemIndex = 0;\r\n if (!this.score.layoutManager) {\r\n return;\r\n }\r\n let scoreLayout = this.score.layoutManager.getScaledPageLayout(0);\r\n let y = 0;\r\n let x = 0;\r\n let lineIndex = 0;\r\n this.lines = [];\r\n let pageCheck = 0;\r\n // let firstMeasureOnPage = 0;\r\n this.lines.push(lineIndex);\r\n let currentLine: SmoMeasure[] = []; // the system we are esimating\r\n let measureEstimate: MeasureEstimate | null = null;\r\n\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.pre);\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.system);\r\n const timestamp = new Date().valueOf();\r\n\r\n y = scoreLayout.topMargin;\r\n x = scoreLayout.leftMargin;\r\n\r\n while (measureIx < this.score.staves[0].measures.length) {\r\n if (this.score.isPartExposed()) {\r\n if (this.score.staves[0].measures[measureIx].svg.hideMultimeasure) {\r\n measureIx += 1;\r\n continue;\r\n }\r\n }\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n if (systemIndex > 0 &&\r\n (measureEstimate.measures[0].format.systemBreak || measureEstimate.x > (scoreLayout.pageWidth - scoreLayout.leftMargin))) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, false);\r\n // find the measure with the lowest y extend (greatest y value), not necessarily one with lowest\r\n // start of staff.\r\n const bottomMeasure: SmoMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y + a.svg.logicalBox.height > b.svg.logicalBox.y + b.svg.logicalBox.height ? a : b\r\n );\r\n this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n const renderedPage: RenderedPage | null = this.renderedPages[pageCheck];\r\n if (renderedPage) {\r\n if (pageCheck !== this.currentPage) {\r\n // The last measure in the last system of the previous page\r\n const previousSystem = currentLine[0].measureNumber.measureIndex - 1;\r\n if (renderedPage.endMeasure !== previousSystem) {\r\n this.renderedPages[pageCheck] = null;\r\n } \r\n const nextPage = this.renderedPages[this.currentPage];\r\n if (nextPage && nextPage.startMeasure !== previousSystem + 1) {\r\n this.renderedPages[this.currentPage] = null;\r\n } \r\n }\r\n }\r\n pageCheck = this.currentPage;\r\n\r\n const ld = layoutDebug;\r\n const sh = SvgHelpers;\r\n if (layoutDebug.mask & layoutDebug.values.system) {\r\n currentLine.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.system);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Now start rendering on the next system.\r\n y = bottomMeasure.svg.logicalBox.height + bottomMeasure.svg.logicalBox.y + scoreLayout.interGap;\r\n \r\n currentLine = [];\r\n systemIndex = 0;\r\n x = scoreLayout.leftMargin;\r\n lineIndex += 1;\r\n this.lines.push(lineIndex);\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n }\r\n measureEstimate?.measures.forEach((measure) => {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n layoutDebug.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.pre);\r\n }\r\n });\r\n this.updateSystemMap(measureEstimate.measures, lineIndex, systemIndex);\r\n currentLine = currentLine.concat(measureEstimate.measures);\r\n measureIx += 1; \r\n systemIndex += 1;\r\n // If this is the last measure but we have not filled the x extent,\r\n // still justify the vertical staves and check for page break.\r\n if (this.isLastVisibleMeasure(measureIx) && measureEstimate !== null) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, true);\r\n const bottomMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y + a.svg.logicalBox.height > b.svg.logicalBox.y + b.svg.logicalBox.height ? a : b\r\n );\r\n scoreLayout = this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n }\r\n }\r\n // If a measure was added to the last page, make sure we re-render the page\r\n const renderedPage: RenderedPage | null = this.renderedPages[this.currentPage];\r\n if (renderedPage) {\r\n if (renderedPage.endMeasure !== currentLine[0].measureNumber.measureIndex) {\r\n this.renderedPages[this.currentPage] = null;\r\n }\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.COMPUTE, new Date().valueOf() - timestamp);\r\n }\r\n \r\n static estimateMusicWidth(smoMeasure: SmoMeasure, tickContexts: Record): number {\r\n const widths: number[] = [];\r\n // Add up the widths of the music glyphs for each voice, including accidentals etc. We save the widths in a hash by duration\r\n // and later consider overlapping/colliding ticks in each voice\r\n const tmObj = smoMeasure.createMeasureTickmaps();\r\n smoMeasure.voices.forEach((voice) => {\r\n let width = 0;\r\n let duration = 0;\r\n const noteCount = voice.notes.length;\r\n voice.notes.forEach((note) => {\r\n let noteWidth = 0;\r\n const dots: number = (note.dots ? note.dots : 0);\r\n let headWidth: number = vexGlyph.width(vexGlyph.dimensions.noteHead);\r\n // Maybe not the best place for this...ideally we'd get the note head glyph from\r\n // the ntoe.\r\n if (note.tickCount >= 4096 * 4 && note.noteType === 'n') {\r\n headWidth *= 2;\r\n }\r\n const dotWidth: number = vexGlyph.width(vexGlyph.dimensions.dot);\r\n noteWidth += headWidth +\r\n vexGlyph.dimensions.noteHead.spacingRight;\r\n // TODO: Consider engraving font and adjust grace note size?\r\n noteWidth += (headWidth + vexGlyph.dimensions.noteHead.spacingRight) * note.graceNotes.length;\r\n noteWidth += dotWidth * dots + vexGlyph.dimensions.dot.spacingRight * dots;\r\n note.pitches.forEach((pitch) => {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, smoMeasure.keySignature);\r\n const accidentals = tmObj.accidentalArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitch.letter]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitch.letter].pitch.accidental : keyAccidental;\r\n if (declared !== pitch.accidental || pitch.cautionary) {\r\n noteWidth += vexGlyph.accidentalWidth(pitch.accidental);\r\n }\r\n });\r\n\r\n let verse = 0;\r\n let lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n while (lyricBase.length) {\r\n let lyric = lyricBase[0] as SmoLyric;\r\n let lyricWidth = 0;\r\n let i = 0;\r\n // TODO: kerning and all that...\r\n if (!lyric.text.length) {\r\n break;\r\n }\r\n // why did I make this return an array?\r\n // oh...because of voices\r\n const textFont =\r\n TextFormatter.create({ family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal' });\r\n const lyricText = lyric.getText();\r\n for (i = 0; i < lyricText.length; ++i) {\r\n lyricWidth += textFont.getWidthForTextInPx(lyricText[i])\r\n }\r\n if (lyric.isHyphenated()) {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('-');\r\n } else {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('H');\r\n }\r\n noteWidth = Math.max(lyricWidth, noteWidth);\r\n verse += 1;\r\n lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n }\r\n if (!tickContexts[duration]) {\r\n tickContexts[duration] = {\r\n widths: [],\r\n tickCounts: [] \r\n }\r\n }\r\n if (smoMeasure.repeatSymbol) {\r\n noteWidth = vexGlyph.repeatSymbolWidth() / noteCount; \r\n }\r\n tickContexts[duration].widths.push(noteWidth);\r\n tickContexts[duration].tickCounts.push(note.tickCount);\r\n duration += Math.round(note.tickCount);\r\n width += noteWidth;\r\n });\r\n widths.push(width);\r\n });\r\n widths.sort((a, b) => a > b ? -1 : 1);\r\n return widths[0];\r\n }\r\n\r\n static estimateStartSymbolWidth(smoMeasure: SmoMeasure): number {\r\n let width = 0;\r\n // the variables starts and digits used to be in the if statements. I moved them here to fix the resulting error\r\n var starts = smoMeasure.getStartBarline();\r\n var digits = smoMeasure.timeSignature.timeSignature.split('/')[0].length;\r\n if (smoMeasure.svg.forceKeySignature) {\r\n if (smoMeasure.canceledKeySignature) {\r\n width += vexGlyph.keySignatureLength(smoMeasure.canceledKeySignature);\r\n }\r\n width += vexGlyph.keySignatureLength(smoMeasure.keySignature);\r\n }\r\n if (smoMeasure.svg.forceClef) {\r\n const clefGlyph = vexGlyph.clef(smoMeasure.clef);\r\n width += clefGlyph.width + clefGlyph.spacingRight;\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n width += vexGlyph.width(vexGlyph.dimensions.timeSignature) * digits + vexGlyph.dimensions.timeSignature.spacingRight;\r\n }\r\n if (starts) {\r\n width += vexGlyph.barWidth(starts);\r\n }\r\n return width;\r\n }\r\n static estimateEndSymbolWidth(smoMeasure: SmoMeasure) {\r\n var width = 0;\r\n var ends = smoMeasure.getEndBarline();\r\n if (ends) {\r\n width += vexGlyph.barWidth(ends);\r\n }\r\n return width;\r\n }\r\n\r\n estimateMeasureWidth(measure: SmoMeasure, scoreLayout: ScaledPageLayout, tickContexts: Record) {\r\n // Calculate the existing staff width, based on the notes and what we expect to be rendered.\r\n let measureWidth = SuiLayoutFormatter.estimateMusicWidth(measure, tickContexts) + defaultMeasurePadding;\r\n // measure.svg.adjX already set based on max column adjX\r\n measure.svg.adjRight = SuiLayoutFormatter.estimateEndSymbolWidth(measure);\r\n measureWidth += measure.svg.adjX + measure.svg.adjRight + measure.format.customStretch + measure.format.padLeft;\r\n const y = measure.svg.logicalBox.y;\r\n // For systems that start with padding, add width for the padding\r\n measure.setWidth(measureWidth, 'estimateMeasureWidth adjX adjRight');\r\n // Calculate the space for left/right text which displaces the measure.\r\n // measure.setX(measure.staffX + textOffsetBox.x,'estimateMeasureWidth');\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, measure.svg.logicalBox.height),\r\n 'estimate measure width');\r\n }\r\n static _beamGroupForNote(measure: SmoMeasure, note: SmoNote): ISmoBeamGroup | null {\r\n let rv: ISmoBeamGroup | null = null;\r\n if (!note.beam_group) {\r\n return null;\r\n }\r\n measure.beamGroups.forEach((bg) => {\r\n if (!rv) {\r\n if (bg.notes.findIndex((note) => note.beam_group && note.beam_group.id === bg.attrs.id) >= 0) {\r\n rv = bg;\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * A system has gone beyond the page width. Lop the last measure off the end and move it to the first measure of the\r\n * next system. Then seal the last system by justifying the measures vertically and horinzontally\r\n * @param scoreLayout \r\n * @param measureEstimate \r\n * @param currentLine \r\n * @param columnCount \r\n * @param lastSystem \r\n */\r\n justifyY(scoreLayout: ScaledPageLayout, rowCount: number, currentLine: SmoMeasure[], lastSystem: boolean) {\r\n let i = 0;\r\n const sh = SvgHelpers;\r\n // If there are fewer measures in the system than the max, don't justify.\r\n // We estimate the staves at the same absolute y value.\r\n // Now, move them down so the top of the staves align for all measures in a row.\r\n const measuresToHide: SmoMeasure[] = [];\r\n let anyNotes = false;\r\n for (i = 0; i < rowCount; ++i) {\r\n // lowest staff has greatest staffY value.\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n const lowestStaff = rowAdj.reduce((a, b) =>\r\n a.staffY > b.staffY ? a : b\r\n );\r\n const hasNotes = rowAdj.findIndex((x) => x.isRest() === false) >= 0;\r\n if (hasNotes) {\r\n anyNotes = true;\r\n }\r\n rowAdj.forEach((measure) => {\r\n measure.svg.hideEmptyMeasure = false;\r\n if (this.score.preferences.hideEmptyLines && !hasNotes && !this.score.isPartExposed()) {\r\n measuresToHide.push(measure);\r\n }\r\n const adj = lowestStaff.staffY - measure.staffY;\r\n measure.setY(measure.staffY + adj, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x, measure.svg.logicalBox.y + adj, measure.svg.logicalBox.width, measure.svg.logicalBox.height), 'justifyY');\r\n });\r\n const rightStaff = rowAdj.reduce((a, b) =>\r\n a.staffX + a.staffWidth > b.staffX + b.staffWidth ? a : b);\r\n\r\n const ld = layoutDebug;\r\n let justifyX = 0;\r\n let columnCount = rowAdj.length;\r\n // missing offset is for systems that have fewer measures than the default (due to section break or score ending)\r\n let missingOffset = 0;\r\n if (scoreLayout.maxMeasureSystem > 1 && \r\n columnCount < scoreLayout.maxMeasureSystem\r\n && lastSystem) {\r\n missingOffset = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1)) * (scoreLayout.maxMeasureSystem - columnCount);\r\n columnCount = scoreLayout.maxMeasureSystem;\r\n }\r\n if (scoreLayout.maxMeasureSystem > 1 || !lastSystem) {\r\n justifyX = Math.round((scoreLayout.pageWidth - (scoreLayout.leftMargin + scoreLayout.rightMargin + rightStaff.staffX + rightStaff.staffWidth + missingOffset))\r\n / columnCount);\r\n }\r\n let justOffset = 0;\r\n rowAdj.forEach((measure) => {\r\n measure.setWidth(measure.staffWidth + justifyX, '_estimateMeasureDimensions justify');\r\n measure.setX(measure.staffX + justOffset, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x + justOffset,\r\n measure.svg.logicalBox.y, measure.staffWidth, measure.svg.logicalBox.height), 'justifyY');\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.adjust);\r\n }\r\n justOffset += justifyX;\r\n });\r\n }\r\n if (this.score.preferences.hideEmptyLines && anyNotes) {\r\n let adjY = 0;\r\n for (i = 0; i < rowCount; ++i) {\r\n const rowAdj = measuresToHide.filter((mm) => mm.svg.rowInSystem === i);\r\n if (rowAdj.length) {\r\n adjY += rowAdj[0].svg.logicalBox.height;\r\n rowAdj.forEach((mm) => {\r\n mm.svg.logicalBox.height = 0;\r\n mm.svg.hideEmptyMeasure = true;\r\n });\r\n } else {\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n rowAdj.forEach((row) => {\r\n row.setY(row.svg.staffY - adjY, 'format-hide');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * highest value is actually the one lowest on the page\r\n * @param measure \r\n * @param note \r\n * @returns \r\n */\r\n static _highestLowestHead(measure: SmoMeasure, note: SmoNote) {\r\n // note...er warning: Notes always have at least 1 pitch, even a rest\r\n // or glyph has a pitch to indicate the placement\r\n const hilo = { hi: 0, lo: 99999999 }; \r\n note.pitches.forEach((pitch) => { \r\n const line = 5 - SmoMusic.pitchToStaffLine(measure.clef, pitch);\r\n // TODO: use actual note head/rest/glyph. 10 px is space between staff lines\r\n const noteHeight = 10;\r\n const px = (noteHeight * line);\r\n hilo.lo = Math.min(hilo.lo, px - noteHeight / 2);\r\n hilo.hi = Math.max(hilo.hi, px + noteHeight / 2);\r\n });\r\n return hilo;\r\n }\r\n static textFont(lyric: SmoLyric) {\r\n return TextFormatter.create(lyric.fontInfo);\r\n }\r\n\r\n /**\r\n * Calculate the dimensions of symbols based on where in a system we are, like whether we need to show\r\n * the key signature, clef etc.\r\n * @param systemIndex \r\n * @param measure \r\n * @param clefLast \r\n * @param keySigLast \r\n * @param timeSigLast \r\n * @param tempoLast \r\n * @param score \r\n */\r\n calculateBeginningSymbols(systemIndex: number, measure: SmoMeasure,\r\n clefLast: string, keySigLast: string, timeSigLast: TimeSignature, tempoLast: SmoTempoText) {\r\n // The key signature is set based on the transpose index already, i.e. an Eb part in concert C already has 3 sharps.\r\n const xposeScore = this.score?.preferences?.transposingScore && (this.score?.isPartExposed() === false);\r\n const xposeOffset = xposeScore ? measure.transposeIndex : 0;\r\n const measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, xposeOffset);\r\n measure.svg.forceClef = (systemIndex === 0 || measure.clef !== clefLast);\r\n measure.svg.forceTimeSignature = (measure.measureNumber.measureIndex === 0 || \r\n (!SmoMeasure.timeSigEqual(timeSigLast, measure.timeSignature)) || measure.timeSignature.displayString.length > 0);\r\n if (measure.timeSignature.display === false) {\r\n measure.svg.forceTimeSignature = false;\r\n }\r\n measure.svg.forceTempo = false;\r\n const tempo = measure.getTempo();\r\n if (tempo && measure.measureNumber.measureIndex === 0) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n } else if (tempo && tempoLast) {\r\n if (!SmoTempoText.eq(tempo, tempoLast) && measure.svg.rowInSystem === 0) {\r\n measure.svg.forceTempo = tempo.display;\r\n }\r\n } else if (tempo) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n }\r\n if (measureKeySig !== keySigLast && measure.measureNumber.measureIndex > 0) {\r\n measure.canceledKeySignature = SmoMusic.vexKeySigWithOffset(keySigLast, xposeOffset);\r\n measure.svg.forceKeySignature = true;\r\n } else if (systemIndex === 0 && measureKeySig !== 'C') {\r\n measure.svg.forceKeySignature = true;\r\n } else {\r\n measure.svg.forceKeySignature = false;\r\n }\r\n }\r\n\r\n /**\r\n * The baseline is the top line of the staff. aboveBaseline is a negative number\r\n * that indicates how high above the baseline the measure goes. belowBaseline\r\n * is a positive number that indicates how far below the baseline the measure goes.\r\n * the height of the measure is below-above. Vex always renders a staff such that\r\n * the y coordinate passed in for the stave is on the baseline.\r\n * \r\n * Note to past self: this was a really useful comment. Thank you.\r\n * **/\r\n estimateMeasureHeight(measure: SmoMeasure): { aboveBaseline: number, belowBaseline: number } {\r\n let yTop = 0; // highest point, smallest Y value\r\n let yBottom = measure.lines * 10; // lowest point, largest Y value.\r\n let flag: number = -1;\r\n let lyricOffset = 0;\r\n const measureIndex = measure.measureNumber.measureIndex;\r\n const staffIndex = measure.measureNumber.staffId;\r\n const stave = this.score.staves[staffIndex];\r\n stave.renderableModifiers.forEach((mm) => {\r\n if (mm.startSelector.staff === staffIndex && (mm.startSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex) ||\r\n mm.endSelector.staff === staffIndex && \r\n (mm.endSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex && mm.endSelector.measure !== mm.startSelector.measure)) {\r\n if (mm.ctor === 'SmoHairpin') {\r\n const hp = mm as SmoStaffHairpin;\r\n if (hp.position === SmoStaffHairpin.positions.ABOVE) {\r\n yTop = yTop - hp.height;\r\n } else {\r\n yBottom = yBottom + hp.height;\r\n }\r\n } else if (mm.ctor === 'SmoStaffTextBracket') {\r\n const tb = mm as SmoStaffTextBracket;\r\n const tbHeight = 14 + (10 * Math.abs(tb.line - 1)); // 14 default font size\r\n if (tb.position === SmoStaffTextBracket.positions.TOP) {\r\n yTop = yTop - tbHeight;\r\n } else {\r\n yBottom = yBottom + tbHeight;\r\n } \r\n }\r\n }\r\n });\r\n if (measure.svg.forceClef) {\r\n yBottom += vexGlyph.clef(measure.clef).yTop + vexGlyph.clef(measure.clef).yBottom;\r\n yTop = yTop - vexGlyph.clef(measure.clef).yTop;\r\n }\r\n\r\n if (measure.svg.forceTempo) {\r\n yTop = Math.min(-1 * vexGlyph.tempo.yTop, yTop);\r\n }\r\n let yBottomOffset = 0;\r\n let yBottomVoiceZero = 0;\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const bg = SuiLayoutFormatter._beamGroupForNote(measure, note);\r\n flag = SmoNote.flagStates.auto;\r\n if (bg && note.noteType === 'n') {\r\n flag = bg.notes[0].flagState;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = bg.notes[0].pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n } else {\r\n flag = note.flagState;\r\n // odd-numbered voices flip default up/down\r\n const voiceMod = voiceIx % 2;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = note.pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n if (voiceMod === 1) {\r\n flag = (flag === SmoNote.flagStates.down) ? SmoNote.flagStates.up : SmoNote.flagStates.down;\r\n }\r\n }\r\n }\r\n const hiloHead = SuiLayoutFormatter._highestLowestHead(measure, note);\r\n if (flag === SmoNote.flagStates.down) {\r\n yTop = Math.min(hiloHead.lo, yTop);\r\n yBottom = Math.max(hiloHead.hi + vexGlyph.stem.height, yBottom);\r\n } else {\r\n yTop = Math.min(hiloHead.lo - vexGlyph.stem.height, yTop);\r\n yBottom = Math.max(hiloHead.hi, yBottom);\r\n }\r\n // Lyrics will be rendered below the lowest thing on the staff, so add to\r\n // belowBaseline value based on the max number of verses and font size\r\n // it will extend\r\n });\r\n // Vex won't adjust for music in voices > 0 when placing lyrics. \r\n // So we need to adjust here, if voices > 0 have music below lyrics. \r\n if (voiceIx > 0 && yBottomVoiceZero < yBottom) {\r\n yBottomOffset = yBottom - yBottomVoiceZero;\r\n } else {\r\n yBottomVoiceZero = yBottom;\r\n }\r\n });\r\n let lyricsToAdjust: SmoLyric[] = [];\r\n // get the lowest music part, then consider the lyrics\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const lyrics = note.getTrueLyrics();\r\n lyricsToAdjust = lyricsToAdjust.concat(lyrics);\r\n if (lyrics.length) {\r\n const maxLyric = lyrics.reduce((a, b) => a.verse > b.verse ? a : b);\r\n const fontInfo = SuiLayoutFormatter.textFont(maxLyric);\r\n lyricOffset = Math.max((maxLyric.verse + 2) * fontInfo.maxHeight, lyricOffset);\r\n }\r\n const dynamics = note.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n dynamics.forEach((dyn) => {\r\n yBottom = Math.max((10 * dyn.yOffsetLine - 50) + 11, yBottom);\r\n yTop = Math.min(10 * dyn.yOffsetLine - 50, yTop);\r\n });\r\n note.articulations.forEach((articulation) => {\r\n if (articulation.position === SmoArticulation.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n });\r\n note.ornaments.forEach((ornament) => {\r\n if (ornament.position === SmoOrnament.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n })\r\n });\r\n });\r\n yBottom += lyricOffset;\r\n if (lyricsToAdjust.length > 0) {\r\n lyricsToAdjust.forEach((lyric: SmoLyric) => {\r\n lyric.musicYOffset = yBottomOffset;\r\n });\r\n }\r\n return { belowBaseline: yBottom, aboveBaseline: yTop };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\ndeclare var $: any;\r\n\r\nexport interface CodeRegion {\r\n time: number,\r\n percent: number\r\n}\r\nexport class layoutDebug {\r\n static get values(): Record {\r\n return {\r\n pre: 1,\r\n play: 2,\r\n adjust: 4,\r\n system: 8,\r\n scroll: 16,\r\n artifactMap: 32,\r\n mouseDebug: 64,\r\n dragDebug: 128,\r\n dialogEvents: 256,\r\n cursor: 512\r\n };\r\n }\r\n\r\n static get classes(): Record {\r\n return {\r\n 1: 'measure-place-dbg',\r\n 2: 'measure-play-dbg',\r\n 4: 'measure-adjust-dbg',\r\n 8: 'system-place-dbg',\r\n 16: 'scroll-box-debug',\r\n 32: 'measure-adjustHeight-dbg',\r\n 64: 'mouse-debug',\r\n 128: 'drag-debug',\r\n 256: '',\r\n 512: 'cursor-adj-dbg',\r\n };\r\n }\r\n static get codeRegions(): Record {\r\n return {\r\n COMPUTE: 0,\r\n PREFORMATA: 1,\r\n PREFORMATB: 2,\r\n PREFORMATC: 3,\r\n FORMAT: 4,\r\n RENDER: 5,\r\n UPDATE_MAP: 6,\r\n POST_RENDER: 7,\r\n MAP: 8,\r\n LAST: 8\r\n };\r\n }\r\n static get codeRegionStrings(): string[] {\r\n return ['COMPUTE', 'PREFORMATA', 'PREFORMATB', 'PREFORMATC', 'FORMAT', 'RENDER', 'UPDATE_MAP', 'POST_RENDER', 'MAP'];\r\n }\r\n static mask: number = 0;\r\n static _textDebug: number[] = [];\r\n static timestampHash: Record = {};\r\n static _dialogEvents: string[] = [];\r\n\r\n static clearTimestamps() {\r\n for (var i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n layoutDebug.timestampHash[i] = 0;\r\n }\r\n }\r\n\r\n static setTimestamp(region: number, millis: number) {\r\n layoutDebug.timestampHash[region] += millis;\r\n }\r\n static printTimeReport() {\r\n let total = 0;\r\n let report: Record = {};\r\n let i = 0;\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n total += layoutDebug.timestampHash[i];\r\n report[layoutDebug.codeRegionStrings[i]] = {\r\n time: layoutDebug.timestampHash[i], percent: 0\r\n };\r\n }\r\n report['total'] = { time: total, percent: 100 };\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n report[layoutDebug.codeRegionStrings[i]].percent =\r\n Math.round((report[layoutDebug.codeRegionStrings[i]].time * 100) / report.total.time);\r\n }\r\n console.log(JSON.stringify(report, null, ' '));\r\n }\r\n\r\n static flagSet(value: number) {\r\n return layoutDebug.mask & value;\r\n }\r\n\r\n static clearAll() {\r\n layoutDebug.mask = 0;\r\n }\r\n static setAll() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256;\r\n }\r\n static setRenderFlags() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32;\r\n }\r\n static clearDebugBoxes(value: number) {\r\n if (layoutDebug.flagSet(value)) {\r\n var selector = 'g.' + layoutDebug.classes[value];\r\n $(selector).remove();\r\n }\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, flag: number) {\r\n if (!box) {\r\n return;\r\n }\r\n if (!box.height) {\r\n box.height = 1;\r\n }\r\n if (layoutDebug.flagSet(flag)) {\r\n SvgHelpers.debugBox(svg, box, layoutDebug.classes[flag], 0);\r\n }\r\n }\r\n\r\n static setFlag(value: number) {\r\n var flag = layoutDebug.values[value];\r\n if (typeof (layoutDebug.mask) == 'undefined') {\r\n layoutDebug.mask = flag;\r\n return;\r\n }\r\n layoutDebug.mask |= flag;\r\n layoutDebug.setFlagDivs();\r\n }\r\n static setFlagDivs() {\r\n $('.scroll-box-debug').remove();\r\n $('.drag-debug').remove();\r\n $('.mouse-debug').remove();\r\n $('.play-debug').remove();\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.mouseDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.dragDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.play) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n }\r\n static updateScrollDebug(point: SvgPoint) {\r\n const displayString = 'X: ' + point.x + ' Y: ' + point.y;\r\n $('.scroll-box-debug').text(displayString);\r\n $('.scroll-box-debug').css('left', '2%').css('top', '20px');\r\n }\r\n static updateMouseDebug(client: SvgPoint, logical: SvgPoint, offset: SvgPoint) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) offset (${offset.x}, ${offset.y})`;\r\n $('.mouse-debug').text(displayString);\r\n $('.mouse-debug').css('left', '2%').css('top', '60px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updateDragDebug(client: SvgPoint, logical: SvgPoint, state: string) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) state ${state})`;\r\n $('.drag-debug').text(displayString);\r\n $('.drag-debug').css('left', '2%').css('top', '80px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updatePlayDebug(selector: SmoSelector, logical: SvgBox) {\r\n const displayString = `mm: ${selector.measure} tick: ${selector.tick} svg: (${logical.x},${logical.y}, ${logical.width}, ${logical.height})`;\r\n $('.play-debug').text(displayString);\r\n $('.play-debug').css('left', '2%').css('top', '100px').css('position','absolute').css('font-size','11px');\r\n }\r\n\r\n static addTextDebug(value: number) {\r\n layoutDebug._textDebug.push(value);\r\n console.log(value);\r\n }\r\n\r\n static addDialogDebug(value: string) {\r\n layoutDebug._dialogEvents.push(value);\r\n console.log(value);\r\n }\r\n\r\n static measureHistory(measure: SmoMeasure, oldVal: string, newVal: any, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n var oldExp = (typeof ((measure as any).svg[oldVal]) == 'object') ?\r\n JSON.stringify((measure as any).svg[oldVal]).replace(/\"/g, '') : (measure as any).svg[oldVal];\r\n var newExp = (typeof (newVal) == 'object') ? JSON.stringify(newVal).replace(/\"/g, '') : newVal;\r\n measure.svg.history.push(oldVal + ': ' + oldExp + '=> ' + newExp + ' ' + description);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelector, SmoSelection, ModifierTab } from '../../smo/xform/selections';\r\nimport { OutlineInfo, SvgHelpers } from './svgHelpers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNoteModifierBase, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore, SmoModifier } from '../../smo/data/score';\r\nimport { SvgPageMap } from './svgPageMap';\r\n\r\n/**\r\n * DI information about renderer, so we can notify renderer and it can contain\r\n * a tracker object\r\n * @param pageMap {@link SvgPageMap}: SvgPageMap - container of SVG elements and vex renderers\r\n * @param score {@link SmoScore}\r\n * @param dirty lets the caller know the display needs update\r\n * @param passState state machine in rendering part/all of the score\r\n * @param renderPromise awaits on render all\r\n * @param addToReplaceQueue adds a measure to the quick update queue\r\n * @param renderElement a little redundant with svg\r\n * @category SuiRender\r\n */\r\nexport interface SuiRendererBase {\r\n pageMap: SvgPageMap,\r\n score: SmoScore | null,\r\n dirty: boolean,\r\n passState: number,\r\n renderPromise(): Promise,\r\n addToReplaceQueue(mm: SmoSelection[]): void,\r\n renderElement: Element\r\n}\r\n// used to perform highlights in the backgroundd\r\nexport interface HighlightQueue {\r\n selectionCount: number, deferred: boolean\r\n}\r\n/**\r\n * Map the notes in the svg so they can respond to events and interact\r\n * with the mouse/keyboard\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiMapper {\r\n renderer: SuiRendererBase;\r\n scroller: SuiScroller;\r\n // measure to selector map\r\n measureNoteMap: Record = {};\r\n // notes currently selected. Something is always selected\r\n // modifiers (text etc.) that have been selected\r\n modifierSelections: ModifierTab[] = [];\r\n selections: SmoSelection[] = [];\r\n // The list of modifiers near the current selection\r\n localModifiers: ModifierTab[] = [];\r\n modifierIndex: number = -1;\r\n modifierSuggestion: ModifierTab | null = null;\r\n pitchIndex: number = -1;\r\n // By default, defer highlights for performance.\r\n deferHighlightMode: boolean = true;\r\n suggestion: SmoSelection | null = null;\r\n pasteBuffer: PasteBuffer;\r\n highlightQueue: HighlightQueue;\r\n mouseHintBox: OutlineInfo | null = null;\r\n selectionRects: Record = {};\r\n outlines: Record = {};\r\n mapping: boolean = false;\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller, pasteBuffer: PasteBuffer) {\r\n // renderer renders the music when it changes\r\n this.renderer = renderer;\r\n this.scroller = scroller;\r\n this.modifierIndex = -1;\r\n this.localModifiers = [];\r\n // index if a single pitch of a chord is selected\r\n this.pitchIndex = -1;\r\n // the current selection, which is also the copy/paste destination\r\n this.pasteBuffer = pasteBuffer;\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n abstract highlightSelection(): void;\r\n abstract _growSelectionRight(hold?: boolean): number; \r\n abstract _setModifierAsSuggestion(sel: ModifierTab): void;\r\n abstract _setArtifactAsSuggestion(sel: SmoSelection): void;\r\n abstract getIdleTime(): number;\r\n updateHighlight() {\r\n const self = this;\r\n if (this.selections.length === 0) {\r\n this.highlightQueue.deferred = false;\r\n this.highlightQueue.selectionCount = 0;\r\n return;\r\n }\r\n if (this.highlightQueue.selectionCount === this.selections.length) {\r\n this.highlightSelection();\r\n this.highlightQueue.deferred = false;\r\n } else {\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n deferHighlight() {\r\n if (!this.deferHighlightMode) {\r\n this.highlightSelection();\r\n }\r\n const self = this;\r\n if (!this.highlightQueue.deferred) {\r\n this.highlightQueue.deferred = true;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n _createLocalModifiersList() {\r\n this.localModifiers = [];\r\n let index = 0;\r\n this.selections.forEach((sel) => {\r\n sel.note?.getGraceNotes().forEach((gg) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: gg, box: gg.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.note?.getModifiers('SmoDynamicText').forEach((dyn) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: dyn, box: dyn.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoVolta').forEach((volta) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: volta, box: volta.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoTempoText').forEach((tempo) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: tempo, box: tempo.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.staff.renderableModifiers.forEach((mod) => {\r\n if (SmoSelector.gteq(sel.selector, mod.startSelector) &&\r\n SmoSelector.lteq(sel.selector, mod.endSelector) && mod.logicalBox) {\r\n const exists = this.localModifiers.find((mm) => mm.modifier.ctor === mod.ctor);\r\n if (!exists) {\r\n this.localModifiers.push({ index, selection: sel, modifier: mod, box: mod.logicalBox });\r\n index += 1;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * When a modifier is selected graphically, update the selection list\r\n * and create a local modifier list\r\n * @param modifierTabs \r\n */\r\n createLocalModifiersFromModifierTabs(modifierTabs: ModifierTab[]) {\r\n const selections: SmoSelection[] = [];\r\n const modMap: Record = {};\r\n modifierTabs.forEach((mt) => {\r\n if (mt.selection) {\r\n const key = SmoSelector.getNoteKey(mt.selection.selector);\r\n if (!modMap[key]) {\r\n selections.push(mt.selection);\r\n modMap[key] = true;\r\n }\r\n }\r\n });\r\n if (selections.length) {\r\n this.selections = selections;\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n }\r\n }\r\n // used by remove dialogs to clear removed thing\r\n clearModifierSelections() {\r\n this.modifierSelections = [];\r\n this._createLocalModifiersList();\r\n this.modifierIndex = -1;\r\n if (this.outlines['staffModifier'] && this.outlines['staffModifier'].element) {\r\n this.outlines['staffModifier'].element.remove();\r\n this.outlines['staffModifier'].element = undefined;\r\n }\r\n // this.eraseRect('staffModifier'); not sure where this should go\r\n }\r\n // ### loadScore\r\n // We are loading a new score. clear the maps so we can rebuild them after\r\n // rendering\r\n loadScore() {\r\n this.measureNoteMap = {};\r\n this.clearModifierSelections();\r\n this.selections = [];\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n // ### _clearMeasureArtifacts\r\n // clear the measure from the measure and note maps so we can rebuild it.\r\n clearMeasureMap(measure: SmoMeasure) {\r\n const selector = { staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] };\r\n\r\n // Unselect selections in this measure so we can reselect them when re-tracked\r\n const ar: SmoSelection[] = [];\r\n this.selections.forEach((selection) => {\r\n if (selection.selector.staff !== selector.staff || selection.selector.measure !== selector.measure) {\r\n ar.push(selection);\r\n }\r\n });\r\n this.selections = ar;\r\n }\r\n\r\n _copySelectionsByMeasure(staffIndex: number, measureIndex: number) {\r\n const rv = this.selections.filter((sel) => sel.selector.staff === staffIndex && sel.selector.measure === measureIndex);\r\n const ticks = rv.length < 1 ? 0 : rv.map((sel) => (sel.note as SmoNote).tickCount).reduce((a, b) => a + b);\r\n const selectors: SmoSelector[] = [];\r\n rv.forEach((sel) => {\r\n const nsel = JSON.parse(JSON.stringify(sel.selector));\r\n if (!nsel.pitches) {\r\n nsel.pitches = [];\r\n }\r\n selectors.push(nsel);\r\n });\r\n return { ticks, selectors };\r\n }\r\n deleteMeasure(selection: SmoSelection) {\r\n const selCopy = this._copySelectionsByMeasure(selection.selector.staff, selection.selector.measure)\r\n .selectors;\r\n this.clearMeasureMap(selection.measure);\r\n if (selCopy.length) {\r\n selCopy.forEach((selector) => {\r\n const nsel = JSON.parse(JSON.stringify(selector));\r\n if (selector.measure === 0) {\r\n nsel.measure += 1;\r\n } else {\r\n nsel.measure -= 1;\r\n }\r\n this.selections.push(this._getClosestTick(nsel));\r\n });\r\n }\r\n }\r\n _updateNoteModifier(selection: SmoSelection, modMap: Record, modifier: SmoNoteModifierBase, ix: number) {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab(\r\n {\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n }\r\n );\r\n ix += 1;\r\n const context = this.renderer.pageMap.getRendererFromModifier(modifier);\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n return ix;\r\n }\r\n\r\n _updateModifiers() {\r\n let ix = 0;\r\n const modMap: Record = {};\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n this.renderer.score.textGroups.forEach((modifier) => {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection: null,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n }\r\n });\r\n const keys = Object.keys(this.measureNoteMap); \r\n keys.forEach((selKey) => {\r\n const selection = this.measureNoteMap[selKey];\r\n selection.staff.renderableModifiers.forEach((modifier) => {\r\n if (SmoSelector.contains(selection.selector, modifier.startSelector, modifier.endSelector)) {\r\n if (!modMap[modifier.attrs.id]) {\r\n if (modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n }\r\n }\r\n });\r\n selection.measure.modifiers.forEach((modifier) => {\r\n if (modifier.attrs.id\r\n && !modMap[modifier.attrs.id]\r\n && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: SvgHelpers.smoBox(modifier.logicalBox),\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n });\r\n selection.note?.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox) {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n }\r\n });\r\n\r\n selection.note?.graceNotes.forEach((modifier) => {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n });\r\n });\r\n }\r\n // ### _getClosestTick\r\n // given a musical selector, find the note artifact that is closest to it,\r\n // if an exact match is not available\r\n _getClosestTick(selector: SmoSelector): SmoSelection {\r\n let tickKey: string | undefined = '';\r\n const measureKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameMeasure(this.measureNoteMap[k].selector, selector)\r\n && this.measureNoteMap[k].selector.tick === 0);\r\n tickKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameNote(this.measureNoteMap[k].selector, selector));\r\n const firstObj = this.measureNoteMap[Object.keys(this.measureNoteMap)[0]];\r\n\r\n if (tickKey) {\r\n return this.measureNoteMap[tickKey];\r\n }\r\n if (measureKey) {\r\n return this.measureNoteMap[measureKey];\r\n }\r\n return firstObj;\r\n }\r\n\r\n // ### _setModifierBoxes\r\n // Create the DOM modifiers for the lyrics and other modifiers\r\n _setModifierBoxes(measure: SmoMeasure) {\r\n const context = this.renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n measure.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((smoNote: SmoNote) => {\r\n if (context) {\r\n const el = context.svg.getElementById(smoNote.renderId as string);\r\n if (el) {\r\n SvgHelpers.updateArtifactBox(context, (el as any), smoNote);\r\n // TODO: fix this, only works on the first line.\r\n smoNote.getModifiers('SmoLyric').forEach((lyrict: SmoNoteModifierBase) => {\r\n const lyric: SmoLyric = lyrict as SmoLyric;\r\n if (lyric.getText().length || lyric.isHyphenated()) {\r\n const lyricElement = context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (lyricElement) {\r\n SvgHelpers.updateArtifactBox(context, lyricElement, lyric as any);\r\n }\r\n }\r\n });\r\n }\r\n smoNote.graceNotes.forEach((g) => {\r\n if (g.element) {\r\n }\r\n var gel = context.svg.getElementById('vf-' + g.renderId) as SVGSVGElement;\r\n SvgHelpers.updateArtifactBox(context, gel, g);\r\n });\r\n smoNote.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox && modifier.element) {\r\n SvgHelpers.updateArtifactBox(context, modifier.element, modifier as any);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * returns true of the selections are adjacent\r\n * @param s1 a selections\r\n * @param s2 another election\r\n * @returns \r\n */\r\n isAdjacentSelection(s1: SmoSelection, s2: SmoSelection) {\r\n if (!this.renderer.score) {\r\n return false;\r\n }\r\n const nextSel = SmoSelection.advanceTicks(this.renderer.score, s1, 1);\r\n if (!nextSel) {\r\n return false;\r\n }\r\n return SmoSelector.eq(nextSel.selector, s2.selector);\r\n }\r\n areSelectionsAdjacent() {\r\n let selectionIx = 0;\r\n for (selectionIx = 0; this.selections.length > 1 && selectionIx < this.selections.length - 1; ++selectionIx) {\r\n if (!this.isAdjacentSelection(this.selections[selectionIx], this.selections[selectionIx + 1])) {\r\n return false;\r\n }\r\n }\r\n return true; \r\n }\r\n // ### updateMeasure\r\n // A measure has changed. Update the music geometry for it\r\n mapMeasure(staff: SmoSystemStaff, measure: SmoMeasure, printing: boolean) {\r\n let voiceIx = 0;\r\n let selectedTicks = 0;\r\n\r\n // We try to restore block selections. If all the selections in this block are not adjacent, only restore individual selections\r\n // if possible\r\n let adjacentSels = this.areSelectionsAdjacent();\r\n const lastResortSelection: SmoSelection[] = [];\r\n let selectionChanged = false;\r\n let vix = 0;\r\n let replacedSelectors = 0;\r\n if (!measure.svg.logicalBox) {\r\n return;\r\n }\r\n this._setModifierBoxes(measure);\r\n const timestamp = new Date().valueOf();\r\n // Keep track of any current selections in this measure, we will try to restore them.\r\n const sels = this._copySelectionsByMeasure(staff.staffId, measure.measureNumber.measureIndex);\r\n this.clearMeasureMap(measure);\r\n if (sels.selectors.length) {\r\n vix = sels.selectors[0].voice;\r\n }\r\n sels.selectors.forEach((sel) => {\r\n sel.voice = vix;\r\n });\r\n\r\n measure.voices.forEach((voice) => {\r\n let tick = 0;\r\n voice.notes.forEach((note) => {\r\n const selector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: voiceIx,\r\n tick,\r\n pitches: []\r\n };\r\n if (typeof(note.logicalBox) === 'undefined') {\r\n console.warn('note has no box');\r\n }\r\n // create a selection for the newly rendered note\r\n const selection = new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n box: SvgHelpers.smoBox(SvgHelpers.smoBox(note.logicalBox)),\r\n type: 'rendered'\r\n });\r\n // and add it to the map\r\n this._updateMeasureNoteMap(selection, printing);\r\n\r\n // If this note is the same location as something that was selected, reselect it\r\n if (replacedSelectors < sels.selectors.length && selection.selector.tick === sels.selectors[replacedSelectors].tick &&\r\n selection.selector.voice === vix) {\r\n this.selections.push(selection);\r\n // Reselect any pitches.\r\n if (sels.selectors[replacedSelectors].pitches.length > 0) {\r\n sels.selectors[replacedSelectors].pitches.forEach((pitchIx) => {\r\n if (selection.note && selection.note.pitches.length > pitchIx) {\r\n selection.selector.pitches.push(pitchIx);\r\n }\r\n });\r\n }\r\n const note = selection.note as SmoNote;\r\n selectedTicks += note.tickCount;\r\n replacedSelectors += 1;\r\n selectionChanged = true;\r\n } else if (adjacentSels && selectedTicks > 0 && selectedTicks < sels.ticks && selection.selector.voice === vix) {\r\n // try to select the same length of music as was previously selected. So a 1/4 to 2 1/8, both\r\n // are selected\r\n replacedSelectors += 1;\r\n this.selections.push(selection);\r\n selectedTicks += note.tickCount;\r\n } else if (this.selections.length === 0 && sels.selectors.length === 0 && lastResortSelection.length === 0) {\r\n lastResortSelection.push(selection);\r\n }\r\n tick += 1;\r\n });\r\n voiceIx += 1;\r\n });\r\n // We deleted all the notes that were selected, select something else\r\n if (this.selections.length === 0) {\r\n selectionChanged = true;\r\n this.selections = lastResortSelection;\r\n }\r\n // If there were selections on this measure, highlight them.\r\n if (selectionChanged) {\r\n this.deferHighlight();\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.MAP, new Date().valueOf() - timestamp);\r\n }\r\n\r\n _getTicksFromSelections(): number {\r\n let rv = 0;\r\n this.selections.forEach((sel) => {\r\n if (sel.note) {\r\n rv += sel.note.tickCount;\r\n }\r\n });\r\n return rv;\r\n }\r\n _copySelections(): SmoSelector[] {\r\n const rv: SmoSelector[] = [];\r\n this.selections.forEach((sel) => {\r\n rv.push(sel.selector);\r\n });\r\n return rv;\r\n }\r\n // ### getExtremeSelection\r\n // Get the rightmost (1) or leftmost (-1) selection\r\n getExtremeSelection(sign: number): SmoSelection {\r\n let i = 0;\r\n let rv = this.selections[0];\r\n for (i = 1; i < this.selections.length; ++i) {\r\n const sa = this.selections[i].selector;\r\n if (sa.measure * sign > rv.selector.measure * sign) {\r\n rv = this.selections[i];\r\n } else if (sa.measure === rv.selector.measure && sa.tick * sign > rv.selector.tick * sign) {\r\n rv = this.selections[i];\r\n }\r\n }\r\n return rv;\r\n }\r\n _selectClosest(selector: SmoSelector) {\r\n var artifact = this._getClosestTick(selector);\r\n if (!artifact) {\r\n return;\r\n }\r\n if (this.selections.find((sel) => JSON.stringify(sel.selector)\r\n === JSON.stringify(artifact.selector))) {\r\n return;\r\n }\r\n const note = artifact.note as SmoNote;\r\n if (selector.pitches && selector.pitches.length && selector.pitches.length <= note.pitches.length) {\r\n // If the old selection had only a single pitch, try to recreate that.\r\n artifact.selector.pitches = JSON.parse(JSON.stringify(selector.pitches));\r\n }\r\n this.selections.push(artifact);\r\n }\r\n // ### updateMap\r\n // This should be called after rendering the score. It updates the score to\r\n // graphics map and selects the first object.\r\n updateMap() {\r\n const ts = new Date().valueOf();\r\n this.mapping = true;\r\n let tickSelected = 0;\r\n const selCopy = this._copySelections();\r\n const ticksSelectedCopy = this._getTicksFromSelections();\r\n const firstSelection = this.getExtremeSelection(-1);\r\n this._updateModifiers();\r\n\r\n // Try to restore selection. If there were none, just select the fist\r\n // thing in the score\r\n const firstKey = SmoSelector.getNoteKey(SmoSelector.default);\r\n if (!selCopy.length && this.renderer.score) {\r\n // If there is nothing rendered, don't update tracker\r\n if (typeof(this.measureNoteMap[firstKey]) !== 'undefined' && !firstSelection)\r\n this.selections = [this.measureNoteMap[firstKey]];\r\n } else if (this.areSelectionsAdjacent() && this.selections.length > 1) {\r\n // If there are adjacent selections, restore selections to the ticks that are in the score now\r\n if (!firstSelection) {\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n return;\r\n }\r\n this.selections = [];\r\n this._selectClosest(firstSelection.selector);\r\n const first = this.selections[0];\r\n tickSelected = (first.note as SmoNote).tickCount ?? 0;\r\n while (tickSelected < ticksSelectedCopy && first) {\r\n let delta: number = this._growSelectionRight(true);\r\n if (!delta) {\r\n break;\r\n }\r\n tickSelected += delta;\r\n }\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n this.mapping = false;\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n }\r\n createMousePositionBox(logicalBox: SvgBox) {\r\n const pageMap = this.renderer.pageMap;\r\n const page = pageMap.getRendererFromPoint(logicalBox);\r\n if (page) {\r\n const cof = (pageMap.zoomScale * pageMap.renderScale); \r\n const debugBox = SvgHelpers.smoBox(logicalBox);\r\n debugBox.y -= (page.box.y + 5 / cof);\r\n debugBox.x -= (page.box.x + 5 / cof)\r\n debugBox.width = 10 / cof;\r\n debugBox.height = 10 / cof;\r\n if (!this.mouseHintBox) {\r\n this.mouseHintBox = {\r\n stroke: SvgPageMap.strokes['debug-mouse-box'],\r\n classes: 'hide-print',\r\n box: debugBox,\r\n scroll: { x: 0, y: 0 },\r\n context: page,\r\n timeOff: 1000\r\n };\r\n }\r\n this.mouseHintBox.context = page;\r\n this.mouseHintBox.box = debugBox;\r\n SvgHelpers.outlineRect(this.mouseHintBox);\r\n } \r\n }\r\n eraseMousePositionBox() {\r\n if (this.mouseHintBox && this.mouseHintBox.element) {\r\n this.mouseHintBox.element.remove();\r\n this.mouseHintBox.element = undefined;\r\n }\r\n }\r\n /**\r\n * Find any musical elements at the supplied screen coordinates and set them as the selection\r\n * @param bb \r\n * @returns \r\n */\r\n intersectingArtifact(bb: SvgBox) {\r\n const scrollState = this.scroller.scrollState;\r\n bb = SvgHelpers.boxPoints(bb.x + scrollState.x, bb.y + scrollState.y, bb.width ? bb.width : 1, bb.height ? bb.height : 1);\r\n const logicalBox = this.renderer.pageMap.clientToSvg(bb);\r\n const { selections, page } = this.renderer.pageMap.findArtifact(logicalBox);\r\n if (page) {\r\n const artifacts = selections;\r\n // const artifacts = SvgHelpers.findIntersectingArtifactFromMap(bb, this.measureNoteMap, SvgHelpers.smoBox(this.scroller.scrollState.scroll));\r\n // TODO: handle overlapping suggestions\r\n if (!artifacts.length) {\r\n const sel = this.renderer.pageMap.findModifierTabs(logicalBox);\r\n if (sel.length) {\r\n this._setModifierAsSuggestion(sel[0]);\r\n this.eraseMousePositionBox();\r\n } else {\r\n // no intersection, show mouse hint \r\n this.createMousePositionBox(logicalBox);\r\n }\r\n return;\r\n }\r\n const artifact = artifacts[0];\r\n this.eraseMousePositionBox();\r\n this._setArtifactAsSuggestion(artifact);\r\n }\r\n }\r\n _getRectangleChain(selection: SmoSelection) {\r\n const rv: number[] = [];\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n rv.push(selection.measure.svg.pageIndex);\r\n rv.push(selection.measure.svg.lineIndex);\r\n rv.push(selection.measure.measureNumber.measureIndex);\r\n return rv;\r\n }\r\n _updateMeasureNoteMap(artifact: SmoSelection, printing: boolean) {\r\n const note = artifact.note as SmoNote;\r\n const noteKey = SmoSelector.getNoteKey(artifact.selector);\r\n const activeVoice = artifact.measure.getActiveVoice();\r\n // not has not been drawn yet.\r\n if ((!artifact.box) || (!artifact.measure.svg.logicalBox)) {\r\n return;\r\n }\r\n this.measureNoteMap[noteKey] = artifact;\r\n this.renderer.pageMap.addArtifact(artifact);\r\n artifact.scrollBox = { x: artifact.box.x,\r\n y: artifact.measure.svg.logicalBox.y };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, SvgBuilder } from \"./svgHelpers\";\r\nimport { buildDom } from \"../../common/htmlHelpers\";\r\nimport { SuiScoreViewOperations } from \"./scoreViewOperations\";\r\nimport { SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport interface PianoKey {\r\n box: SvgBox,\r\n keyElement: SVGSVGElement\r\n}\r\nexport class SuiPiano {\r\n renderElement: SVGSVGElement | null;\r\n view: SuiScoreViewOperations;\r\n octaveOffset: number = 0;\r\n chordPedal: boolean = false;\r\n objects: PianoKey[] = [];\r\n suggestFadeTimer: NodeJS.Timer | null = null;\r\n elementId: string = 'piano-svg';\r\n constructor(view: SuiScoreViewOperations) {\r\n this.renderElement = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n this.view = view;\r\n this.render();\r\n }\r\n\r\n static get dimensions() {\r\n return {\r\n wwidth: 23,\r\n bwidth: 13,\r\n wheight: 120,\r\n bheight: 80,\r\n octaves: 1\r\n };\r\n }\r\n // 7 white keys per octave\r\n static get wkeysPerOctave() {\r\n return 7;\r\n }\r\n static get owidth() {\r\n return SuiPiano.dimensions.wwidth * SuiPiano.wkeysPerOctave;\r\n }\r\n static createAndDisplay() {\r\n // Called by ribbon button.\r\n $('body').trigger('show-piano-event');\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n\r\n _mapKeys() {\r\n this.objects = [];\r\n var keys: SVGSVGElement[] = [].slice.call(this.renderElement!.getElementsByClassName('piano-key'));\r\n keys.forEach((key) => {\r\n var rect = SvgHelpers.smoBox(key.getBoundingClientRect());\r\n var id = key.getAttributeNS('', 'id');\r\n var artifact = {\r\n keyElement: key,\r\n box: rect,\r\n id: id\r\n };\r\n this.objects.push(artifact);\r\n });\r\n }\r\n _removeClass(classes: string) {\r\n Array.from(this.renderElement!.getElementsByClassName('piano-key')).forEach((el) => {\r\n $(el).removeClass(classes);\r\n });\r\n }\r\n _removeGlow() {\r\n this._removeClass('glow-key');\r\n }\r\n _fadeGlow(el: SVGSVGElement) {\r\n if (this.suggestFadeTimer) {\r\n clearTimeout(this.suggestFadeTimer as any);\r\n }\r\n // Make selection fade if there is a selection.\r\n this.suggestFadeTimer = setTimeout(() => {\r\n $(el).removeClass('glow-key');\r\n }, 1000);\r\n }\r\n bind() {\r\n // The menu option to toggle piano state\r\n $('body').off('show-piano-event').on('show-piano-event', () => {\r\n const isVisible = $('body').hasClass('show-piano');\r\n $('body').toggleClass('show-piano');\r\n this._mapKeys();\r\n });\r\n $('#piano-8va-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8vb-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = 1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-8vb-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8va-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = -1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-xpose-up').off('click').on('click', () => {\r\n this.view.transposeSelections(1);\r\n });\r\n $('#piano-xpose-down').off('click').on('click', () => {\r\n this.view.transposeSelections(-1);\r\n });\r\n $('#piano-enharmonic').off('click').on('click', () => {\r\n this.view.toggleEnharmonic();\r\n });\r\n $('button.jsLeft').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionLeft();\r\n });\r\n $('button.jsRight').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionRight(this.view.score, null, false);\r\n });\r\n $('button.jsGrowDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('doubleDuration');\r\n });\r\n $('button.jsGrowDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('dotDuration');\r\n });\r\n $('button.jsShrinkDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('halveDuration');\r\n });\r\n $('button.jsShrinkDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('undotDuration');\r\n });\r\n $('button.jsChord').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).toggleClass('activated');\r\n this.chordPedal = !this.chordPedal;\r\n });\r\n $(this.renderElement).off('mousemove').on('mousemove', (ev: any) => {\r\n if (Math.abs(this.objects[0].box.x - this.objects[0].keyElement.getBoundingClientRect().x)\r\n > this.objects[0].box.width / 2) {\r\n console.log('remap piano');\r\n this._mapKeys();\r\n }\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const clientBox = SvgHelpers.smoBox(SvgHelpers.boxPoints(ev.clientX, ev.clientY, 1, 1)); // last param is scroll offset\r\n\r\n var keyPressed = SvgHelpers.findSmallestIntersection(\r\n clientBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n const el: SVGSVGElement = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n if ($(el).hasClass('glow-key')) {\r\n return;\r\n }\r\n this._removeGlow();\r\n $(el).addClass('glow-key');\r\n this._fadeGlow(el);\r\n });\r\n $(this.renderElement).off('blur').on('blur', () => {\r\n this._removeGlow();\r\n });\r\n $(this.renderElement).off('click').on('click', (ev: any) => {\r\n this._updateSelections(ev);\r\n });\r\n // the close button on piano itself\r\n $('.close-piano').off('click').on('click', () => {\r\n this.view.score.preferences.showPiano = false;\r\n this.view.updateScorePreferences(this.view.score.preferences);\r\n });\r\n }\r\n static hidePiano() {\r\n if ($('body').hasClass('show-piano')) {\r\n $('body').removeClass('show-piano');\r\n }\r\n }\r\n static showPiano() {\r\n if ($('body').hasClass('show-piano') === false) {\r\n $('body').addClass('show-piano');\r\n // resize the work area.\r\n // $('body').trigger('forceResizeEvent');\r\n }\r\n }\r\n static get isShowing() {\r\n return $('body').hasClass('show-piano');\r\n }\r\n _updateSelections(ev: any) {\r\n // fake a scroller (piano scroller w/b cool tho...)\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const logicalBox = SvgHelpers.smoBox({ x: ev.clientX, y: ev.clientY });\r\n\r\n var keyPressed =\r\n SvgHelpers.findSmallestIntersection(logicalBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n if (!ev.shiftKey && !this.chordPedal) {\r\n this._removeClass('glow-key pressed-key');\r\n } else {\r\n var el = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n $(el).addClass('pressed-key');\r\n }\r\n const key = keyPressed.keyElement.id.substr(6, keyPressed.keyElement.id.length - 6);\r\n const pitch: Pitch = {\r\n letter: key[0].toLowerCase() as PitchLetter,\r\n octave: this.octaveOffset,\r\n accidental: key.length > 1 ? key[1] : 'n'\r\n };\r\n\r\n this.view.setPitchPiano(pitch, this.chordPedal);\r\n }\r\n _renderControls() {\r\n var b = buildDom;\r\n var r = b('button').classes('icon icon-cross close close-piano');\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDuration').append(b('span').classes('icon icon-duration_grow'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDuration').append(b('span').classes('icon icon-duration_less'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDot').append(b('span').classes('icon icon-duration_grow_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDot').append(b('span').classes('icon icon-duration_less_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n\r\n r = b('button').classes('key-ctrl jsLeft').append(b('span').classes('icon icon-arrow-left'));\r\n $('.piano-container .piano-keys').prepend(r.dom());\r\n r = b('button').classes('key-ctrl jsRight').append(b('span').classes('icon icon-arrow-right'));\r\n $('.piano-container .piano-keys').append(r.dom());\r\n\r\n r = b('button').classes('piano-ctrl').attr('id', 'piano-8va-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('va'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl ').attr('id', 'piano-8vb-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('vb'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeUp').attr('id', 'piano-xpose-up').append(\r\n b('span').classes('bold').text('+'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeDown').attr('id', 'piano-xpose-down').append(\r\n b('span').classes('bold').text('-'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsEnharmonic').attr('id', 'piano-enharmonic').append(\r\n b('span').classes('bold icon icon-accident'));\r\n\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsChord')\r\n .append(b('span').classes('icon icon-chords'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n }\r\n handleResize() {\r\n this._mapKeys();\r\n }\r\n playNote() {\r\n }\r\n render() {\r\n $('body').addClass('show-piano');\r\n var b = SvgBuilder.b;\r\n var d = SuiPiano.dimensions;\r\n // https://www.mathpages.com/home/kmath043.htm\r\n\r\n // Width of white key at back for C,D,E\r\n var b1off = d.wwidth - (d.bwidth * 2 / 3);\r\n\r\n // Width of other white keys at the back.\r\n var b2off = d.wwidth - (d.bwidth * 3) / 4;\r\n\r\n var xwhite = [{\r\n note: 'C',\r\n x: 0\r\n }, {\r\n note: 'D',\r\n x: d.wwidth\r\n }, {\r\n note: 'E',\r\n x: 2 * d.wwidth\r\n }, {\r\n note: 'F',\r\n x: 3 * d.wwidth\r\n }, {\r\n note: 'G',\r\n x: 4 * d.wwidth\r\n }, {\r\n note: 'A',\r\n x: 5 * d.wwidth\r\n }, {\r\n note: 'B',\r\n x: 6 * d.wwidth\r\n }\r\n ];\r\n var xblack = [{\r\n note: 'Db',\r\n x: b1off\r\n }, {\r\n note: 'Eb',\r\n x: 2 * b1off + d.bwidth\r\n }, {\r\n note: 'Gb',\r\n x: 3 * d.wwidth + b2off\r\n }, {\r\n note: 'Ab',\r\n x: (3 * d.wwidth + b2off) + b2off + d.bwidth\r\n }, {\r\n note: 'Bb',\r\n x: SuiPiano.owidth - (b2off + d.bwidth)\r\n }\r\n ];\r\n var wwidth = d.wwidth;\r\n var bwidth = d.bwidth;\r\n var wheight = d.wheight;\r\n var bheight = d.bheight;\r\n var owidth = SuiPiano.wkeysPerOctave * wwidth;\r\n\r\n // Start on C2 to C6 to reduce space\r\n var octaveOff = 7 - d.octaves;\r\n\r\n var x = 0;\r\n var y = 0;\r\n var r = b('g');\r\n for (var i = 0; i < d.octaves; ++i) {\r\n x = i * owidth;\r\n xwhite.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key white-key';\r\n if (nt == 'C4') {\r\n classes += ' middle-c';\r\n }\r\n var rect = b('rect').attr('id', 'keyId-' + nt).rect(x + key.x, y, wwidth, wheight, classes);\r\n r.append(rect);\r\n\r\n var tt = b('text').text(x + key.x + (wwidth / 5), bheight + 16, 'note-text', nt);\r\n r.append(tt);\r\n });\r\n xblack.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key black-key';\r\n var rect = b('rect').attr('id', 'keyId-' + nt).attr('fill', 'url(#piano-grad)').rect(x + key.x, 0, bwidth, bheight, classes);\r\n r.append(rect);\r\n });\r\n }\r\n var el = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n SvgHelpers.gradient(el, 'piano-grad', 'vertical', [{ color: '#000', offset: '0%', opacity: 1 },\r\n { color: '#777', offset: '50%', opacity: 1 }, { color: '#ddd', offset: '100%', opacity: 1 }]);\r\n el.appendChild(r.dom());\r\n this._renderControls();\r\n this._mapKeys();\r\n this.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support the state machine associated with background music rendering.\r\n * @module renderState\r\n */\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { UndoBuffer, UndoEntry } from '../../smo/xform/undo';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SuiMapper } from './mapper';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SuiScoreRender, ScoreRenderParams } from './scoreRender';\r\nimport { SuiExceptionHandler } from '../../ui/exceptions';\r\nimport { VexFlow, setFontStack } from '../../common/vex';\r\ndeclare var $: any;\r\n\r\n\r\nexport var scoreChangeEvent = 'smoScoreChangeEvent';\r\n/**\r\n * Manage the state of the score rendering. The score can be rendered either completely,\r\n * or partially for editing. This class works with the RenderDemon to decide when to\r\n * render the score after it has been modified, and keeps track of what the current\r\n * render state is (dirty, etc.)\r\n * @category SuiRender\r\n * */\r\nexport class SuiRenderState {\r\n dirty: boolean;\r\n replaceQ: SmoSelection[];\r\n stateRepCount: 0;\r\n viewportChanged: boolean;\r\n _resetViewport: boolean;\r\n measureMapper: SuiMapper | null;\r\n passState: number = SuiRenderState.passStates.initial;\r\n _score: SmoScore | null = null;\r\n _backupZoomScale: number = 0;\r\n renderer: SuiScoreRender;\r\n idleRedrawTime: number;\r\n idleLayoutTimer: number = 0; // how long the score has been idle\r\n demonPollTime: number;\r\n handlingRedraw: boolean = false;\r\n // signal to render demon that we have suspended background\r\n // rendering because we are recording or playing actions.\r\n suspendRendering: boolean = false;\r\n undoBuffer: UndoBuffer;\r\n undoStatus: number = 0;\r\n\r\n constructor(config: ScoreRenderParams) {\r\n this.dirty = true;\r\n this.replaceQ = [];\r\n this.stateRepCount = 0;\r\n this.setPassState(SuiRenderState.passStates.initial, 'ctor');\r\n this.viewportChanged = false;\r\n this._resetViewport = false;\r\n this.measureMapper = null;\r\n this.renderer = new SuiScoreRender(config);\r\n this.idleRedrawTime = config.config.idleRedrawTime;\r\n this.demonPollTime = config.config.demonPollTime;\r\n this.undoBuffer = config.undoBuffer;\r\n }\r\n get elementId() {\r\n return this.renderer.elementId;\r\n }\r\n get pageMap() {\r\n return this.renderer.vexContainers;\r\n }\r\n // ### setMeasureMapper\r\n // DI/notifier pattern. The measure mapper/tracker is updated when the score is rendered\r\n // so the UI stays in sync with the location of elements in the score.\r\n setMeasureMapper(mapper: SuiMapper) {\r\n this.measureMapper = mapper;\r\n this.renderer.measureMapper = mapper;\r\n }\r\n set stepMode(value: boolean) {\r\n this.suspendRendering = value;\r\n this.renderer.autoAdjustRenderTime = !value;\r\n if (this.measureMapper) {\r\n this.measureMapper.deferHighlightMode = !value;\r\n }\r\n }\r\n\r\n // ### createScoreRenderer\r\n // ### Description;\r\n // to get the score to appear, a div and a score object are required. The layout takes care of creating the\r\n // svg element in the dom and interacting with the vex library.\r\n static createScoreRenderer(config: SmoRenderConfiguration, renderElement: Element, score: SmoScore, undoBuffer: UndoBuffer): SuiRenderState {\r\n const ctorObj: ScoreRenderParams = {\r\n config,\r\n elementId: renderElement,\r\n score,\r\n undoBuffer\r\n };\r\n const renderer = new SuiRenderState(ctorObj);\r\n return renderer;\r\n }\r\n static get passStates(): Record {\r\n return { initial: 0, clean: 2, replace: 3 };\r\n }\r\n get renderElement(): Element {\r\n return this.elementId;\r\n }\r\n notifyFontChange() {\r\n setFontStack(this.score!.engravingFont);\r\n }\r\n addToReplaceQueue(selection: SmoSelection | SmoSelection[]) {\r\n if (this.passState === SuiRenderState.passStates.clean ||\r\n this.passState === SuiRenderState.passStates.replace) { \r\n if (Array.isArray(selection)) {\r\n this.replaceQ = this.replaceQ.concat(selection);\r\n } else {\r\n this.replaceQ.push(selection);\r\n }\r\n this.setDirty();\r\n }\r\n }\r\n\r\n setDirty() {\r\n if (!this.dirty) {\r\n this.dirty = true;\r\n if (this.passState === SuiRenderState.passStates.clean) {\r\n this.setPassState(SuiRenderState.passStates.replace, 'setDirty');\r\n }\r\n }\r\n }\r\n setRefresh() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'setRefresh');\r\n }\r\n rerenderAll() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'rerenderAll');\r\n this._resetViewport = true;\r\n }\r\n clearLine(measure: SmoMeasure) {\r\n const page = measure.svg.pageIndex;\r\n this.renderer.clearRenderedPage(page);\r\n }\r\n get renderStateClean() {\r\n return this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false;\r\n }\r\n get renderStateRendered() {\r\n return (this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false) ||\r\n (this.passState === SuiRenderState.passStates.replace && this.replaceQ.length === 0 && this.renderer.backgroundRender === false);\r\n }\r\n /**\r\n * Do a quick re-render of a measure that has changed, defer the whole score.\r\n * @returns \r\n */\r\n replaceMeasures() {\r\n const staffMap: Record = {};\r\n if (this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n this.replaceQ.forEach((change) => {\r\n this.renderer.replaceSelection(staffMap, change);\r\n });\r\n Object.keys(staffMap).forEach((key) => {\r\n const obj = staffMap[key];\r\n this.renderer.renderModifiers(obj.staff, obj.system);\r\n obj.system.renderEndings(this.measureMapper!.scroller);\r\n obj.system.updateLyricOffsets();\r\n });\r\n this.replaceQ = [];\r\n }\r\n async preserveScroll() {\r\n const scrollState = this.measureMapper!.scroller.scrollState;\r\n await this.renderPromise();\r\n this.measureMapper!.scroller.restoreScrollState(scrollState);\r\n }\r\n\r\n _renderStatePromise(condition: () => boolean): Promise {\r\n const oldSuspend = this.suspendRendering;\r\n this.suspendRendering = false;\r\n const self = this;\r\n const endAction = () => {\r\n self.suspendRendering = oldSuspend;\r\n };\r\n return PromiseHelpers.makePromise(condition, endAction, null, this.demonPollTime);\r\n }\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n renderPromise(): Promise {\r\n return this._renderStatePromise(() => this.renderStateClean);\r\n }\r\n\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n updatePromise() {\r\n this.replaceMeasures();\r\n return this._renderStatePromise(() => this.renderStateRendered);\r\n }\r\n async handleRedrawTimer() {\r\n if (this.handlingRedraw) {\r\n return;\r\n }\r\n if (this.suspendRendering) {\r\n return;\r\n }\r\n this.handlingRedraw = true;\r\n const redrawTime = Math.max(this.renderer.renderTime, this.idleRedrawTime);\r\n // If there has been a change, redraw the score\r\n if (this.passState === SuiRenderState.passStates.initial) {\r\n this.dirty = true;\r\n this.undoStatus = this.undoBuffer.opCount;\r\n this.idleLayoutTimer = Date.now();\r\n\r\n // indicate the display is 'dirty' and we will be refreshing it.\r\n $('body').addClass('refresh-1');\r\n try {\r\n // Sort of a hack. If the viewport changed, the scroll state is already reset\r\n // so we can't preserver the scroll state.\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n await this.render();\r\n } catch (ex) {\r\n console.error(ex);\r\n SuiExceptionHandler.instance.exceptionHandler(ex);\r\n this.handlingRedraw = false;\r\n }\r\n } else if (this.passState === SuiRenderState.passStates.replace && this.undoStatus === this.undoBuffer.opCount) {\r\n // Consider navigation as activity when deciding to refresh\r\n this.idleLayoutTimer = Math.max(this.idleLayoutTimer, this.measureMapper!.getIdleTime());\r\n $('body').addClass('refresh-1');\r\n // Do we need to refresh the score?\r\n if (this.renderer.backgroundRender === false && Date.now() - this.idleLayoutTimer > redrawTime) {\r\n this.passState = SuiRenderState.passStates.initial;\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n this.render();\r\n }\r\n } else {\r\n this.idleLayoutTimer = Date.now();\r\n this.undoStatus = this.undoBuffer.opCount;\r\n if (this.replaceQ.length > 0) {\r\n this.render();\r\n }\r\n }\r\n this.handlingRedraw = false;\r\n }\r\n pollRedraw() {\r\n setTimeout(() => {\r\n this.handleRedrawTimer();\r\n this.pollRedraw();\r\n }, this.demonPollTime);\r\n }\r\n\r\n startDemon() {\r\n this.pollRedraw();\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n this.renderer.renderTextGroup(gg);\r\n }\r\n /**\r\n * Set the SVG viewport\r\n * @param reset whether to re-render the entire SVG DOM\r\n * @returns \r\n */\r\n setViewport() {\r\n if (!this.score || !this.renderer) {\r\n return;\r\n }\r\n this.renderer.setViewport();\r\n this.score!.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n measure.svg.history = ['reset'];\r\n }\r\n });\r\n });\r\n }\r\n renderForPrintPromise(): Promise {\r\n $('body').addClass('print-render');\r\n const self = this;\r\n if (!this.score) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const layoutMgr = this.score!.layoutManager!;\r\n const layout = layoutMgr.getGlobalLayout();\r\n this._backupZoomScale = layout.zoomScale;\r\n layout.zoomScale = 1.0;\r\n layoutMgr.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n\r\n const promise = new Promise((resolve) => {\r\n const poll = () => {\r\n setTimeout(() => {\r\n if (!self.dirty && !self.renderer.backgroundRender) {\r\n // tracker.highlightSelection();\r\n $('body').removeClass('print-render');\r\n $('.vf-selection').remove();\r\n $('body').addClass('printing');\r\n $('.musicRelief').css('height', '');\r\n resolve();\r\n } else {\r\n poll();\r\n }\r\n }, 500);\r\n };\r\n poll();\r\n });\r\n return promise;\r\n }\r\n\r\n restoreLayoutAfterPrint() {\r\n const layout = this.score!.layoutManager!.getGlobalLayout();\r\n layout.zoomScale = this._backupZoomScale;\r\n this.score!.layoutManager!.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n }\r\n\r\n setPassState(st: number, location: string) {\r\n const oldState = this.passState;\r\n let msg = '';\r\n if (oldState !== st) {\r\n this.stateRepCount = 0;\r\n } else {\r\n this.stateRepCount += 1;\r\n }\r\n\r\n msg = location + ': passState ' + this.passState + '=>' + st;\r\n if (this.stateRepCount > 0) {\r\n msg += ' (' + this.stateRepCount + ')';\r\n }\r\n console.log(msg);\r\n this.passState = st;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this._score;\r\n }\r\n\r\n // used for debugging and drawing dots.\r\n dbgDrawDot(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean) {\r\n const context = this.renderer.getRenderer({ x, y });\r\n if (context) {\r\n context.getContext().beginPath();\r\n context.getContext().arc(x, y, radius, startAngle, endAngle, counterclockwise);\r\n context.getContext().closePath();\r\n context.getContext().fill(); \r\n }\r\n }\r\n set score(score: SmoScore | null) {\r\n if (score === null) {\r\n return;\r\n }\r\n /* if (this._score) {\r\n shouldReset = true;\r\n } */\r\n this.setPassState(SuiRenderState.passStates.initial, 'load score');\r\n const font = score.engravingFont;\r\n this.dirty = true;\r\n this._score = score;\r\n this.renderer.score = score;\r\n this.notifyFontChange();\r\n // if (shouldReset) {\r\n this.setViewport();\r\n if (this.measureMapper) {\r\n this.measureMapper.loadScore();\r\n }\r\n }\r\n\r\n // ### undo\r\n // Undo is handled by the render state machine, because the layout has to first\r\n // delete areas of the viewport that may have changed,\r\n // then create the modified score, then render the 'new' score.\r\n undo(undoBuffer: UndoBuffer, staffMap: Record): SmoScore {\r\n let op = 'setDirty';\r\n const buffer = undoBuffer.peek();\r\n // Unrender the modified music because the IDs may change and normal unrender won't work\r\n if (buffer) {\r\n const sel = buffer.selector;\r\n if (buffer.type === UndoBuffer.bufferTypes.MEASURE) { \r\n if (typeof(staffMap[sel.staff]) === 'number') {\r\n const mSelection = SmoSelection.measureSelection(this.score!, staffMap[sel.staff], sel.measure);\r\n if (mSelection !== null) {\r\n this.renderer.unrenderMeasure(mSelection.measure);\r\n }\r\n }\r\n } else if (buffer.type === UndoBuffer.bufferTypes.STAFF) {\r\n if (typeof(staffMap[sel.staff]) === 'number') {\r\n const sSelection = SmoSelection.measureSelection(this.score!, staffMap[sel.staff], 0);\r\n if (sSelection !== null) {\r\n this.renderer.unrenderStaff(sSelection.staff);\r\n }\r\n }\r\n op = 'setRefresh';\r\n } else {\r\n this.renderer.unrenderAll();\r\n op = 'setRefresh';\r\n }\r\n this._score = undoBuffer.undo(this._score!, staffMap, false);\r\n // Broken encapsulation - we need to know if we are 'undoing' an entire score\r\n // so we can change the score pointed to by the renderer.\r\n if (buffer.type === UndoBuffer.bufferTypes.SCORE) {\r\n this.renderer.score = this._score;\r\n }\r\n (this as any)[op]();\r\n }\r\n if (!this._score) {\r\n throw ('no score when undo');\r\n } \r\n return this._score;\r\n }\r\n\r\n\r\n unrenderColumn(measure: SmoMeasure) {\r\n this.score!.staves.forEach((staff) => {\r\n this.renderer.unrenderMeasure(staff.measures[measure.measureNumber.measureIndex]);\r\n });\r\n }\r\n\r\n // ### forceRender\r\n // For unit test applictions that want to render right-away\r\n forceRender() {\r\n this.setRefresh();\r\n this.render();\r\n }\r\n unrenderMeasure(measure: SmoMeasure) {\r\n this.renderer.unrenderMeasure(measure);\r\n }\r\n\r\n renderScoreModifiers() {\r\n this.renderer.renderScoreModifiers();\r\n }\r\n async render(): Promise {\r\n if (this._resetViewport) {\r\n this.setViewport();\r\n this._resetViewport = false;\r\n }\r\n try {\r\n if (SuiRenderState.passStates.replace === this.passState) {\r\n this.replaceMeasures();\r\n } else if (SuiRenderState.passStates.initial === this.passState) {\r\n if (this.renderer.backgroundRender) {\r\n return;\r\n }\r\n this.renderer.layout();\r\n this.renderer.drawPageLines();\r\n this.setPassState(SuiRenderState.passStates.clean, 'rs: complete render');\r\n }\r\n } catch (excp) {\r\n console.warn('exception in render: ' + excp);\r\n }\r\n this.dirty = false;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { VxMeasure } from '../vex/vxMeasure';\r\nimport { SuiMapper } from './mapper';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SvgHelpers, StrokeInfo } from './svgHelpers';\r\nimport { SuiPiano } from './piano';\r\nimport { SuiLayoutFormatter, RenderedPage } from './formatter';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SuiTextBlock } from './textRender';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SourceSansProFont } from '../../styles/font_metrics/ssp-sans-metrics';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SvgPageMap, SvgPage } from './svgPageMap';\r\nimport { VexFlow } from '../../common/vex';\r\nimport { Note } from '../../common/vex';\r\n\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n/**\r\n * a renderer creates the SVG render context for vexflow from the given element. Then it\r\n * renders the initial score.\r\n * @category SuiRenderParams\r\n */\r\n export interface ScoreRenderParams {\r\n elementId: any,\r\n score: SmoScore,\r\n config: SmoRenderConfiguration,\r\n undoBuffer: UndoBuffer\r\n}\r\n\r\nexport interface MapParameters {\r\n vxSystem: VxSystem, measuresToBox: SmoMeasure[], modifiersToBox: StaffModifierBase[], printing: boolean\r\n}\r\n/**\r\n * This module renders the entire score. It calculates the layout first based on the\r\n * computed dimensions.\r\n * @category SuiRender\r\n**/\r\nexport class SuiScoreRender {\r\n constructor(params: ScoreRenderParams) { \r\n this.elementId = params.elementId;\r\n this.score = params.score;\r\n this.vexContainers = new SvgPageMap(this.score.layoutManager!.globalLayout, this.elementId, this.score.layoutManager!.pageLayouts);\r\n this.setViewport();\r\n }\r\n elementId: any;\r\n startRenderTime: number = 0;\r\n formatter: SuiLayoutFormatter | null = null;\r\n vexContainers: SvgPageMap;\r\n // vexRenderer: any = null;\r\n score: SmoScore | null = null;\r\n measureMapper: SuiMapper | null = null;\r\n measuresToMap: MapParameters[] = [];\r\n viewportChanged: boolean = false;\r\n renderTime: number = 0;\r\n backgroundRender: boolean = false;\r\n renderedPages: Record = {};\r\n _autoAdjustRenderTime: boolean = true;\r\n lyricsToOffset: Map = new Map();\r\n renderingPage: number = -1; \r\n get autoAdjustRenderTime() {\r\n return this._autoAdjustRenderTime;\r\n }\r\n set autoAdjustRenderTime(value: boolean) {\r\n this._autoAdjustRenderTime = value;\r\n }\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage | null {\r\n return this.vexContainers.getRenderer(box);\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n let ix = 0;\r\n let jj = 0;\r\n if (gg.skipRender || this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n gg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n gg.elements = [];\r\n const layoutManager = this.score!.layoutManager!;\r\n const scaledScoreLayout = layoutManager.getScaledPageLayout(0);\r\n // If this text hasn't been rendered before, estimate the logical box.\r\n const dummyContainer = this.vexContainers.getRendererFromModifier(gg);\r\n if (dummyContainer && !gg.logicalBox) {\r\n const dummyBlock = SuiTextBlock.fromTextGroup(gg, dummyContainer, this.vexContainers, this.measureMapper!.scroller);\r\n gg.logicalBox = dummyBlock.getLogicalBox();\r\n }\r\n\r\n // If this is a per-page score text, get a text group copy for each page.\r\n // else the array contains the original.\r\n const groupAr = SmoTextGroup.getPagedTextGroups(gg, this.score!.layoutManager!.pageLayouts.length, scaledScoreLayout.pageHeight);\r\n groupAr.forEach((newGroup) => {\r\n let container: SvgPage = this.vexContainers.getRendererFromModifier(newGroup);\r\n // If this text is attached to the measure, base the block location on the rendered measure location.\r\n if (newGroup.attachToSelector) {\r\n // If this text is attached to a staff that is not visible, don't draw it.\r\n const mappedStaff = this.score!.staves.find((staff) => staff.getMappedStaffId() === newGroup.selector!.staff);\r\n if (!mappedStaff) {\r\n return;\r\n }\r\n // Indicate the new map;\r\n // newGroup.selector.staff = mappedStaff.staffId; \r\n const mmSel: SmoSelection | null = SmoSelection.measureSelection(this.score!, mappedStaff.staffId, newGroup.selector!.measure);\r\n if (mmSel) {\r\n const mm = mmSel.measure;\r\n if (mm.svg.logicalBox.width > 0) {\r\n const xoff = mm.svg.logicalBox.x + newGroup.musicXOffset;\r\n const yoff = mm.svg.logicalBox.y + newGroup.musicYOffset;\r\n newGroup.textBlocks[0].text.x = xoff;\r\n newGroup.textBlocks[0].text.y = yoff;\r\n }\r\n }\r\n }\r\n if (container) {\r\n const block = SuiTextBlock.fromTextGroup(newGroup, container, this.vexContainers, this.measureMapper!.scroller);\r\n block.render();\r\n if (block.currentBlock?.text.element) {\r\n gg.elements.push(block.currentBlock?.text.element);\r\n }\r\n // For the first one we render, use that as the bounding box for all the text, for\r\n // purposes of mapper/tracker\r\n if (ix === 0) {\r\n gg.logicalBox = JSON.parse(JSON.stringify(block.logicalBox));\r\n // map all the child scoreText objects, too.\r\n for (jj = 0; jj < gg.textBlocks.length; ++jj) {\r\n gg.textBlocks[jj].text.logicalBox = JSON.parse(JSON.stringify(block.inlineBlocks[jj].text.logicalBox));\r\n }\r\n }\r\n ix += 1;\r\n }\r\n });\r\n }\r\n \r\n // ### unrenderAll\r\n // ### Description:\r\n // Delete all the svg elements associated with the score.\r\n unrenderAll() {\r\n if (!this.score) {\r\n return;\r\n }\r\n this.score.staves.forEach((staff) => {\r\n this.unrenderStaff(staff);\r\n });\r\n // $(this.context.svg).find('g.lineBracket').remove();\r\n }\r\n // ### unrenderStaff\r\n // ### Description:\r\n // See unrenderMeasure. Like that, but with a staff.\r\n unrenderStaff(staff: SmoSystemStaff) {\r\n staff.measures.forEach((measure) => {\r\n this.unrenderMeasure(measure);\r\n });\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.element.remove();\r\n modifier.element = null;\r\n }\r\n });\r\n }\r\n clearRenderedPage(pg: number) {\r\n if (this.renderedPages[pg]) {\r\n this.renderedPages[pg] = null;\r\n }\r\n }\r\n // ### _setViewport\r\n // Create (or recrate) the svg viewport, considering the dimensions of the score.\r\n setViewport() {\r\n if (this.score === null) {\r\n return;\r\n }\r\n const layoutManager = this.score!.layoutManager!;\r\n // All pages have same width/height, so use that\r\n const layout = layoutManager.getGlobalLayout();\r\n this.vexContainers.updateLayout(layout, layoutManager.pageLayouts);\r\n this.renderedPages = {};\r\n this.viewportChanged = true;\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.scrollAbsolute(0, 0);\r\n }\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.updateViewport();\r\n }\r\n // this.context.setFont(this.font.typeface, this.font.pointSize, \"\").setBackgroundFillStyle(this.font.fillStyle);\r\n console.log('layout setViewport: pstate initial');\r\n }\r\n\r\n renderScoreModifiers() {\r\n // remove existing modifiers, and also remove parent group for 'extra'\r\n // groups associated with pagination (once per page etc)\r\n this.score!.textGroups.forEach((tg) => {\r\n tg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n tg.elements = [];\r\n });\r\n // group.classList.add('all-score-text');\r\n this.score!.textGroups.forEach((tg) => {\r\n this.renderTextGroup(tg);\r\n });\r\n }\r\n\r\n /**\r\n * for music we've just rendered, get the bounding boxes. We defer this step so we don't force\r\n * a reflow, which can slow rendering.\r\n * @param vxSystem \r\n * @param measures \r\n * @param modifiers \r\n * @param printing \r\n */\r\n measureRenderedElements(vxSystem: VxSystem, measures: SmoMeasure[], modifiers: StaffModifierBase[], printing: boolean) {\r\n const pageContext = vxSystem.context;\r\n measures.forEach((smoMeasure) => {\r\n const element = smoMeasure.svg.element;\r\n if (element) { \r\n smoMeasure.setBox(pageContext.offsetBbox(element), 'vxMeasure bounding box');\r\n }\r\n const vxMeasure = vxSystem.getVxMeasure(smoMeasure);\r\n if (vxMeasure) {\r\n vxMeasure.modifiersToBox.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n // unit test codes don't have tracker.\r\n if (this.measureMapper) {\r\n const tmpStaff: SmoSystemStaff | undefined = this.score!.staves.find((ss) => ss.staffId === smoMeasure.measureNumber.staffId);\r\n if (tmpStaff) {\r\n this.measureMapper.mapMeasure(tmpStaff, smoMeasure, printing);\r\n }\r\n } \r\n });\r\n modifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n _renderSystem(lineIx: number, printing: boolean) {\r\n if (this.score === null || this.formatter === null) {\r\n return;\r\n }\r\n const measuresToBox: SmoMeasure[] = [];\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const columns: Record = this.formatter.systems[lineIx].systems;\r\n\r\n // If this page hasn't changed since rendered\r\n const pageIndex = columns[0][0].svg.pageIndex;\r\n if (this.renderingPage !== pageIndex && this.renderedPages[pageIndex]) {\r\n console.log(`skipping render on page ${pageIndex}`);\r\n return;\r\n }\r\n const context = this.vexContainers.getRendererForPage(pageIndex);\r\n if (this.renderingPage !== pageIndex) {\r\n context.clearMap();\r\n this.renderingPage = pageIndex;\r\n }\r\n const vxSystem: VxSystem = new VxSystem(context, 0, lineIx, this.score);\r\n const colKeys = Object.keys(columns);\r\n colKeys.forEach((colKey) => {\r\n columns[parseInt(colKey, 10)].forEach((measure: SmoMeasure) => {\r\n if (this.measureMapper !== null) {\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n vxSystem.renderMeasure(measure, printing);\r\n const pageIndex = measure.svg.pageIndex;\r\n const renderMeasures = this.renderedPages[pageIndex];\r\n if (!renderMeasures) {\r\n this.renderedPages[pageIndex] = {\r\n startMeasure: measure.measureNumber.measureIndex,\r\n endMeasure: measure.measureNumber.measureIndex\r\n }\r\n } else {\r\n renderMeasures.endMeasure = measure.measureNumber.measureIndex;\r\n }\r\n measuresToBox.push(measure);\r\n if (!printing && !measure.format.isDefault) {\r\n const at: any[] = [];\r\n at.push({ y: measure.svg.logicalBox.y - 5 });\r\n at.push({ x: measure.svg.logicalBox.x + 25 });\r\n at.push({ 'font-family': SourceSansProFont.fontFamily });\r\n at.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, at, 'measure-format', '*');\r\n }\r\n }\r\n });\r\n });\r\n this.score.staves.forEach((stf) => {\r\n this.renderModifiers(stf, vxSystem).forEach((modifier) => {\r\n modifiersToBox.push(modifier);\r\n });\r\n });\r\n if (this.measureMapper !== null) {\r\n vxSystem.renderEndings(this.measureMapper.scroller);\r\n }\r\n this.measuresToMap.push({vxSystem, measuresToBox, modifiersToBox, printing });\r\n // this.measureRenderedElements(vxSystem, measuresToBox, modifiersToBox, printing);\r\n\r\n const timestamp = new Date().valueOf();\r\n if (!this.lyricsToOffset.has(vxSystem.lineIndex)) {\r\n this.lyricsToOffset.set(vxSystem.lineIndex, vxSystem);\r\n }\r\n // vxSystem.updateLyricOffsets();\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.POST_RENDER, new Date().valueOf() - timestamp);\r\n }\r\n _renderNextSystemPromise(systemIx: number, keys: number[], printing: boolean) {\r\n return new Promise((resolve: any) => {\r\n // const sleepDate = new Date().valueOf();\r\n this._renderSystem(keys[systemIx], printing);\r\n requestAnimationFrame(() => resolve());\r\n });\r\n }\r\n\r\n async _renderNextSystem(lineIx: number, keys: number[], printing: boolean) {\r\n createTopDomContainer('#renderProgress', 'progress');\r\n if (lineIx < keys.length) {\r\n const progress = Math.round((100 * lineIx) / keys.length);\r\n $('#renderProgress').attr('max', 100);\r\n $('#renderProgress').val(progress);\r\n await this._renderNextSystemPromise(lineIx,keys, printing);\r\n lineIx++;\r\n await this._renderNextSystem(lineIx, keys, printing);\r\n } else {\r\n this.renderScoreModifiers();\r\n this.numberMeasures();\r\n this.measuresToMap.forEach((mm) => {\r\n this.measureRenderedElements(mm.vxSystem, mm.measuresToBox, mm.modifiersToBox, mm.printing);\r\n });\r\n this.lyricsToOffset.forEach((vv) => {\r\n vv.updateLyricOffsets();\r\n });\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n // We pro-rate the background render timer on how long it takes\r\n // to actually render the score, so we are not thrashing on a large\r\n // score.\r\n if (this._autoAdjustRenderTime) {\r\n this.renderTime = new Date().valueOf() - this.startRenderTime;\r\n }\r\n $('body').removeClass('show-render-progress');\r\n // indicate the display is 'clean' and up-to-date with the score\r\n $('body').removeClass('refresh-1');\r\n if (this.measureMapper !== null) {\r\n this.measureMapper.updateMap();\r\n if (layoutDebug.mask & layoutDebug.values['artifactMap']) {\r\n this.score?.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n mm.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((note) => {\r\n if (note.logicalBox) {\r\n const page = this.vexContainers.getRendererFromPoint(note.logicalBox);\r\n if (page) {\r\n const noteBox = SvgHelpers.smoBox(note.logicalBox);\r\n noteBox.y -= page.box.y;\r\n SvgHelpers.debugBox(page.svg, noteBox, 'measure-place-dbg', 0);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n }\r\n this.backgroundRender = false;\r\n }\r\n }\r\n \r\n // ### unrenderMeasure\r\n // All SVG elements are associated with a logical SMO element. We need to erase any SVG element before we change a SMO\r\n // element in such a way that some of the logical elements go away (e.g. when deleting a measure).\r\n unrenderMeasure(measure: SmoMeasure) {\r\n if (!measure) {\r\n return;\r\n }\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (!context) {\r\n return;\r\n }\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n\r\n if (measure.svg.element) {\r\n measure.svg.element.remove();\r\n measure.svg.element = null;\r\n }\r\n const renderPage = this.renderedPages[measure.svg.pageIndex];\r\n if (renderPage) {\r\n this.renderedPages[measure.svg.pageIndex] = null;\r\n }\r\n measure.setYTop(0, 'unrender');\r\n }\r\n // ### _renderModifiers\r\n // ### Description:\r\n // Render staff modifiers (modifiers straddle more than one measure, like a slur). Handle cases where the destination\r\n // is on a different system due to wrapping.\r\n renderModifiers(staff: SmoSystemStaff, system: VxSystem): StaffModifierBase[] {\r\n let nextNote: SmoSelection | null = null;\r\n let lastNote: SmoSelection | null = null;\r\n let testNote: Note | null = null;\r\n let vxStart: Note | null = null;\r\n let vxEnd: Note | null = null;\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const removedModifiers: StaffModifierBase[] = [];\r\n if (this.score === null || this.measureMapper === null) {\r\n return [];\r\n }\r\n const renderedId: Record = {};\r\n staff.renderableModifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (!startNote || !endNote) {\r\n // If the modifier doesn't have score endpoints, delete it from the score\r\n removedModifiers.push(modifier);\r\n return;\r\n }\r\n if (startNote.note !== null) {\r\n vxStart = system.getVxNote(startNote.note);\r\n }\r\n if (endNote.note !== null) {\r\n vxEnd = system.getVxNote(endNote.note);\r\n }\r\n\r\n // If the modifier goes to the next staff, draw what part of it we can on this staff.\r\n if (vxStart && !vxEnd) {\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n if (nextNote === null) {\r\n console.warn('bad selector ' + JSON.stringify(modifier.startSelector, null, ' '));\r\n } else {\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n }\r\n while (testNote) {\r\n vxEnd = testNote;\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n nextNote.selector.staff, nextNote.selector.measure, nextNote.selector.voice, nextNote.selector.tick);\r\n if (!nextNote) {\r\n break;\r\n }\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (vxEnd && !vxStart) {\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (lastNote !== null && lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n while (testNote !== null) {\r\n vxStart = testNote;\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n lastNote.selector.staff, lastNote.selector.measure, lastNote.selector.voice, lastNote.selector.tick);\r\n if (!lastNote) {\r\n break;\r\n }\r\n if (lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (!vxStart && !vxEnd || renderedId[modifier.attrs.id]) {\r\n return;\r\n }\r\n renderedId[modifier.attrs.id] = true;\r\n system.renderModifier(this.measureMapper!.scroller, modifier, vxStart, vxEnd, startNote, endNote);\r\n modifiersToBox.push(modifier);\r\n });\r\n // Silently remove modifiers from the score if the endpoints no longer exist\r\n removedModifiers.forEach((mod) => {\r\n staff.removeStaffModifier(mod);\r\n });\r\n return modifiersToBox;\r\n }\r\n\r\n drawPageLines() {\r\n let i = 0;\r\n const printing = $('body').hasClass('print-render');\r\n const layoutMgr = this.score!.layoutManager;\r\n if (printing || !layoutMgr) {\r\n return;\r\n }\r\n for (i = 1; i < layoutMgr.pageLayouts.length; ++i) {\r\n const context = this.vexContainers.getRendererForPage(i - 1);\r\n if (context) {\r\n $(context.svg).find('.pageLine').remove();\r\n const scaledPage = layoutMgr.getScaledPageLayout(i);\r\n const y = scaledPage.pageHeight * i - context.box.y;\r\n SvgHelpers.line(context.svg, 0, y, scaledPage.pageWidth, y,\r\n { strokeName: 'line', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 }, 'pageLine');\r\n \r\n }\r\n }\r\n }\r\n replaceSelection(staffMap: Record, change: SmoSelection) {\r\n let system: VxSystem | null = null;\r\n if (this.renderedPages[change.measure.svg.pageIndex]) {\r\n this.renderedPages[change.measure.svg.pageIndex] = null;\r\n }\r\n SmoBeamer.applyBeams(change.measure);\r\n // Defer modifier update until all selected measures are drawn.\r\n if (!staffMap[change.staff.staffId]) {\r\n const context = this.vexContainers.getRenderer(change.measure.svg.logicalBox);\r\n if (context) {\r\n system = new VxSystem(context, change.measure.staffY, change.measure.svg.lineIndex, this.score!);\r\n staffMap[change.staff.staffId] = { system, staff: change.staff }; \r\n }\r\n } else {\r\n system = staffMap[change.staff.staffId].system;\r\n }\r\n const selections = SmoSelection.measuresInColumn(this.score!, change.measure.measureNumber.measureIndex);\r\n const measuresToMeasure: SmoMeasure[] = [];\r\n selections.forEach((selection) => {\r\n if (system !== null && this.measureMapper !== null) {\r\n this.unrenderMeasure(selection.measure);\r\n system.renderMeasure(selection.measure, false);\r\n measuresToMeasure.push(selection.measure);\r\n }\r\n });\r\n if (system) {\r\n this.measureRenderedElements(system, measuresToMeasure, [], false);\r\n }\r\n }\r\n\r\n async renderAllMeasures(lines: number[]) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const printing = $('body').hasClass('print-render');\r\n $('.measure-format').remove();\r\n \r\n if (!printing) {\r\n $('body').addClass('show-render-progress');\r\n const isShowing = SuiPiano.isShowing;\r\n if (this.score.preferences.showPiano && !isShowing) {\r\n SuiPiano.showPiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n } else if (isShowing && !this.score.preferences.showPiano) {\r\n SuiPiano.hidePiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n }\r\n }\r\n this.backgroundRender = true;\r\n this.startRenderTime = new Date().valueOf();\r\n this.renderingPage = -1;\r\n this.vexContainers.updateContainerOffset(this.measureMapper!.scroller.scrollState);\r\n await this._renderNextSystem(0, lines, printing);\r\n }\r\n // Number the measures at the first measure in each system.\r\n numberMeasures() {\r\n const printing: boolean = $('body').hasClass('print-render');\r\n const staff = this.score!.staves[0];\r\n const measures = staff.measures.filter((measure) => measure.measureNumber.systemIndex === 0);\r\n $('.measure-number').remove();\r\n\r\n measures.forEach((measure) => {\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (measure.measureNumber.localIndex > 0 && measure.measureNumber.systemIndex === 0 && measure.svg.logicalBox && context) {\r\n const numAr: any[] = [];\r\n const modBox = context.offsetSvgPoint(measure.svg.logicalBox);\r\n numAr.push({ y: modBox.y - 10 });\r\n numAr.push({ x: modBox.x });\r\n numAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n numAr.push({ 'font-size': '10pt' });\r\n SvgHelpers.placeSvgText(context.svg, numAr, 'measure-number', (measure.measureNumber.localIndex + 1).toString());\r\n\r\n // Show line-feed symbol\r\n if (measure.format.systemBreak && !printing) {\r\n const starAr: any[] = [];\r\n const symbol = '\\u21b0';\r\n starAr.push({ y: modBox.y - 5 });\r\n starAr.push({ x: modBox.x + 25 });\r\n starAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n starAr.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, starAr, 'measure-format', symbol);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This calculates the position of all the elements in the score, then renders the score\r\n * @returns \r\n */\r\n async layout() {\r\n if (!this.score) {\r\n return;\r\n }\r\n const score = this.score;\r\n $('head title').text(this.score.scoreInfo.name);\r\n const formatter = new SuiLayoutFormatter(score, this.vexContainers, this.renderedPages);\r\n Object.keys(this.renderedPages).forEach((key) => {\r\n this.vexContainers.clearModifiersForPage(parseInt(key));\r\n });\r\n const startPageCount = this.score.layoutManager!.pageLayouts.length;\r\n this.formatter = formatter;\r\n formatter.layout(); \r\n if (this.formatter.trimPages(startPageCount)) {\r\n this.setViewport();\r\n }\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n await this.renderAllMeasures(formatter.lines);\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoGraceNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { UndoBuffer, copyUndo } from '../../smo/xform/undo';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SuiScroller } from './scroller';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SuiTracker } from './tracker';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SuiRenderState, scoreChangeEvent } from './renderState';\r\nimport { ScoreRenderParams } from './scoreRender';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiAudioAnimationParams } from '../audio/musicCursor';\r\nimport { SmoTempoText } from '../../smo/data/measureModifiers';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Indicates a stave is/is not displayed in the score\r\n * @category SuiRender\r\n */\r\nexport interface ViewMapEntry {\r\n show: boolean;\r\n}\r\n\r\n/**\r\n * Base class for all operations on the rendered score. The base class handles the following:\r\n * 1. Undo and recording actions for the operation\r\n * 2. Maintain/change which staves in the score are displayed (staff map)\r\n * 3. Mapping between the displayed score and the data representation\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiScoreView {\r\n static Instance: SuiScoreView | null = null;\r\n score: SmoScore; // The score that is displayed\r\n storeScore: SmoScore; // the full score, including invisible staves\r\n staffMap: number[]; // mapping the 2 things above\r\n storeUndo: UndoBuffer; // undo buffer for operations to above\r\n tracker: SuiTracker; // UI selections\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n pasteBuffer: PasteBuffer;\r\n storePaste: PasteBuffer;\r\n config: SmoRenderConfiguration;\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(config: SmoRenderConfiguration, svgContainer: HTMLElement, score: SmoScore, scrollSelector: HTMLElement, undoBuffer: UndoBuffer) {\r\n this.score = score;\r\n const renderParams: ScoreRenderParams = {\r\n elementId: svgContainer,\r\n score,\r\n config,\r\n undoBuffer\r\n };\r\n this.audioAnimation = config.audioAnimation;\r\n this.renderer = new SuiRenderState(renderParams);\r\n this.config = config;\r\n const scoreJson = score.serialize();\r\n this.scroller = new SuiScroller(scrollSelector, this.renderer.renderer.vexContainers);\r\n this.pasteBuffer = new PasteBuffer();\r\n this.storePaste = new PasteBuffer();\r\n this.tracker = new SuiTracker(this.renderer, this.scroller, this.pasteBuffer);\r\n this.renderer.setMeasureMapper(this.tracker);\r\n\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(scoreJson));\r\n this.synchronizeTextGroups()\r\n this.storeUndo = new UndoBuffer();\r\n this.staffMap = this.defaultStaffMap;\r\n SuiScoreView.Instance = this; // for debugging\r\n this.setMappedStaffIds();\r\n createTopDomContainer('.saveLink'); // for file upload\r\n }\r\n synchronizeTextGroups() {\r\n // Synchronize the score text IDs so cut/paste/undo works transparently\r\n this.score.textGroups.forEach((tg, ix) => {\r\n this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;\r\n });\r\n }\r\n /**\r\n * Await on the full update of the score\r\n * @returns \r\n */\r\n renderPromise(): Promise {\r\n return this.renderer.renderPromise();\r\n }\r\n /**\r\n * Await on the partial update of the score in the view\r\n * @returns \r\n */\r\n updatePromise(): Promise {\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * await on the full update of the score, also resetting the viewport (to reflect layout changes)\r\n * @returns \r\n */\r\n refreshViewport(): Promise {\r\n this.renderer.preserveScroll();\r\n this.renderer.setViewport();\r\n this.renderer.setRefresh();\r\n return this.renderer.renderPromise();\r\n }\r\n getPartMap(): { keys: number[], partMap: Record } {\r\n let keepNext = false;\r\n let partCount = 0;\r\n let partMap: Record = {};\r\n const keys: number[] = [];\r\n this.storeScore.staves.forEach((staff) => {\r\n const partInfo = staff.partInfo;\r\n partInfo.associatedStaff = staff.staffId;\r\n if (!keepNext) {\r\n partMap[partCount] = partInfo;\r\n keys.push(partCount);\r\n partCount += 1;\r\n if (partInfo.stavesAfter > 0) {\r\n keepNext = true;\r\n }\r\n } else {\r\n keepNext = false;\r\n }\r\n });\r\n return { keys, partMap };\r\n }\r\n /**\r\n * This is used in some Smoosic demos and pens.\r\n * @param action any action, but most usefully a SuiScoreView method\r\n * @param repetition number of times to repeat, waiting on render promise between\r\n * if not specified, defaults to 1\r\n * @returns promise, resolved action has been completed and score is updated.\r\n */\r\n waitableAction(action: () => void, repetition?: number): Promise {\r\n const rep = repetition ?? 1;\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (count: number) => {\r\n if (count > 0) {\r\n action();\r\n await self.renderer.updatePromise();\r\n fc(count - 1);\r\n } else {\r\n resolve();\r\n }\r\n };\r\n fc(rep);\r\n });\r\n return promise;\r\n }\r\n\r\n /**\r\n * The plural form of _getEquivalentSelection\r\n * @param selections \r\n * @returns \r\n */\r\n _getEquivalentSelections(selections: SmoSelection[]): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n selections.forEach((selection) => {\r\n const sel = this._getEquivalentSelection(selection);\r\n if (sel !== null) {\r\n rv.push(sel);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * A staff modifier has changed, create undo operations for the measures affected\r\n * @param label \r\n * @param staffModifier \r\n * @param subtype \r\n */\r\n _undoStaffModifier(label: string, staffModifier: StaffModifierBase, subtype: number) {\r\n const copy = StaffModifierBase.deserialize(staffModifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.STAFF_MODIFIER, SmoSelector.default,\r\n copy.serialize(), subtype);\r\n }\r\n /** \r\n * Return the index of the page that is in the center of the client screen.\r\n */\r\n getFocusedPage(): number {\r\n if (this.score.layoutManager === undefined) {\r\n return 0;\r\n }\r\n const scrollAvg = this.tracker.scroller.netScroll.y + (this.tracker.scroller.viewport.height / 2);\r\n const midY = scrollAvg;\r\n const layoutManager = this.score.layoutManager.getGlobalLayout();\r\n const lh = layoutManager.pageHeight / layoutManager.svgScale;\r\n const lw = layoutManager.pageWidth / layoutManager.svgScale;\r\n const pt = this.renderer.pageMap.svgToClient(SvgHelpers.smoBox({ x: lw, y: lh }));\r\n return Math.round(midY / pt.y);\r\n }\r\n /**\r\n * Create a rectangle undo, like a multiple columns but not necessarily the whole\r\n * score.\r\n */\r\n _undoColumn(label: string, measureIndex: number) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.COLUMN, SmoSelector.default,\r\n { score: this.storeScore, measureIndex }, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Score preferences don't affect the display, but they do have an undo\r\n * @param label \r\n */\r\n _undoScorePreferences(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE_ATTRIBUTES, SmoSelector.default, this.storeScore, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n \r\n /**\r\n * Add to the undo buffer the current set of measures selected.\r\n * @param label \r\n * @returns \r\n */\r\n _undoTrackerMeasureSelections(label: string): SmoSelection[] {\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n const equiv = this._getEquivalentSelection(measureSelection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n });\r\n return measureSelections;\r\n }\r\n /**\r\n * operation that only affects the first selection. Setup undo for the measure\r\n */\r\n _undoFirstMeasureSelection(label: string): SmoSelection {\r\n const sel = this.tracker.selections[0];\r\n const equiv = this._getEquivalentSelection(sel);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n return sel;\r\n }\r\n /**\r\n * Add the selection to the undo buffer\r\n * @param label \r\n * @param selection \r\n */\r\n _undoSelection(label: string, selection: SmoSelection) {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label,\r\n UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n }\r\n /**\r\n * Add multiple selections to the undo buffer as a group\r\n * @param label \r\n * @param selections \r\n */\r\n _undoSelections(label: string, selections: SmoSelection[]) {\r\n this.storeUndo.grouping = true;\r\n selections.forEach((selection) => {\r\n this._undoSelection(label, selection);\r\n });\r\n this.storeUndo.grouping = false;\r\n }\r\n\r\n /** \r\n * Update renderer for measures that have changed\r\n */\r\n _renderChangedMeasures(measureSelections: SmoSelection[]) {\r\n if (!Array.isArray(measureSelections)) {\r\n measureSelections = [measureSelections];\r\n }\r\n measureSelections.forEach((measureSelection) => {\r\n this.renderer.addToReplaceQueue(measureSelection);\r\n });\r\n }\r\n /**\r\n * Update renderer for some columns\r\n * @param fromSelector \r\n * @param toSelector \r\n */\r\n _renderRectangle(fromSelector: SmoSelector, toSelector: SmoSelector) {\r\n this._getRectangleSelections(fromSelector, toSelector).forEach((s) => {\r\n this.renderer.addToReplaceQueue(s);\r\n });\r\n }\r\n\r\n /**\r\n * Setup undo for operation that affects the whole score\r\n * @param label \r\n */\r\n _undoScore(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE, SmoSelector.default, this.storeScore,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Get the selector from this.storeScore that maps to the displayed selector from this.score\r\n * @param selector \r\n * @returns \r\n */\r\n _getEquivalentSelector(selector: SmoSelector) {\r\n const rv = JSON.parse(JSON.stringify(selector));\r\n rv.staff = this.staffMap[selector.staff];\r\n return rv;\r\n }\r\n /**\r\n * Get the equivalent staff id from this.storeScore that maps to the displayed selector from this.score\r\n * @param staffId \r\n * @returns \r\n */\r\n _getEquivalentStaff(staffId: number) {\r\n return this.staffMap[staffId];\r\n }\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentSelection(selection: SmoSelection): SmoSelection | null {\r\n try {\r\n if (typeof (selection.selector.tick) === 'undefined') {\r\n return SmoSelection.measureSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure);\r\n }\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n return SmoSelection.noteSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick);\r\n }\r\n return SmoSelection.pitchSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick, selection.selector.pitches);\r\n } catch (ex) {\r\n console.warn(ex);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentGraceNote(selection: SmoSelection, gn: SmoGraceNote): SmoGraceNote {\r\n if (selection.note !== null) {\r\n const rv = selection.note.getGraceNotes().find((gg) => gg.attrs.id === gn.attrs.id);\r\n if (rv) {\r\n return rv;\r\n }\r\n }\r\n return gn;\r\n }\r\n /**\r\n * Get the rectangle of selections indicated by the parameters from the score\r\n * @param startSelector \r\n * @param endSelector \r\n * @param score \r\n * @returns \r\n */\r\n _getRectangleSelections(startSelector: SmoSelector, endSelector: SmoSelector): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n let i = 0;\r\n let j = 0;\r\n for (i = startSelector.staff; i <= endSelector.staff; i++) {\r\n for (j = startSelector.measure; j <= endSelector.measure; j++) {\r\n const target = SmoSelection.measureSelection(this.score, i, j);\r\n if (target !== null) {\r\n rv.push(target);\r\n }\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * set the grouping flag for undo operations\r\n * @param val \r\n */\r\n groupUndo(val: boolean) {\r\n this.storeUndo.grouping = val;\r\n }\r\n\r\n /**\r\n * Show all staves, 1:1 mapping of view score staff to stored score staff\r\n */\r\n get defaultStaffMap(): number[] {\r\n let i = 0;\r\n const rv: number[] = [];\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n rv.push(i);\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Bootstrapping function, creates the renderer and associated timers\r\n */\r\n startRenderingEngine() {\r\n if (!this.renderer.score) {\r\n // If there is only one part, display the part.\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n // If the score is transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.renderer.score = this.score;\r\n this.renderer.setViewport();\r\n }\r\n this.renderer.startDemon();\r\n }\r\n /**\r\n * Gets the current mapping of displayed staves to score staves (this.storeScore)\r\n * @returns \r\n */\r\n getView(): ViewMapEntry[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const show = this.staffMap.indexOf(i) >= 0;\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Update the staff ID when the view changes\r\n */\r\n setMappedStaffIds() {\r\n this.score.staves.forEach((staff) => {\r\n if (!this.isPartExposed()) {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n } else {\r\n staff.partInfo.displayCues = false;\r\n }\r\n staff.setMappedStaffId(this.staffMap[staff.staffId]);\r\n });\r\n }\r\n /**\r\n * Exposes a part: hides non-part staves, shows part staves.\r\n * Note this will reset the view. After this operation, staff 0 will\r\n * be the selected part.\r\n * @param staff \r\n */\r\n exposePart(staff: SmoSystemStaff) {\r\n let i = 0;\r\n const exposeMap: ViewMapEntry[] = [];\r\n let pushNext = false;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const tS = this.storeScore.staves[i];\r\n const show = tS.staffId === staff.staffId;\r\n if (pushNext) {\r\n exposeMap.push({ show: true });\r\n pushNext = false;\r\n } else {\r\n exposeMap.push({ show });\r\n if (tS.partInfo.stavesAfter > 0 && show) {\r\n pushNext = true;\r\n }\r\n }\r\n }\r\n this.setView(exposeMap);\r\n }\r\n /**\r\n * Indicates if the score is displaying in part-mode vs. score mode.\r\n * @returns \r\n */\r\n isPartExposed(): boolean {\r\n return this.score.isPartExposed();\r\n }\r\n /**\r\n * Parts have different formatting options from the parent score, indluding layout. Reset\r\n * them when exposing a part.\r\n */\r\n _mapPartFormatting() {\r\n this.score.layoutManager = this.score.staves[0].partInfo.layoutManager;\r\n let replacedText = false;\r\n this.score.staves.forEach((staff) => {\r\n staff.updateMeasureFormatsForPart();\r\n if (staff.partInfo.preserveTextGroups && !replacedText) {\r\n const tga: SmoTextGroup[] = [];\r\n replacedText = true;\r\n staff.partInfo.textGroups.forEach((tg) => {\r\n tga.push(tg)\r\n });\r\n this.score.textGroups = tga;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the list of staves in the score that are displayed.\r\n */\r\n setView(rows: ViewMapEntry[]) {\r\n let i = 0;\r\n const any = rows.find((row) => row.show === true);\r\n if (!any) {\r\n return;\r\n }\r\n const nscore = SmoScore.deserialize(JSON.stringify(this.storeScore.serialize(true)));\r\n const staffMap = [];\r\n for (i = 0; i < rows.length; ++i) {\r\n const row = rows[i];\r\n if (row.show) {\r\n const srcStave = this.storeScore.staves[i];\r\n const jsonObj = srcStave.serialize();\r\n jsonObj.staffId = staffMap.length;\r\n const nStave = SmoSystemStaff.deserialize(jsonObj);\r\n nStave.mapStaffFromTo(i, nscore.staves.length);\r\n nscore.staves.push(nStave);\r\n if (srcStave.keySignatureMap) {\r\n nStave.keySignatureMap = JSON.parse(JSON.stringify(srcStave.keySignatureMap));\r\n }\r\n nStave.measures.forEach((measure: SmoMeasure, ix) => {\r\n const srcMeasure = srcStave.measures[ix];\r\n measure.tempo = new SmoTempoText(srcMeasure.tempo.serialize());\r\n measure.timeSignature = new TimeSignature(srcMeasure.timeSignature);\r\n measure.keySignature = srcMeasure.keySignature;\r\n });\r\n staffMap.push(i);\r\n }\r\n }\r\n nscore.numberStaves();\r\n this.staffMap = staffMap;\r\n this.score = nscore;\r\n // Indicate which score staff view staves are mapped to, to decide to display\r\n // modifiers.\r\n this.setMappedStaffIds();\r\n // TODO: add part-specific measure formatting, etc.\r\n this._setTransposing();\r\n this.renderer.score = nscore;\r\n // If this current view is a part, show the part layout\r\n if (this.isPartExposed()) {\r\n this._mapPartFormatting(); \r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = false;\r\n });\r\n SmoOperation.computeMultipartRest(nscore);\r\n } else {\r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n });\r\n }\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * view all the staffs in score mode.\r\n */\r\n viewAll() {\r\n this.score = SmoScore.deserialize(JSON.stringify(this.storeScore.serialize()));\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this._setTransposing();\r\n this.synchronizeTextGroups();\r\n this.renderer.score = this.score;\r\n this.pasteBuffer.setScore(this.score);\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * Update score based on transposing flag.\r\n */\r\n _setTransposing() {\r\n if (!this.isPartExposed()) {\r\n const xpose = this.score.preferences?.transposingScore;\r\n if (xpose) {\r\n this.score.setTransposing();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update the view after loading or restoring a completely new score\r\n * @param score \r\n * @returns \r\n */\r\n changeScore(score: SmoScore) {\r\n this.storeUndo.reset();\r\n SuiAudioPlayer.stopPlayer();\r\n this.renderer.score = score;\r\n this.renderer.setViewport();\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(score.serialize()));\r\n this.score = score;\r\n // If the score is non-transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this.synchronizeTextGroups();\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n const rv = this.renderPromise();\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n return rv;\r\n }\r\n\r\n /**\r\n * for the view score, the renderer decides what to render\r\n * depending on what is undone.\r\n * @returns \r\n */\r\n undo() {\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n \r\n // A score-level undo might have changed the score.\r\n if (this.storeUndo.buffer.length < 1) {\r\n return;\r\n }\r\n const staffMap: Record = {};\r\n const identityMap: Record = {};\r\n this.defaultStaffMap.forEach((nn) => identityMap[nn] = nn);\r\n this.staffMap.forEach((mm, ix) => staffMap[mm] = ix);\r\n this.score = this.renderer.undo(this.storeUndo, staffMap);\r\n this.storeScore = this.storeUndo.undo(this.storeScore, identityMap, true);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreView } from './scoreView';\r\nimport { SmoScore, engravingFontType } from '../../smo/data/score';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { KeyEvent, SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SmoSystemGroup, SmoPageLayout, SmoGlobalLayout, SmoLayoutManager, SmoAudioPlayerSettings,\r\n SmoScorePreferences, SmoScoreInfo } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoDynamicText, SmoNoteModifierBase, SmoGraceNote, SmoArticulation, \r\n SmoOrnament, SmoLyric, SmoMicrotone, SmoArpeggio, SmoArpeggioType } from '../../smo/data/noteModifiers';\r\nimport { SmoTempoText, SmoVolta, SmoBarline, SmoRepeatSymbol, SmoRehearsalMark, SmoMeasureFormat, TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { UndoBuffer, SmoUndoable } from '../../smo/xform/undo';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { BatchSelectionOperation } from '../../smo/xform/operations';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiXhrLoader } from '../../ui/fileio/xhrLoader';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { StaffModifierBase, SmoSlur,\r\n SmoInstrument, SmoInstrumentParams, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { SuiPiano } from './piano';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\ndeclare var SmoConfig: SmoRenderConfiguration;\r\n\r\n/**\r\n * MVVM-like operations on the displayed score.\r\n * \r\n * All operations that can be performed on a 'live' score go through this\r\n * module. It maps the score view to the actual score and makes sure the\r\n * model and view stay in sync. \r\n * \r\n * Because this object operates on the current selections, \r\n * all operations return promise so applications can wait for the \r\n * operation to complete and update the selection list.\r\n * @category SuiRender\r\n */\r\nexport class SuiScoreViewOperations extends SuiScoreView {\r\n /**\r\n * Add a new text group to the score \r\n * @param textGroup a new text group\r\n * @returns \r\n */\r\n addTextGroup(textGroup: SmoTextGroup): Promise {\r\n const altNew = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew,\r\n UndoBuffer.bufferSubtypes.ADD);\r\n if (this.isPartExposed()) {\r\n this.score.updateTextGroup(textGroup, true);\r\n const partInfo = this.storeScore.staves[this._getEquivalentStaff(0)].partInfo;\r\n partInfo.updateTextGroup(altNew, true);\r\n } else {\r\n this.score.addTextGroup(textGroup);\r\n this.storeScore.addTextGroup(altNew);\r\n }\r\n this.renderer.renderScoreModifiers();\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * Remove the text group from the score\r\n * @param textGroup \r\n * @returns \r\n */\r\n removeTextGroup(textGroup: SmoTextGroup): Promise {\r\n this.score.updateTextGroup(textGroup, false);\r\n const altGroup = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n textGroup.elements.forEach((el) => el.remove());\r\n textGroup.elements = [];\r\n const isPartExposed = this.isPartExposed();\r\n if (!isPartExposed) {\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this.storeScore.updateTextGroup(altGroup, false);\r\n } else {\r\n const stave = this.storeScore.staves[this._getEquivalentStaff(0)];\r\n stave.partInfo.updateTextGroup(altGroup, false);\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n \r\n }\r\n this.renderer.renderScoreModifiers();\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * UPdate an existing text group. The original is passed in, because since TG not tied to a musical\r\n * element, we need to find the one we're updating.\r\n * @param oldVersion \r\n * @param newVersion \r\n * @returns \r\n */\r\n updateTextGroup(newVersion: SmoTextGroup): void {\r\n const isPartExposed = this.isPartExposed();\r\n const altNew = SmoTextGroup.deserializePreserveId(newVersion.serialize());\r\n this.score.updateTextGroup(newVersion, true);\r\n // If this is part text, don't store it in the score text, except for the displayed score\r\n if (!isPartExposed) {\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew, UndoBuffer.bufferSubtypes.UPDATE);\r\n this.storeScore.updateTextGroup(altNew, true);\r\n } else {\r\n this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altNew, true);\r\n }\r\n // TODO: only render the one TG.\r\n this.renderer.renderScoreModifiers();\r\n // return this.renderer.updatePromise();\r\n }\r\n /**\r\n * load an mxml score remotely, return a promise that \r\n * completes when the file is loaded\r\n * @param url where to find the xml file\r\n * @returns \r\n */\r\n async loadRemoteXml(url: string): Promise {\r\n const req = new SuiXhrLoader(url);\r\n const self = this;\r\n // Shouldn't we return promise of actually displaying the score?\r\n await req.loadAsync();\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(req.value, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n self.changeScore(score);\r\n }\r\n /**\r\n * load a remote score in SMO format\r\n * @param url url to find the score\r\n * @returns \r\n */\r\n async loadRemoteJson(url: string) : Promise {\r\n const req = new SuiXhrLoader(url);\r\n await req.loadAsync();\r\n const score = SmoScore.deserialize(req.value);\r\n await this.changeScore(score);\r\n }\r\n /**\r\n * Load a remote score, return promise when it's been loaded\r\n * from afar.\r\n * @param pref \r\n * @returns \r\n */\r\n async loadRemoteScore(url: string): Promise {\r\n if (url.endsWith('xml') || url.endsWith('mxl')) {\r\n return this.loadRemoteXml(url);\r\n } else {\r\n return this.loadRemoteJson(url);\r\n }\r\n }\r\n updateAudioSettings(pref: SmoAudioPlayerSettings) {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.audioSettings = pref;\r\n this.storeScore.audioSettings = new SmoAudioPlayerSettings(pref);\r\n // No rendering to be done\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Global settings that control how the score editor behaves\r\n * @param pref \r\n * @returns \r\n */\r\n updateScorePreferences(pref: SmoScorePreferences): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n const oldXpose = this.score.preferences.transposingScore;\r\n const curXpose = pref.transposingScore;\r\n this.score.updateScorePreferences(new SmoScorePreferences(pref));\r\n this.storeScore.updateScorePreferences(new SmoScorePreferences(pref));\r\n if (curXpose === false && oldXpose === true) {\r\n this.score.setNonTransposing();\r\n } else if (curXpose === true && oldXpose === false) {\r\n this.score.setTransposing();\r\n }\r\n this.renderer.setDirty();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update information about the score, composer etc.\r\n * @param scoreInfo \r\n * @returns \r\n */\r\n updateScoreInfo(scoreInfo: SmoScoreInfo): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.scoreInfo = scoreInfo;\r\n this.storeScore.scoreInfo = JSON.parse(JSON.stringify(scoreInfo));\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * Add a specific microtone modifier to the selected notes\r\n * @param tone \r\n * @returns \r\n */\r\n addRemoveMicrotone(tone: SmoMicrotone): Promise {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove microtone');\r\n\r\n SmoOperation.addRemoveMicrotone(null, selections, tone);\r\n SmoOperation.addRemoveMicrotone(null, altSelections, tone);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n addRemoveArpeggio(code: SmoArpeggioType) {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove microtone');\r\n [selections, altSelections].forEach((selType) => {\r\n selType.forEach((sel) => {\r\n if (sel.note) {\r\n if (code === 'none') {\r\n sel.note.arpeggio = undefined;\r\n } else {\r\n sel.note.arpeggio = new SmoArpeggio({ type: code });\r\n }\r\n }\r\n });\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * Modify the dynamics assoicated with the specific selection\r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n addDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n this._undoFirstMeasureSelection('add dynamic');\r\n this._removeDynamic(selection, dynamic);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.addDynamic(selection, dynamic);\r\n SmoOperation.addDynamic(equiv!, SmoNoteModifierBase.deserialize(dynamic.serialize() as any));\r\n this.renderer.addToReplaceQueue(selection);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * Remove dynamics from the selection \r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n _removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null && equiv.note !== null) {\r\n const altModifiers = equiv.note.getModifiers('SmoDynamicText');\r\n SmoOperation.removeDynamic(selection, dynamic);\r\n if (altModifiers.length) {\r\n SmoOperation.removeDynamic(equiv, altModifiers[0] as SmoDynamicText);\r\n }\r\n }\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * Remove dynamics from the current selection\r\n * @param dynamic\r\n * @returns \r\n */\r\n removeDynamic(dynamic: SmoDynamicText): Promise {\r\n const sel = this.tracker.modifierSelections[0];\r\n if (!sel.selection) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this.tracker.selections = [sel.selection];\r\n this._undoFirstMeasureSelection('remove dynamic');\r\n this._removeDynamic(sel.selection, dynamic);\r\n this.renderer.addToReplaceQueue(sel.selection);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * we never really delete a note, but we will convert it into a rest and if it's\r\n * already a rest we will try to hide it.\r\n * Operates on current selections\r\n * */\r\n deleteNote(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('delete note');\r\n this.tracker.selections.forEach((sel) => {\r\n if (sel.note) {\r\n\r\n const altSel = this._getEquivalentSelection(sel);\r\n\r\n // set the pitch to be a good position for the rest\r\n const pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[sel.measure.clef]));\r\n const altPitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[altSel!.measure.clef]));\r\n sel.note.pitches = [pitch];\r\n altSel!.note!.pitches = [altPitch];\r\n\r\n // If the note is a note, make it into a rest. If the note is a rest already,\r\n // make it invisible. If it is invisible already, make it back into a rest.\r\n if (sel.note.isRest() && !sel.note.isHidden()) {\r\n sel.note.makeHidden(true);\r\n altSel!.note!.makeHidden(true);\r\n } else {\r\n sel.note.makeRest();\r\n altSel!.note!.makeRest();\r\n sel.note.makeHidden(false);\r\n altSel!.note!.makeHidden(false);\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n /**\r\n * The lyric editor moves around, so we can't depend on the tracker for the\r\n * correct selection. We get it directly from the editor.\r\n * \r\n * @param selector - the selector of the note with the lyric to remove\r\n * @param lyric - a copy of the lyric to remove. We use the verse, parser to identify it\r\n * @returns render promise\r\n */\r\n removeLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this._undoSelection('remove lyric', selection);\r\n selection.note!.removeLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const storeLyric = equiv!.note!.getLyricForVerse(lyric.verse, lyric.parser);\r\n if (typeof (storeLyric) !== 'undefined') {\r\n equiv!.note!.removeLyric(lyric);\r\n }\r\n this.renderer.addToReplaceQueue(selection);\r\n lyric.deleted = true;\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * @param selector where to add or update the lyric\r\n * @param lyric a copy of the lyric to remove\r\n * @returns \r\n */\r\n addOrUpdateLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this._undoSelection('update lyric', selection);\r\n selection.note!.addLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const altLyric = SmoNoteModifierBase.deserialize(lyric.serialize() as any) as SmoLyric;\r\n equiv!.note!.addLyric(altLyric);\r\n this.renderer.addToReplaceQueue(selection);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Delete all the notes for the currently selected voice\r\n * @returns \r\n */\r\n depopulateVoice(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('depopulate voice');\r\n measureSelections.forEach((selection) => {\r\n const ix = selection.measure.getActiveVoice();\r\n if (ix !== 0) {\r\n SmoOperation.depopulateVoice(selection, ix);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.depopulateVoice(equiv!, ix);\r\n }\r\n });\r\n SmoOperation.setActiveVoice(this.score, 0);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change the active voice in a multi-voice measure.\r\n * @param index \r\n * @returns \r\n */\r\n _changeActiveVoice(index: number): SmoSelection[] {\r\n const measuresToAdd: SmoSelection[] = [];\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n if (index === measureSelection.measure.voices.length) {\r\n measuresToAdd.push(measureSelection);\r\n }\r\n });\r\n return measuresToAdd;\r\n }\r\n /**\r\n * Populate a new voice with default notes\r\n * @param index the voice to populate\r\n * @returns \r\n */\r\n populateVoice(index: number): Promise {\r\n const measuresToAdd = this._changeActiveVoice(index);\r\n if (measuresToAdd.length === 0) {\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this.tracker.selectActiveVoice();\r\n return this.renderer.updatePromise();\r\n }\r\n measuresToAdd.forEach((selection) => {\r\n this._undoSelection('popualteVoice', selection);\r\n SmoOperation.populateVoice(selection, index);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.populateVoice(equiv!, index);\r\n });\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this._renderChangedMeasures(measuresToAdd);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Assign an instrument to a set of measures\r\n * @param instrument the instrument to assign to the selections\r\n * @param selections \r\n * @returns \r\n */\r\n changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]): Promise {\r\n if (typeof (selections) === 'undefined') {\r\n selections = this.tracker.selections;\r\n }\r\n this._undoSelections('change instrument', selections);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.changeInstrument(instrument, selections);\r\n SmoOperation.changeInstrument(instrument, altSelections);\r\n this._renderChangedMeasures(selections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the time signature for a selection\r\n * @param timeSignature actual time signature\r\n */\r\n setTimeSignature(timeSignature: TimeSignature): Promise {\r\n this._undoScore('Set time signature');\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.setTimeSignature(this.score, selections, timeSignature);\r\n SmoOperation.setTimeSignature(this.storeScore, altSelections, timeSignature);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move selected staff up or down in the score.\r\n * @param index direction to move\r\n * @returns \r\n */\r\n moveStaffUpDown(index: number): Promise {\r\n this._undoScore('re-order staves');\r\n // Get staff to move\r\n const selection = this._getEquivalentSelection(this.tracker.selections[0]);\r\n // Make the move in the model, and reset the view so we can see the new\r\n // arrangement\r\n SmoOperation.moveStaffUpDown(this.storeScore, selection!, index);\r\n this.viewAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the staff group for a score, which determines how the staves\r\n * are justified and bracketed\r\n * @param staffGroup \r\n */\r\n addOrUpdateStaffGroup(staffGroup: SmoSystemGroup): Promise {\r\n this._undoScore('group staves');\r\n // Assume that the view is now set to full score\r\n this.score.addOrReplaceSystemGroup(staffGroup);\r\n this.storeScore.addOrReplaceSystemGroup(staffGroup);\r\n this.renderer.setDirty();\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * UPdate tempo for all or part of the score\r\n * @param measure the measure with the tempo. Tempo is measure-wide parameter\r\n * @param scoreMode if true, update whole score. Else selections\r\n * @returns \r\n */\r\n updateTempoScore(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n let measureIndex = 0; \r\n const originalTempo = new SmoTempoText(measure.tempo);\r\n this._undoColumn('update tempo', measure.measureNumber.measureIndex);\r\n let startMeasure = measure.measureNumber.measureIndex;\r\n let endMeasure = this.score.staves[0].measures.length;\r\n let displayed = false;\r\n if (selectionMode) {\r\n const endSel = this.tracker.getExtremeSelection(1);\r\n if (endSel.selector.measure > startMeasure) {\r\n endMeasure = endSel.selector.measure;\r\n }\r\n }\r\n // If we are only changing the position of the text, it only affects the tempo measure.\r\n if (SmoTempoText.eq(originalTempo, tempo) && tempo.yOffset !== originalTempo.yOffset && endMeasure > startMeasure) {\r\n endMeasure = startMeasure + 1; \r\n }\r\n for (measureIndex = startMeasure; measureIndex < endMeasure; ++measureIndex) {\r\n if (!scoreMode && !selectionMode) {\r\n // If not whole score or selections, change until the tempo doesn't match previous measure's tempo (next tempo change)\r\n const compMeasure = this.score.staves[0].measures[measureIndex];\r\n if (SmoTempoText.eq(originalTempo, compMeasure.tempo) || displayed === false) {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel && sel.measure.tempo.display && !displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n } else {\r\n break;\r\n }\r\n } else {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n if (!displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n }\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * 'remove' tempo, which means either setting the bars to the \r\n * default tempo, or the previously-set tempo.\r\n * @param scoreMode whether to reset entire score\r\n */\r\n removeTempo(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n const startSelection = this.tracker.selections[0];\r\n if (startSelection.selector.measure > 0) {\r\n const measureIx = startSelection.selector.measure - 1;\r\n const target = startSelection.staff.measures[measureIx];\r\n const tempo = target.getTempo();\r\n const newTempo = new SmoTempoText(tempo);\r\n newTempo.display = false;\r\n this.updateTempoScore(measure, newTempo, scoreMode, selectionMode);\r\n } else {\r\n this.updateTempoScore(measure, new SmoTempoText(SmoTempoText.defaults), scoreMode, selectionMode);\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add a grace note to the selected real notes.\r\n */\r\n addGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('add grace note');\r\n selections.forEach((selection) => {\r\n const index = selection.note!.getGraceNotes().length;\r\n const pitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const grace = new SmoGraceNote({\r\n pitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n SmoOperation.addGraceNote(selection, grace, index);\r\n\r\n const altPitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const altGrace = new SmoGraceNote({\r\n pitches: altPitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n altGrace.attrs.id = grace.attrs.id;\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.addGraceNote(altSelection!, altGrace, index);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * remove selected grace note\r\n * @returns\r\n */\r\n removeGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('remove grace note');\r\n selections.forEach((selection) => {\r\n // TODO: get the correct offset\r\n SmoOperation.removeGraceNote(selection, 0);\r\n const altSel = (this._getEquivalentSelection(selection));\r\n SmoOperation.removeGraceNote(altSel!, 0);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle slash in stem of grace note\r\n */\r\n slashGraceNotes(): Promise {\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const measureSelections = this._undoTrackerMeasureSelections('slash grace note toggle');\r\n grace.forEach((gn) => {\r\n SmoOperation.slashGraceNotes(gn);\r\n if (gn.selection !== null) {\r\n const altSelection = this._getEquivalentSelection(gn.selection);\r\n const altGn = this._getEquivalentGraceNote(altSelection!, gn.modifier as SmoGraceNote);\r\n SmoOperation.slashGraceNotes({\r\n selection: altSelection, modifier: altGn as any,\r\n box: SvgBox.default, index: 0\r\n });\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n transposeScore(offset: number): Promise {\r\n this._undoScore('transpose score');\r\n SmoOperation.transposeScore(this.score, offset);\r\n SmoOperation.transposeScore(this.storeScore, offset);\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * transpose selected notes\r\n * @param offset 1/2 steps\r\n * @returns \r\n */\r\n transposeSelections(offset: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('transpose');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n if (artifact.selection !== null && artifact.selection.note !== null) {\r\n const gn1 = artifact.modifier as SmoGraceNote;\r\n const index = artifact.selection.note.graceNotes.findIndex((x) => x.attrs.id === gn1.attrs.id);\r\n const altSelection = this._getEquivalentSelection(artifact.selection);\r\n if (altSelection && altSelection.note !== null) {\r\n const gn2 = altSelection.note.graceNotes[index];\r\n SmoOperation.transposeGraceNotes(altSelection!, [gn2], offset);\r\n }\r\n SmoOperation.transposeGraceNotes(artifact.selection, [gn1], offset);\r\n }\r\n });\r\n\r\n } else {\r\n selections.forEach((selected) => {\r\n SmoOperation.transpose(selected, offset);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.transpose(altSel!, offset);\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the accidental spelling of the selected notes\r\n * @returns\r\n */\r\n toggleEnharmonic(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle enharmonic');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n SmoOperation.toggleGraceNoteEnharmonic(artifact.selection!, [artifact.modifier as SmoGraceNote]);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const altGr = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n SmoOperation.toggleGraceNoteEnharmonic(altSelection!,\r\n [altGr]);\r\n });\r\n } else {\r\n selections.forEach((selected) => {\r\n if (typeof (selected.selector.pitches) === 'undefined') {\r\n selected.selector.pitches = [];\r\n }\r\n SmoOperation.toggleEnharmonic(selected);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.toggleEnharmonic(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Toggle cautionary/courtesy accidentals\r\n */\r\n toggleCourtesyAccidentals(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle courtesy accidental');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n const gn1 = [artifact.modifier] as SmoGraceNote[];\r\n SmoOperation.toggleGraceNoteCourtesy(artifact.selection, gn1);\r\n const altSel = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSel!, gn1[0]);\r\n SmoOperation.toggleGraceNoteCourtesy(altSel!, [gn2]);\r\n });\r\n } else {\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleCourtesyAccidental(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleCourtesyAccidental(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the duration of notes for selected, creating more \r\n * or fewer notes. \r\n * After the change, reset the selection so it's as close as possible \r\n * to the original length\r\n * @param operation \r\n * @returns \r\n */\r\n batchDurationOperation(operation: BatchSelectionOperation): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('change duration');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const graceMap: Record = {\r\n doubleDuration: 'doubleGraceNoteDuration',\r\n halveDuration: 'halveGraceNoteDuration'\r\n };\r\n if (grace.length && typeof (graceMap[operation]) !== 'undefined') {\r\n operation = graceMap[operation];\r\n grace.forEach((artifact) => {\r\n (SmoOperation as any)[operation](artifact.selection, artifact.modifier);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n (SmoOperation as any)[operation](altSelection!, gn2);\r\n });\r\n } else {\r\n const altAr = this._getEquivalentSelections(selections);\r\n SmoOperation.batchSelectionOperation(this.score, selections, operation);\r\n SmoOperation.batchSelectionOperation(this.storeScore, altAr, operation);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle selected modifier on selected notes\r\n * @param modifier \r\n * @param ctor parent class constructor (e.g. SmoOrnament)\r\n * @returns \r\n */\r\n toggleArticulation(modifier: string, ctor: string): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle articulation');\r\n this.tracker.selections.forEach((sel) => {\r\n if (ctor === 'SmoArticulation') {\r\n const aa = new SmoArticulation({ articulation: modifier });\r\n const altAa = new SmoArticulation({ articulation: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n SmoOperation.toggleArticulation(sel, aa);\r\n const altSelection = this._getEquivalentSelection(sel);\r\n SmoOperation.toggleArticulation(altSelection!, altAa);\r\n } else {\r\n const aa = new SmoOrnament({ ornament: modifier });\r\n const altAa = new SmoOrnament({ ornament: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n const altSelection = this._getEquivalentSelection(sel!);\r\n SmoOperation.toggleOrnament(sel, aa);\r\n SmoOperation.toggleOrnament(altSelection!, altAa);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * convert non-tuplet not to a tuplet\r\n * @param numNotes 3 means triplet, etc.\r\n */\r\n makeTuplet(numNotes: number): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this._undoTrackerMeasureSelections('make tuplet');\r\n SmoOperation.makeTuplet(selection, numNotes);\r\n const altSelection = this._getEquivalentSelection(selection!);\r\n SmoOperation.makeTuplet(altSelection!, numNotes);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Convert selected tuplet to a single (if possible) non-tuplet\r\n */\r\n unmakeTuplet(): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this._undoTrackerMeasureSelections('unmake tuplet');\r\n SmoOperation.unmakeTuplet(selection);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.unmakeTuplet(altSelection!);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Create a chord by adding an interval to selected note\r\n * @param interval 1/2 steps\r\n * @returns \r\n */\r\n setInterval(interval: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set interval');\r\n selections.forEach((selected) => {\r\n SmoOperation.interval(selected, interval);\r\n const altSelection = this._getEquivalentSelection(selected);\r\n SmoOperation.interval(altSelection!, interval);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the selected chord into a single note\r\n * @returns\r\n */\r\n collapseChord(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('collapse chord');\r\n selections.forEach((selected) => {\r\n const note: SmoNote | null = selected.note;\r\n if (note) {\r\n const pp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n const altpp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n // No operation for this?\r\n note.pitches = [pp];\r\n const altSelection = this._getEquivalentSelection(selected);\r\n altSelection!.note!.pitches = [altpp];\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle chicken-scratches, for jazz improv, comping etc.\r\n */\r\n toggleSlash(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('make slash');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleSlash(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleSlash(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * make selected notes into a rest, or visa-versa\r\n * @returns\r\n */\r\n makeRest(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('make rest');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleRest(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleRest(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the 'end beam' flag for selected notes\r\n * @returns \r\n */\r\n toggleBeamGroup(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle beam group');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleBeamGroup(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleBeamGroup(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n async toggleCue() {\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle note cue');\r\n this.tracker.selections.forEach((selection) => {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n if (selection.note && selection.note.isRest() === false) {\r\n selection.note.isCue = !selection.note.isCue;\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.isCue = selection.note.isCue;\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * up or down\r\n * @returns \r\n */\r\n toggleBeamDirection(): Promise {\r\n const selections = this.tracker.selections;\r\n if (selections.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle beam direction');\r\n SmoOperation.toggleBeamDirection(selections);\r\n SmoOperation.toggleBeamDirection(this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add the selected notes to a beam group\r\n */\r\n beamSelections(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('beam selections');\r\n SmoOperation.beamSelections(this.score, selections);\r\n SmoOperation.beamSelections(this.storeScore, this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * change key signature for selected measures\r\n * @param keySignature vex key signature\r\n */\r\n addKeySignature(keySignature: string): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('set key signature ' + keySignature);\r\n measureSelections.forEach((sel) => {\r\n SmoOperation.addKeySignature(this.score, sel, keySignature);\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addKeySignature(this.storeScore, altSel!, keySignature);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Sets a pitch from the piano widget.\r\n * @param pitch {Pitch}\r\n * @param chordPedal {boolean} - indicates we are adding to a chord\r\n */\r\n setPitchPiano(pitch: Pitch, chordPedal: boolean): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections(\r\n 'setAbsolutePitch ' + pitch.letter + '/' + pitch.accidental);\r\n this.tracker.selections.forEach((selected) => {\r\n const npitch: Pitch = {\r\n letter: pitch.letter,\r\n accidental: pitch.accidental, octave: pitch.octave\r\n };\r\n const octave = SmoMeasure.defaultPitchForClef[selected.measure.clef].octave;\r\n npitch.octave += octave;\r\n const altSel = this._getEquivalentSelection(selected);\r\n if (chordPedal && selected.note) {\r\n selected.note.toggleAddPitch(npitch);\r\n altSel!.note!.toggleAddPitch(npitch);\r\n } else {\r\n SmoOperation.setPitch(selected, [npitch]);\r\n SmoOperation.setPitch(altSel!, [npitch]);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * show or hide the piano widget\r\n * @param value to show it\r\n */\r\n showPiano(value: boolean): Promise {\r\n this.score.preferences.showPiano = value;\r\n this.storeScore.preferences.showPiano = value;\r\n if (value) {\r\n SuiPiano.showPiano();\r\n } else {\r\n SuiPiano.hidePiano();\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Render a pitch for each letter name-pitch in the string,\r\n * @param pitches letter names for pitches\r\n * @returns promise, resolved when all pitches rendered\r\n * @see setPitch\r\n */\r\n async setPitchesPromise(pitches: PitchLetter[]): Promise {\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (index: number) => {\r\n if (index >= pitches.length) {\r\n resolve();\r\n } else {\r\n await self.setPitch(pitches[index]);\r\n fc(index + 1);\r\n }\r\n };\r\n fc(0);\r\n });\r\n return promise;\r\n }\r\n\r\n /**\r\n * Add a pitch to the score at the cursor. This tries to find the best pitch\r\n * to match the letter key (F vs F# for instance) based on key and surrounding notes\r\n * @param letter string\r\n */\r\n setPitch(letter: PitchLetter): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set pitch ' + letter);\r\n selections.forEach((selected) => {\r\n const selector = selected.selector;\r\n let hintSel = SmoSelection.lastNoteSelection(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n if (!hintSel) {\r\n hintSel = SmoSelection.nextNoteSelection(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n // The selection no longer exists, possibly deleted\r\n if (hintSel === null || hintSel.note === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const pitch = SmoMusic.getLetterNotePitch(hintSel.note.pitches[0],\r\n letter, hintSel.measure.keySignature);\r\n SmoOperation.setPitch(selected, [pitch]);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.setPitch(altSel!, [pitch]);\r\n if (this.score.preferences.autoAdvance) {\r\n this.tracker.moveSelectionRight(this.score, null, true);\r\n }\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Generic clipboard copy action\r\n */\r\n copy(): Promise {\r\n this.pasteBuffer.setSelections(this.score, this.tracker.selections);\r\n const altAr: SmoSelection[] = [];\r\n this.tracker.selections.forEach((sel) => {\r\n const noteSelection = this._getEquivalentSelection(sel);\r\n if (noteSelection !== null) {\r\n altAr.push(noteSelection);\r\n }\r\n });\r\n this.storePaste.setSelections(this.storeScore, altAr);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * clipboard paste action\r\n * @returns \r\n */\r\n paste(): Promise {\r\n // We undo the whole score on a paste, since we don't yet know the\r\n // extent of the overlap\r\n this._undoScore('paste');\r\n this.renderer.preserveScroll();\r\n const firstSelection = this.tracker.selections[0];\r\n const pasteTarget = firstSelection.selector;\r\n const altSelection = this._getEquivalentSelection(firstSelection);\r\n const altTarget = altSelection!.selector;\r\n this.pasteBuffer.pasteSelections(pasteTarget);\r\n this.storePaste.pasteSelections(altTarget);\r\n this._renderChangedMeasures(this.pasteBuffer.replacementMeasures);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * specify a note head other than the default for the duration\r\n * @param head \r\n */\r\n setNoteHead(head: string): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set note head');\r\n SmoOperation.setNoteHead(selections, head);\r\n SmoOperation.setNoteHead(this._getEquivalentSelections(selections), head);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Add a volta for selected measures\r\n */\r\n addEnding(): Promise {\r\n // TODO: we should have undo for columns\r\n this._undoScore('Add Volta');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const params = SmoVolta.defaults;\r\n params.startBar = ft.selector.measure;\r\n params.endBar = tt.selector.measure;\r\n params.number = 1;\r\n const volta = new SmoVolta(params);\r\n const altVolta = new SmoVolta(params);\r\n this._renderChangedMeasures([ft, tt]);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, volta);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param ending volta settings\r\n * @returns \r\n */\r\n updateEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Change Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n const altVolta = new SmoVolta(ending);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param ending volta to remove\r\n * @returns \r\n */\r\n removeEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Remove Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position begin or end\r\n * @param barline barline type\r\n * @returns \r\n */\r\n setBarline(position: number, barline: number): Promise {\r\n const obj = new SmoBarline({ position, barline });\r\n const altObj = new SmoBarline({ position, barline });\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set barline', selection.selector.measure);\r\n SmoOperation.setMeasureBarline(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setMeasureBarline(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position start or end\r\n * @param symbol coda, etc.\r\n */\r\n setRepeatSymbol(position: number, symbol: number): Promise {\r\n const params = SmoRepeatSymbol.defaults;\r\n params.position = position;\r\n params.symbol = symbol;\r\n const obj = new SmoRepeatSymbol(params);\r\n const altObj = new SmoRepeatSymbol(params);\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set repeat symbol', selection.selector.measure);\r\n SmoOperation.setRepeatSymbol(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setRepeatSymbol(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle rehearsal mark on first selected measure\r\n * @returns\r\n */\r\n toggleRehearsalMark(): Promise {\r\n const selection = this.tracker.getExtremeSelection(-1);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n const cmd = selection.measure.getRehearsalMark() ? 'removeRehearsalMark' : 'addRehearsalMark';\r\n SmoOperation[cmd](this.score, selection, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n SmoOperation[cmd](this.storeScore, altSelection!, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n _removeStaffModifier(modifier: StaffModifierBase) {\r\n this.score.staves[modifier.associatedStaff].removeStaffModifier(modifier);\r\n const altModifier = StaffModifierBase.deserialize(modifier.serialize());\r\n altModifier.startSelector = this._getEquivalentSelector(altModifier.startSelector);\r\n altModifier.endSelector = this._getEquivalentSelector(altModifier.endSelector);\r\n this.storeScore.staves[this._getEquivalentStaff(modifier.associatedStaff)].removeStaffModifier(altModifier);\r\n }\r\n /**\r\n * Remove selected modifier\r\n * @param modifier slur, hairpin, etc.\r\n * @returns \r\n */\r\n removeStaffModifier(modifier: StaffModifierBase): Promise {\r\n this._undoStaffModifier('Set measure proportion', modifier,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this._removeStaffModifier(modifier);\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change a staff modifier\r\n * @param original original version\r\n * @param modifier modified version\r\n * @returns \r\n */\r\n addOrUpdateStaffModifier(original: StaffModifierBase, modifier: StaffModifierBase): Promise {\r\n if (!modifier) {\r\n if (original) {\r\n // Handle legacy API changed\r\n modifier = StaffModifierBase.deserialize(original);\r\n } else {\r\n console.warn('update modifier: bad modifier');\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const existing = this.score.staves[modifier.startSelector.staff]\r\n .getModifier(modifier);\r\n const subtype = existing === null ? UndoBuffer.bufferSubtypes.ADD :\r\n UndoBuffer.bufferSubtypes.UPDATE;\r\n this._undoStaffModifier('Set measure proportion', original,\r\n subtype);\r\n this._removeStaffModifier(modifier);\r\n const copy = StaffModifierBase.deserialize(modifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n const sel = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n if (sel !== null) {\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addStaffModifier(sel, modifier);\r\n SmoOperation.addStaffModifier(altSel!, copy);\r\n const modId = 'mod-' + sel.selector.staff + '-' + sel.selector.measure;\r\n const context = this.renderer.renderer.getRenderer(sel.measure.svg.logicalBox);\r\n if (context) {\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n }\r\n }\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n _lineOperation(op: string) {\r\n // if (this.tracker.selections.length < 2) {\r\n // return;\r\n // }\r\n const measureSelections = this._undoTrackerMeasureSelections(op);\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = (SmoOperation as any)[op](ft, tt);\r\n (SmoOperation as any)[op](ftAlt, ttAlt);\r\n this._undoStaffModifier('add ' + op, modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n crescendo(): Promise {\r\n this._lineOperation('crescendo');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n crescendoBracket(): Promise {\r\n this._lineOperation('crescendoBracket');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n dimenuendo(): Promise {\r\n this._lineOperation('dimenuendo');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n accelerando(): Promise {\r\n this._lineOperation('accelerando');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n ritard(): Promise {\r\n this._lineOperation('ritard');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * diminuendo selections\r\n * @returns \r\n */\r\n decrescendo(): Promise {\r\n this._lineOperation('decrescendo');\r\n return this.renderer.updatePromise();\r\n }\r\n removeTextBracket(bracket: SmoStaffTextBracket): Promise {\r\n return this.removeStaffModifier(bracket);\r\n }\r\n addOrReplaceTextBracket(modifier: SmoStaffTextBracket) {\r\n const from1 = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n const to1 = SmoSelection.noteFromSelector(this.score, modifier.endSelector);\r\n if (from1 === null || to1 === null) {\r\n return;\r\n }\r\n const altFrom = this._getEquivalentSelection(from1);\r\n const altTo = this._getEquivalentSelection(to1);\r\n if (altFrom === null || altTo === null) {\r\n return;\r\n }\r\n SmoOperation.addOrReplaceBracket(modifier, from1, to1);\r\n SmoOperation.addOrReplaceBracket(modifier, altFrom, altTo);\r\n const redraw = SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector);\r\n this._undoStaffModifier('add repl text bracket', modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(redraw);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Slur selected notes\r\n * @returns\r\n */\r\n slur(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('slur');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = SmoOperation.slur(this.score, ft, tt);\r\n const altModifier = SmoOperation.slur(this.storeScore, ftAlt!, ttAlt!);\r\n this._undoStaffModifier('add ' + 'op', new SmoSlur(modifier), UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * tie selected notes\r\n * @returns \r\n */\r\n tie(): Promise {\r\n this._lineOperation('tie');\r\n return this.renderer.updatePromise();\r\n }\r\n updateZoom(zoomFactor: number) {\r\n const original = this.score.layoutManager!.getGlobalLayout();\r\n original.zoomScale = zoomFactor;\r\n this.score.layoutManager!.globalLayout.zoomScale = zoomFactor;\r\n this.renderer.pageMap.updateZoom(zoomFactor);\r\n this.renderer.pageMap.updateContainerOffset(this.scroller.scrollState);\r\n }\r\n /**\r\n * set global page for score, zoom etc.\r\n * @param layout global SVG settings\r\n * @returns \r\n */\r\n setGlobalLayout(layout: SmoGlobalLayout): Promise {\r\n this._undoScore('Set Global Layout');\r\n const original = this.score.layoutManager!.getGlobalLayout().svgScale;\r\n this.score.layoutManager!.updateGlobalLayout(layout);\r\n this.score.scaleTextGroups(original / layout.svgScale);\r\n this.storeScore.layoutManager!.updateGlobalLayout(layout);\r\n this.renderer.rerenderAll();\r\n return this.renderer.preserveScroll();\r\n }\r\n /**\r\n * Set the layout of a single page\r\n * @param layout page layout\r\n * @param pageIndex which page to change\r\n * @returns \r\n */\r\n _setPageLayout(layout: SmoPageLayout, pageIndex: number) {\r\n this.score.layoutManager!.updatePage(layout, pageIndex);\r\n this.storeScore.layoutManager!.updatePage(layout, pageIndex);\r\n // If we are in part mode, save the page layout in the part so it is there next time\r\n // the part is exposed.\r\n if (this.isPartExposed()) {\r\n this.score.staves.forEach((staff, staffIx) => {\r\n staff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n const altStaff = this.storeScore.staves[this.staffMap[staffIx]];\r\n altStaff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n });\r\n }\r\n }\r\n setPageLayouts(layout: SmoPageLayout, startIndex: number, endIndex: number) {\r\n this._undoScore('Set Page Layout');\r\n let i = 0;\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n this._setPageLayout(layout, i);\r\n }\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the music font\r\n * @param family \r\n * @returns \r\n */\r\n setEngravingFontFamily(family: engravingFontType): Promise {\r\n this.score.engravingFont = family;\r\n this.storeScore.engravingFont = family;\r\n this.renderer.notifyFontChange(); \r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Upate global font used for chord changes\r\n * @param fontInfo\r\n * @returns \r\n */\r\n setChordFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Chord Font');\r\n this.score.setChordFont(fontInfo);\r\n this.storeScore.setChordFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update font used for lyrics\r\n * @param fontInfo \r\n * @returns \r\n */\r\n setLyricFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Lyric Font');\r\n this.score.setLyricFont(fontInfo);\r\n this.storeScore.setLyricFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param value if false, lyric widths don't affect measure width\r\n * @returns \r\n */\r\n setLyricAdjustWidth(value: boolean): Promise {\r\n this._undoScore('Set Lyric Adj Width');\r\n this.score.setLyricAdjustWidth(value);\r\n this.storeScore.setLyricAdjustWidth(value);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * delete selected measures\r\n * @returns \r\n */\r\n deleteMeasure() {\r\n this._undoScore('Delete Measure');\r\n if (this.storeScore.staves[0].measures.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const selections = SmoSelection.getMeasureList(this.tracker.selections);\r\n // THe measures get renumbered, so keep the index at 0\r\n const index = selections[0].selector.measure;\r\n for (var i = 0; i < selections.length; ++i) {\r\n // Unrender the deleted measure\r\n this.score.staves.forEach((staff) => {\r\n this.tracker.clearMeasureMap(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[staff.measures.length - 1]);\r\n // A little hacky - delete the modifiers if they start or end on\r\n // the measure\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.startSelector.measure === index || modifier.endSelector.measure === index) {\r\n if (modifier.logicalBox) {\r\n const context = this.renderer.renderer.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n $(context.svg).find('g.' + modifier.attrs.id).remove();\r\n }\r\n }\r\n }\r\n });\r\n });\r\n // Remove the SVG artifacts mapped to this measure.\r\n this.score.deleteMeasure(index);\r\n this.storeScore.deleteMeasure(index);\r\n // Note: index doesn't increment since there are now 1 fewer measures\r\n };\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add number of measures, with default notes selections\r\n * @param append \r\n * @param numberToAdd \r\n * @returns \r\n */\r\n addMeasures(append: boolean, numberToAdd: number): Promise {\r\n let pos = 0;\r\n let ix = 0;\r\n this._undoScore('Add Measure');\r\n for (ix = 0; ix < numberToAdd; ++ix) {\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (measure) {\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n }\r\n }\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add a single measure before or after selection\r\n * @param append \r\n * @returns \r\n */\r\n addMeasure(append: boolean): Promise {\r\n this._undoScore('Add Measure');\r\n let pos = 0;\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (!measure) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n this.renderer.clearLine(measure);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * remove an entire line of music\r\n * @returns\r\n */\r\n removeStaff(): Promise {\r\n this._undoScore('Remove Instrument');\r\n if (this.storeScore.staves.length < 2 || this.score.staves.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // if we are looking at a subset of the score,\r\n // revert to the full score view before removing the staff.\r\n const sel = this.tracker.selections[0];\r\n const scoreSel = this._getEquivalentSelection(sel);\r\n const staffIndex = scoreSel!.selector.staff;\r\n SmoOperation.removeStaff(this.storeScore, staffIndex);\r\n this.viewAll();\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n addStaff(instrument: SmoSystemStaffParams): Promise {\r\n this._undoScore('Add Instrument');\r\n // if we are looking at a subset of the score, we won't see the new staff. So\r\n // revert to the full view\r\n const staff = SmoOperation.addStaff(this.storeScore, instrument);\r\n const instKeys = Object.keys(staff.measureInstrumentMap);\r\n // update the key signatures for the new part\r\n instKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n const inst = staff.measureInstrumentMap[numKey];\r\n const selections = SmoSelection.innerSelections(this.storeScore, inst.startSelector, inst.endSelector);\r\n SmoOperation.changeInstrument(inst, selections);\r\n })\r\n if (instrument.alignWithPrevious && instrument.staffId > 0) {\r\n const sel = SmoSelector.default;\r\n sel.staff = instrument.staffId - 1;\r\n const selection = SmoSelection.measureSelection(this.storeScore, instrument.staffId - 1, 0);\r\n if (selection) {\r\n let grp = this.storeScore.getSystemGroupForStaff(selection);\r\n if (grp) {\r\n grp.endSelector.staff = instrument.staffId;\r\n } else {\r\n let grp = new SmoSystemGroup(SmoSystemGroup.defaults);\r\n grp.startSelector.staff = instrument.staffId - 1;\r\n grp.endSelector.staff = instrument.staffId;\r\n this.storeScore.systemGroups.push(grp);\r\n }\r\n }\r\n }\r\n\r\n this.viewAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update part info assumes that the part is currently exposed - that\r\n * staff 0 is the first staff in the part prior to editing.\r\n * @param info\r\n */\r\n updatePartInfo(info: SmoPartInfo) {\r\n let i: number = 0;\r\n this._undoScore('Update part info');\r\n const storeStaff = this.staffMap[0] - info.stavesBefore;\r\n const partLength = info.stavesBefore + info.stavesAfter + 1;\r\n const resetView = !SmoLayoutManager.areLayoutsEqual(info.layoutManager.getGlobalLayout(), this.score.layoutManager!.getGlobalLayout());\r\n const restChange = this.score.staves[0].partInfo.expandMultimeasureRests != info.expandMultimeasureRests;\r\n const stavesChange = this.score.staves[0].partInfo.stavesAfter !== info.stavesAfter;\r\n for (i = 0; i < partLength; ++i) {\r\n const nStaffIndex = storeStaff + i;\r\n const nInfo = new SmoPartInfo(info);\r\n nInfo.stavesBefore = i;\r\n nInfo.stavesAfter = partLength - i - 1;\r\n this.storeScore.staves[nStaffIndex].partInfo = nInfo;\r\n // If the staff index is currently displayed, \r\n const displayedIndex = this.staffMap.findIndex((x) => x === nStaffIndex);\r\n if (displayedIndex >= 0) {\r\n this.score.staves[displayedIndex].partInfo = new SmoPartInfo(nInfo);\r\n this.score.layoutManager = nInfo.layoutManager;\r\n }\r\n }\r\n if (resetView || restChange || stavesChange) {\r\n this.renderer.rerenderAll()\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * A simpler API for applications to add a new staff to the score.\r\n * @param params - the instrument, which determines clef, etc.\r\n * @returns \r\n */\r\n addStaffSimple(params: Partial) {\r\n const instrumentParams = SmoInstrument.defaults;\r\n instrumentParams.startSelector.staff = instrumentParams.endSelector.staff = this.score.staves.length;\r\n instrumentParams.clef = params.clef ?? instrumentParams.clef;\r\n\r\n const staffParams = SmoSystemStaff.defaults;\r\n staffParams.measureInstrumentMap[0] = new SmoInstrument(instrumentParams);\r\n this.addStaff(staffParams);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Save the score to local storage.\r\n */\r\n quickSave() {\r\n const scoreStr = JSON.stringify(this.storeScore.serialize());\r\n localStorage.setItem(smoSerialize.localScore, scoreStr);\r\n }\r\n updateRepeatCount(count: number) {\r\n const measureSelections = this._undoTrackerMeasureSelections('repeat bar');\r\n const symbol = count > 0 ? true : false; \r\n measureSelections.forEach((ms) => {\r\n const store = this._getEquivalentSelection(ms);\r\n ms.measure.repeatCount = count;\r\n ms.measure.repeatSymbol = symbol;\r\n if (store) {\r\n store.measure.repeatCount = count;\r\n store.measure.repeatSymbol = symbol;\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.updatePromise();\r\n }\r\n /**\r\n * Update the measure formatting parameters for the current selection\r\n * @param format generic measure formatting parameters\r\n * @returns \r\n */\r\n setMeasureFormat(format: SmoMeasureFormat): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Remove system breaks from the measure formatting for selected measures\r\n * @returns \r\n */\r\n removeSystemBreaks(): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n const format = new SmoMeasureFormat(m.measure.format);\r\n format.systemBreak = false;\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n renumberMeasures(measureIndex: number, localIndex: number) {\r\n this.score.updateRenumberingMap(measureIndex, localIndex);\r\n this.storeScore.updateRenumberingMap(measureIndex, localIndex);\r\n const mmsel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n if (mmsel) {\r\n this._renderChangedMeasures([mmsel]);\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Play the music from the starting selection\r\n * @returns \r\n */\r\n playFromSelection(): void {\r\n var mm = this.tracker.getExtremeSelection(-1);\r\n if (SuiAudioPlayer.playingInstance && SuiAudioPlayer.playingInstance.paused) {\r\n SuiAudioPlayer.playingInstance.play();\r\n return;\r\n }\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n new SuiAudioPlayer({ audioAnimation: this.audioAnimation, score: this.score, startIndex: mm.selector.measure, view: this }).play();\r\n }\r\n stopPlayer() {\r\n SuiAudioPlayer.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'Home' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n moveHome(ev: KeyEvent): Promise {\r\n this.tracker.moveHome(this.score, ev);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'End' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n moveEnd(ev: KeyEvent): Promise {\r\n this.tracker.moveEnd(this.score, ev);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the left, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n growSelectionLeft(): Promise {\r\n this.tracker.growSelectionLeft();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the right, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n growSelectionRight(): Promise {\r\n this.tracker.growSelectionRight();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next tabbable modifier near one of the selected notes\r\n * @param keyEv \r\n * @returns \r\n */\r\n advanceModifierSelection(keyEv: KeyEvent): Promise {\r\n this.tracker.advanceModifierSelection(this.score, keyEv);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next entire measure, if possible\r\n * @returns \r\n */\r\n growSelectionRightMeasure(): Promise {\r\n this.tracker.growSelectionRightMeasure();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n moveSelectionRight(ev: KeyEvent): Promise {\r\n this.tracker.moveSelectionRight(this.score, ev, true);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor backwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n moveSelectionLeft(): Promise {\r\n this.tracker.moveSelectionLeft();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor back entire measure, if possible\r\n * @returns \r\n */\r\n moveSelectionLeftMeasure(): Promise {\r\n this.tracker.moveSelectionLeftMeasure();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forward one measure, if possible\r\n * @returns \r\n */\r\n moveSelectionRightMeasure(): Promise {\r\n this.tracker.moveSelectionRightMeasure();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a higher pitch in the current chord, with wrap\r\n * @returns \r\n */\r\n moveSelectionPitchUp(): Promise {\r\n this.tracker.moveSelectionPitchUp();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a lower pitch in the current chord, with wrap\r\n */\r\n moveSelectionPitchDown(): Promise {\r\n this.tracker.moveSelectionPitchDown();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor up a staff in the system, if possible\r\n * @returns \r\n */\r\n moveSelectionUp(): Promise {\r\n this.tracker.moveSelectionUp();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor down a staff in the system, if possible\r\n * @returns \r\n */\r\n moveSelectionDown(): Promise {\r\n this.tracker.moveSelectionDown();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the current suggestions (hover element) as the selection\r\n * @returns \r\n */\r\n selectSuggestion(evData: KeyEvent): Promise {\r\n this.tracker.selectSuggestion(this.score, evData);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Find an element at the given box, and make it the current selection\r\n * */\r\n intersectingArtifact(evData: SvgBox): Promise {\r\n this.tracker.intersectingArtifact(evData);\r\n return this.renderer.updatePromise();\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Respond to scroll events in music DOM, and handle the scroll of the viewport\r\n * @category SuiRender\r\n */\r\nexport class SuiScroller {\r\n selector: HTMLElement;\r\n svgPages: SvgPageMap;\r\n _scroll: SvgPoint;\r\n _offsetInitial: SvgPoint;\r\n viewport: SvgBox = SvgBox.default;\r\n logicalViewport: SvgBox = SvgBox.default;\r\n scrolling: boolean = false;\r\n // ### constructor\r\n // selector is the scrollable DOM container of the music container\r\n // (grandparent of svg element)\r\n constructor(selector: HTMLElement, svgPages: SvgPageMap) {\r\n const self = this;\r\n this.selector = selector;\r\n this._scroll = { x: 0, y: 0 };\r\n this.svgPages = svgPages;\r\n const scroller = $(selector);\r\n this._offsetInitial = { x: $(scroller).offset().left, y: $(scroller).offset().top };\r\n }\r\n\r\n get scrollState(): SvgPoint {\r\n return { x: this._scroll.x, y: this._scroll.y };\r\n }\r\n restoreScrollState(state: SvgPoint) {\r\n this.scrollOffset(state.x - this._scroll.x, state.y - this._scroll.y);\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### handleScroll\r\n // update viewport in response to scroll events\r\n handleScroll(x: number, y: number) {\r\n this._scroll = { x, y };\r\n this.deferUpdateDebug();\r\n }\r\n updateDebug() {\r\n layoutDebug.updateScrollDebug(this._scroll);\r\n }\r\n deferUpdateDebug() {\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n setTimeout(() => {\r\n this.updateDebug();\r\n }, 1);\r\n }\r\n }\r\n\r\n scrollAbsolute(x: number, y: number) {\r\n $(this.selector)[0].scrollLeft = x;\r\n $(this.selector)[0].scrollTop = y;\r\n this.netScroll.x = this._scroll.x = x;\r\n this.netScroll.y = this._scroll.y = y;\r\n this.deferUpdateDebug();\r\n }\r\n\r\n /**\r\n * Scroll such that the box is fully visible, if possible (if it is\r\n * not larger than the screen) \r\n **/\r\n scrollVisibleBox(box: SvgBox) {\r\n let yoff = 0;\r\n let xoff = 0;\r\n\r\n const screenBox = this.svgPages.svgToClientNoOffset(box);\r\n const scrollState = this.scrollState;\r\n const scrollDown = () => screenBox.y + screenBox.height > scrollState.y + this.viewport.height;\r\n const scrollUp = () => screenBox.y < scrollState.y;\r\n const scrollLeft = () => screenBox.x < scrollState.x;\r\n const scrollRight = () => screenBox.x + screenBox.width > scrollState.x + this.viewport.width;\r\n // Math: make sure we don't scroll down if scrollUp is indicated, etc.\r\n if (scrollUp()) {\r\n yoff = Math.min(screenBox.y - scrollState.y, 0);\r\n } \r\n if (scrollDown()) {\r\n yoff = Math.max(screenBox.y - (scrollState.y - screenBox.height), 0);\r\n }\r\n if (scrollLeft()) {\r\n xoff = Math.min(screenBox.x - scrollState.x, 0);\r\n }\r\n if (scrollRight()) {\r\n xoff = Math.max(screenBox.x - (scrollState.x - screenBox.height), 0);\r\n }\r\n this.scrollOffset(xoff, yoff);\r\n}\r\n // Update viewport size, and also fix height of scroll region.\r\n updateViewport() {\r\n $(this.selector).css('height', (window.innerHeight - $(this.selector).offset().top).toString() + 'px');\r\n this.viewport = SvgHelpers.boxPoints(\r\n $(this.selector).offset().left,\r\n $(this.selector).offset().top,\r\n $(this.selector).width(),\r\n $(this.selector).height());\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### scrollBox\r\n // get the current viewport, in scrolled coordinates. When tracker maps the\r\n // music element to client coordinates, these are the coordinates used in the\r\n // map\r\n get scrollBox(): SvgBox {\r\n return SvgHelpers.boxPoints(this.viewport.x + this.netScroll.x,\r\n this.viewport.y + this.netScroll.y,\r\n this.viewport.width,\r\n this.viewport.height\r\n );\r\n }\r\n\r\n // ### scrollOffset\r\n // scroll the offset from the starting scroll point\r\n scrollOffset(x: number, y: number) {\r\n const xScreen = Math.max(this._scroll.x + x, 0);\r\n const yScreen = Math.max(this._scroll.y + y, 0);\r\n this.scrollAbsolute(xScreen, yScreen);\r\n }\r\n\r\n // ### netScroll\r\n // return the net amount we've scrolled, based on when the maps were make (initial)\r\n // , the offset of the container, and the absolute coordinates of the scrollbar.\r\n get netScroll() {\r\n var xoffset = $(this.selector).offset().left - this._offsetInitial.x;\r\n var yoffset = $(this.selector).offset().top - this._offsetInitial.y;\r\n return { x: this._scroll.x - xoffset, y: this._scroll.y - yoffset };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { Transposable, SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPage } from './svgPageMap';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface StrokeInfo {\r\n strokeName: string,\r\n stroke: string,\r\n strokeWidth: string | number,\r\n strokeDasharray: string | number,\r\n fill: string,\r\n opacity: number\r\n}\r\n\r\nexport interface OutlineInfo {\r\n stroke: StrokeInfo,\r\n classes: string,\r\n box: SvgBox | SvgBox[],\r\n scroll: SvgPoint,\r\n context: SvgPage,\r\n timeOff: number,\r\n timer?: number,\r\n element?: SVGSVGElement\r\n}\r\n\r\nexport interface GradientInfo {\r\n color: string, offset: string, opacity: number\r\n}\r\n\r\nexport interface Boxable {\r\n box: SvgBox\r\n}\r\n\r\nexport class SvgBuilder {\r\n e: Element;\r\n constructor(el: string) {\r\n const ns = SvgHelpers.namespace;\r\n this.e = document.createElementNS(ns, el);\r\n }\r\n classes(cl: string): SvgBuilder {\r\n this.e.setAttributeNS('', 'class', cl);\r\n return this;\r\n }\r\n attr(name: string, value: string): SvgBuilder {\r\n this.e.setAttributeNS('', name, value);\r\n return this;\r\n }\r\n\r\n text(x: number | string, y: number | string, classes: string, text: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n this.e.setAttributeNS('', 'class', classes);\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.textContent = text;\r\n return this;\r\n }\r\n rect(x: number | string, y: number | string, width: number | string, height: number | string, classes: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n width = typeof (width) == 'string' ? width : width.toString();\r\n height = typeof (height) == 'string' ? height : height.toString();\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.setAttributeNS('', 'width', width);\r\n this.e.setAttributeNS('', 'height', height);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n line(x1: number | string, y1: number | string, x2: number | string, y2: number | string, classes: string): SvgBuilder {\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n this.e.setAttributeNS('', 'x1', x1);\r\n this.e.setAttributeNS('', 'y1', y1);\r\n this.e.setAttributeNS('', 'x2', x2);\r\n this.e.setAttributeNS('', 'y2', y2);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n append(el: any): SvgBuilder {\r\n this.e.appendChild(el.e);\r\n return this;\r\n }\r\n dom(): Element {\r\n return this.e;\r\n }\r\n static b(element: string): SvgBuilder {\r\n return new SvgBuilder(element);\r\n }\r\n}\r\n// ## SvgHelpers\r\n// Mostly utilities for converting coordinate spaces based on transforms, etc.\r\n// ### static class methods:\r\n// ---\r\nexport class SvgHelpers {\r\n static get namespace(): string {\r\n return \"http://www.w3.org/2000/svg\";\r\n }\r\n\r\n // ### gradient\r\n // Create an svg linear gradient.\r\n // Stops look like this:\r\n // `[{color:\"#eee\", offset:\"0%\",opacity:0.5}]`\r\n // orientation is horizontal or vertical\r\n static gradient(svg: SVGSVGElement, id: string, orientation: string, stops: GradientInfo[]) {\r\n var ns = SvgHelpers.namespace;\r\n var x2 = orientation === 'vertical' ? 0 : 1;\r\n var y2 = orientation === 'vertical' ? 1 : 0;\r\n\r\n var e = document.createElementNS(ns, 'linearGradient');\r\n e.setAttributeNS('', 'id', id);\r\n e.setAttributeNS('', 'x1', '0');\r\n e.setAttributeNS('', 'x2', x2.toString());\r\n e.setAttributeNS('', 'y1', '0');\r\n e.setAttributeNS('', 'y2', y2.toString());\r\n stops.forEach((stop) => {\r\n var s = document.createElementNS(ns, 'stop');\r\n s.setAttributeNS('', 'stop-opacity', stop.opacity.toString());\r\n s.setAttributeNS('', 'stop-color', stop.color);\r\n s.setAttributeNS('', 'offset', stop.offset);\r\n e.appendChild(s);\r\n\r\n });\r\n svg.appendChild(e);\r\n }\r\n\r\n static renderCursor(svg: SVGSVGElement, x: number, y: number, height: number) {\r\n var ns = SvgHelpers.namespace;\r\n const width = height * 0.4;\r\n x = x - (width / 2);\r\n var mcmd = (d: string, x: number, y: number) => {\r\n return d + 'M ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var qcmd = (d: string, x1: number, y1: number, x2: number, y2: number) => {\r\n return d + 'q ' + x1.toString() + ' ' + y1.toString() + ' ' + x2.toString() + ' ' + y2.toString() + ' ';\r\n };\r\n var lcmd = (d: string, x: number, y: number) => {\r\n return d + 'L ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var x1 = (width / 2) * .333;\r\n var y1 = -1 * (x1 / 4);\r\n var x2 = (width / 2);\r\n var y2 = x2 / 4;\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'path');\r\n var d = '';\r\n d = mcmd(d, x, y);\r\n d = qcmd(d, x1, y1, x2, y2);\r\n d = lcmd(d, x + (width / 2), y + height - (width / 8));\r\n d = mcmd(d, x + width, y);\r\n d = qcmd(d, -1 * x1, y1, -1 * x2, y2);\r\n d = mcmd(d, x, y + height);\r\n d = qcmd(d, x1, -1 * y1, x2, -1 * y2);\r\n d = mcmd(d, x + width, y + height);\r\n d = qcmd(d, -1 * x1, -1 * y1, -1 * x2, -1 * y2);\r\n e.setAttributeNS('', 'd', d);\r\n e.setAttributeNS('', 'stroke-width', '1');\r\n e.setAttributeNS('', 'stroke', '#555');\r\n e.setAttributeNS('', 'fill', 'none');\r\n svg.appendChild(e);\r\n }\r\n\r\n // ### boxNote\r\n // update the note geometry based on current viewbox conditions.\r\n // This may not be the appropriate place for this...maybe in layout\r\n static updateArtifactBox(context: SvgPage, element: SVGSVGElement | undefined, artifact: Transposable) {\r\n if (!element) {\r\n console.log('updateArtifactBox: undefined element!');\r\n return;\r\n }\r\n artifact.logicalBox = context.offsetBbox(element);\r\n }\r\n\r\n // ### eraseOutline\r\n // Erases old outlineRects.\r\n static eraseOutline(params: OutlineInfo) {\r\n // Hack: Assume a stroke style, should just take a stroke param.\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n }\r\n\r\n static outlineRect(params: OutlineInfo) {\r\n const context = params.context;\r\n if (params.element && params.timer) {\r\n clearTimeout(params.timer);\r\n params.timer = undefined;\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n if (params.timeOff) {\r\n params.timer = window.setTimeout(() => {\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n params.timer = undefined;\r\n }\r\n }, params.timeOff);\r\n }\r\n // Don't highlight in print mode.\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n const classes = params.classes.length > 0 ? params.classes + ' ' + params.stroke.strokeName : params.stroke.strokeName;\r\n var grp = context.getContext().openGroup(classes, classes + '-outline');\r\n params.element = grp;\r\n const boxes = Array.isArray(params.box) ? params.box : [params.box];\r\n\r\n boxes.forEach((box: SvgBox) => {\r\n if (box) {\r\n var strokeObj:any = params.stroke;\r\n strokeObj['stroke-width'] = params.stroke.strokeWidth;\r\n var margin = 5;\r\n /* if (params.clientCoordinates === true) {\r\n box = SvgHelpers.smoBox(SvgHelpers.clientToLogical(context.svg, SvgHelpers.smoBox(SvgHelpers.adjustScroll(box, scroll))));\r\n } */\r\n context.getContext().rect(box.x - margin, box.y - margin, box.width + margin * 2, box.height + margin * 2, strokeObj);\r\n }\r\n });\r\n context.getContext().closeGroup(grp);\r\n }\r\n\r\n static setSvgStyle(element: Element, attrs: StrokeInfo) {\r\n element.setAttributeNS('', 'stroke', attrs.stroke);\r\n if (attrs.strokeDasharray) {\r\n element.setAttributeNS('', 'stroke-dasharray', attrs.strokeDasharray.toString());\r\n }\r\n if (attrs.strokeWidth) {\r\n element.setAttributeNS('', 'stroke-width', attrs.strokeWidth.toString());\r\n }\r\n if (attrs.fill) {\r\n element.setAttributeNS('', 'fill', attrs.fill);\r\n }\r\n }\r\n static rect(svg: Document, box: SvgBox, attrs: StrokeInfo, classes: string) {\r\n var rect = document.createElementNS(SvgHelpers.namespace, 'rect');\r\n SvgHelpers.setSvgStyle(rect, attrs);\r\n if (classes) {\r\n rect.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(rect);\r\n return rect;\r\n }\r\n\r\n static line(svg: SVGSVGElement, x1: number | string, y1: number | string, x2: number | string, y2: number | string, attrs: StrokeInfo, classes: string) {\r\n var line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n line.setAttributeNS('', 'x1', x1);\r\n line.setAttributeNS('', 'y1', y1);\r\n line.setAttributeNS('', 'x2', x2);\r\n line.setAttributeNS('', 'y2', y2);\r\n SvgHelpers.setSvgStyle(line, attrs);\r\n if (classes) {\r\n line.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(line);\r\n }\r\n\r\n static arrowDown(svg: SVGSVGElement, box: SvgBox) {\r\n const arrowStroke: StrokeInfo = { strokeName: 'arrow-stroke', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 };\r\n SvgHelpers.line(svg, box.x + box.width / 2, box.y, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n var arrowY = box.y + box.height / 4;\r\n SvgHelpers.line(svg, box.x, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n SvgHelpers.line(svg, box.x + box.width, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var mid = box.x + box.width / 2;\r\n var xtext = 'x1: ' + Math.round(box.x);\r\n var wtext = 'x2: ' + Math.round(box.width + box.x);\r\n var ytext = 'y1: ' + Math.round(box.y);\r\n var htext = 'y2: ' + Math.round(box.height + box.y);\r\n var ytextp = Math.round(box.y + box.height);\r\n var ytextp2 = Math.round(box.y + box.height - 30);\r\n\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('text').text(box.x + 20, box.y - 14 + voffset, 'svg-debug-text', xtext))\r\n .append(\r\n b('text').text(mid - 20, box.y - 14 + voffset, 'svg-debug-text', wtext))\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''))\r\n .append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp, 'svg-vdebug-text', ytext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + ytextp + ')'));\r\n if (box.height > 2) {\r\n r.append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp2, 'svg-vdebug-text', htext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + (ytextp2) + ')'))\r\n .append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n static debugBoxNoText(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''));\r\n if (box.height > 2) {\r\n r.append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n\r\n static placeSvgText(svg: SVGSVGElement, attributes: Record[], classes: string, text: string): SVGSVGElement {\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'text');\r\n attributes.forEach((attr) => {\r\n var key: string = Object.keys(attr)[0];\r\n e.setAttributeNS('', key, attr[key].toString());\r\n })\r\n if (classes) {\r\n e.setAttributeNS('', 'class', classes);\r\n }\r\n var tn = document.createTextNode(text);\r\n e.appendChild(tn);\r\n svg.appendChild(e);\r\n return (e as any);\r\n }\r\n static doesBox1ContainBox2(box1?: SvgBox, box2?: SvgBox): boolean {\r\n if (!box1 || !box2) {\r\n return false;\r\n }\r\n const i1 = box2.x - box1.x;\r\n const i2 = box2.y - box1.y;\r\n return (i1 > 0 && i1 < box1.width && i2 > 0 && i2 < box1.height);\r\n }\r\n\r\n // ### findIntersectionArtifact\r\n // find all object that intersect with the rectangle\r\n static findIntersectingArtifact(clientBox: SvgBox, objects: Boxable[]): Boxable[] {\r\n var box = SvgHelpers.smoBox(clientBox); //svgHelpers.untransformSvgPoint(this.context.svg,clientBox);\r\n\r\n // box.y = box.y - this.renderElement.offsetTop;\r\n // box.x = box.x - this.renderElement.offsetLeft;\r\n var rv: Boxable[] = [];\r\n objects.forEach((object) => {\r\n // Measure has been updated, but not drawn.\r\n if (!object.box) {\r\n // console.log('there is no box');\r\n } else {\r\n var obox = SvgHelpers.smoBox(object.box);\r\n if (SvgHelpers.doesBox1ContainBox2(obox, box)) {\r\n rv.push(object);\r\n }\r\n }\r\n });\r\n\r\n return rv;\r\n }\r\n\r\n static findSmallestIntersection(clientBox: SvgBox, objects: Boxable[]) {\r\n var ar = SvgHelpers.findIntersectingArtifact(clientBox, objects);\r\n if (!ar.length) {\r\n return null;\r\n }\r\n var rv = ar[0];\r\n var min = ar[0].box.width * ar[0].box.height;\r\n ar.forEach((obj) => {\r\n var tst = obj.box.width * obj.box.height;\r\n if (tst < min) {\r\n rv = obj;\r\n min = tst;\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n static translateElement(g: SVGSVGElement, x: number | string, y: number | string) {\r\n g.setAttributeNS('', 'transform', 'translate(' + x + ' ' + y + ')');\r\n }\r\n\r\n static stringify(box: SvgBox): string {\r\n if (box['width']) {\r\n\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' ');\r\n } else {\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y\r\n }, null, ' ');\r\n }\r\n }\r\n\r\n static log(box: SvgBox) {\r\n if (box['width']) {\r\n console.log(JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' '));\r\n } else {\r\n console.log('{}');\r\n }\r\n }\r\n\r\n // ### smoBox:\r\n // return a simple box object that can be serialized, copied\r\n // (from svg DOM box)\r\n static smoBox(box: any) {\r\n if (typeof (box) === \"undefined\" || box === null) {\r\n return SvgBox.default;\r\n }\r\n let testBox = box;\r\n if (Array.isArray(box)) {\r\n testBox = box[0];\r\n }\r\n const hround = (f: number): number => {\r\n return Math.round((f + Number.EPSILON) * 100) / 100;\r\n }\r\n const x = typeof (testBox.x) == 'undefined' ? hround(testBox.left) : hround(testBox.x);\r\n const y = typeof (testBox.y) == 'undefined' ? hround(testBox.top) : hround(testBox.y);\r\n return ({\r\n x: hround(x),\r\n y: hround(y),\r\n width: hround(testBox.width),\r\n height: hround(testBox.height)\r\n });\r\n }\r\n // ### unionRect\r\n // grow the bounding box two objects to include both.\r\n static unionRect(b1: SvgBox, b2: SvgBox): SvgBox {\r\n const x = Math.min(b1.x, b2.x);\r\n const y = Math.min(b1.y, b2.y);\r\n const width = Math.max(b1.x + b1.width, b2.x + b2.width) - x;\r\n const height = Math.max(b1.y + b1.height, b2.y + b2.height) - y;\r\n return {\r\n x: x,\r\n y: y,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n static boxPoints(x: number, y: number, w: number, h: number): SvgBox {\r\n return ({\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h\r\n });\r\n }\r\n\r\n // ### svgViewport\r\n // set `svg` element to `width`,`height` and viewport `scale`\r\n static svgViewport(svg: SVGSVGElement, xOffset: number, yOffset: Number, width: number, height: number, scale: number) {\r\n svg.setAttributeNS('', 'width', '' + width);\r\n svg.setAttributeNS('', 'height', '' + height);\r\n svg.setAttributeNS('', 'viewBox', '' + xOffset + ' ' + yOffset + ' ' + Math.round(width / scale) + ' ' +\r\n Math.round(height / scale));\r\n }\r\n static removeElementsByClass(svg: SVGSVGElement, className: string) {\r\n const els = svg.getElementsByClassName(className);\r\n const ellength = els.length\r\n for (var xxx = 0; xxx < ellength; ++xxx) {\r\n els[0].remove();\r\n }\r\n }\r\n}\r\n","import { SvgHelpers, StrokeInfo } from \"./svgHelpers\";\r\nimport { SvgPoint, SvgBox, Renderable } from '../../smo/data/common';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SmoGlobalLayout, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { ModifierTab } from '../../smo/xform/selections';\r\nimport { VexFlow } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n/**\r\n * classes for managing the SVG containers where the music is rendered. Each\r\n * page is a different SVG element. Screen coordinates need to be mapped to the\r\n * correct page and then to the correct element on that page.\r\n * @module /render/sui/svgPageMap\r\n */\r\ndeclare var $: any;\r\n/**\r\n * A selection map maps a sub-section of music (a measure, for instance) to a region\r\n * on the screen. SelectionMap can contain other SelectionMaps with\r\n * different 'T', for instance, notes in a measure, in a 'Russian Dolls' kind of model.\r\n * This allows us to search for elements in < O(n) time and avoid\r\n * expensive geometry operations.\r\n */\r\nexport abstract class SelectionMap {\r\n /**\r\n * Create a key from the selection (selector). e.g. (1,1)\r\n * @param selection \r\n */\r\n abstract createKey(selection: SmoSelection): K;\r\n /**\r\n * get a set of coordinates from this selection, if it has been rendered.\r\n * @param selection \r\n */\r\n abstract boxFromSelection(selection: SmoSelection): SvgBox;\r\n /**\r\n * Add the selection to our map, and possibly to our child map.\r\n * @param key \r\n * @param selection \r\n */\r\n abstract addKeyToMap(key: K, selection: SmoSelection): void;\r\n /**\r\n * find a collection of selection that match a bounding box, possibly by\r\n * recursing through our child SelectionMaps.\r\n * @param value \r\n * @param box \r\n * @param rv \r\n */\r\n abstract findValueInMap(value: T, box: SvgBox): SmoSelection[];\r\n /**\r\n * the outer bounding box of these selections\r\n */\r\n box: SvgBox = SvgBox.default;\r\n /**\r\n * map of key to child SelectionMaps or SmoSelections\r\n */\r\n systemMap: Map = new Map();\r\n /**\r\n * Given a bounding box (or point), find all the musical elements contained\r\n * in that point\r\n * @param box \r\n * @returns SmoSelection[]\r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n for (const [key, value] of this.systemMap) {\r\n rv = rv.concat(this.findValueInMap(value, box));\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Add a rendered element to the map, and update the bounding box\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return; \r\n }\r\n const bounds = this.boxFromSelection(selection);\r\n if (this.systemMap.size === 0) {\r\n this.box = JSON.parse(JSON.stringify(bounds));\r\n }\r\n const ix = this.createKey(selection);\r\n this.addKeyToMap(ix, selection);\r\n this.box = SvgHelpers.unionRect(bounds, this.box);\r\n }\r\n}\r\n\r\n/**\r\n * logic to map a set of notes to a region on the screen, for searching\r\n */\r\nexport class MappedNotes extends SelectionMap{\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.voice}-${selection.selector.tick}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n return selection.note?.logicalBox ?? SvgBox.default;\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n this.systemMap.set(key, selection);\r\n }\r\n findValueInMap(value: SmoSelection, box: SvgBox): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n const note = value.note;\r\n if (note && note.logicalBox && SvgHelpers.doesBox1ContainBox2(note.logicalBox, box)) {\r\n rv.push(value);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Map of measures to a region on the page.\r\n */\r\nexport class MappedMeasures extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.staff}-${selection.selector.measure}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n if (!this.systemMap.has(key)) {\r\n const nnote = new MappedNotes();\r\n this.systemMap.set(key, nnote); \r\n }\r\n this.systemMap.get(key)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedNotes, box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * Map of the systems on a page. Each system has a unique line index\r\n * which is the hash\r\n */\r\nexport class MappedSystems extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection):number {\r\n return selection.measure.svg.lineIndex;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(selectionKey: number, selection: SmoSelection) {\r\n if (!this.systemMap.has(selectionKey)) {\r\n const nmeasure = new MappedMeasures();\r\n this.systemMap.set(selectionKey, nmeasure);\r\n }\r\n this.systemMap.get(selectionKey)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedMeasures, box: SvgBox) {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n } \r\n clearMeasure(selection: SmoSelection) {\r\n if (this.systemMap.has(selection.measure.svg.lineIndex)) {\r\n const mmap = this.systemMap.get(selection.measure.svg.lineIndex);\r\n if (mmap) {\r\n this.systemMap.delete(selection.measure.svg.lineIndex);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Each page is a different SVG element, with its own offset within the DOM. This\r\n * makes partial updates faster. SvgPage keeps track of all musical elements in SelectionMaps.\r\n * staff and score modifiers are kept in seperate lists since they may span multiple\r\n * musical elements (e.g. slurs, text elements).\r\n */\r\nexport class SvgPage {\r\n _renderer: any;\r\n pageNumber: number;\r\n box: SvgBox;\r\n systemMap: MappedSystems = new MappedSystems();\r\n modifierYKeys: number[] = [];\r\n modifierTabDivs: Record = {};\r\n static get defaultMap() {\r\n return {\r\n box: SvgBox.default,\r\n systemMap: new Map()\r\n };\r\n }\r\n /**\r\n * Modifiers are divided into `modifierDivs` vertical \r\n * rectangles for event lookup.\r\n */\r\n static get modifierDivs() {\r\n return 8;\r\n }\r\n /**\r\n * This is the VextFlow renderer context (SVGContext)\r\n * @returns \r\n */\r\n getContext(): any {\r\n return this._renderer.getContext();\r\n }\r\n get divSize(): number {\r\n return this.box.height / SvgPage.modifierDivs;\r\n }\r\n constructor(renderer: any, pageNumber: number, box: SvgBox) {\r\n this._renderer = renderer;\r\n this.pageNumber = pageNumber;\r\n this.box = box;\r\n let divEnd = this.divSize;\r\n for (let i = 0; i < SvgPage.modifierDivs; ++i) {\r\n this.modifierYKeys.push(divEnd);\r\n divEnd += this.divSize;\r\n }\r\n }\r\n /**\r\n * Given SVG y, return the div for modifiers\r\n * @param y \r\n * @returns \r\n */\r\n divIndex(y: number): number {\r\n return Math.round((y - this.box.y) / this.divSize);\r\n }\r\n /**\r\n * Remove all elements and modifiers in this page, for a redraw.\r\n */\r\n clearMap() {\r\n this.systemMap = new MappedSystems();\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Clear mapped objects associated with a measure, including any\r\n * modifiers that span that measure.\r\n * @param selection \r\n */\r\n clearMeasure(selection: SmoSelection) { \r\n this.systemMap.clearMeasure(selection);\r\n const div = this.divIndex(selection.measure.svg.logicalBox.y);\r\n if (div < this.modifierYKeys.length) {\r\n const mods: ModifierTab[] = [];\r\n this.modifierTabDivs[div].forEach((mt: ModifierTab) => {\r\n if (mt.selection) {\r\n if (!SmoSelector.sameMeasure(mt.selection.selector, selection.selector)) {\r\n mods.push(mt);\r\n }\r\n } else {\r\n mods.push(mt);\r\n }\r\n });\r\n this.modifierTabDivs[div] = mods;\r\n }\r\n }\r\n /**\r\n * add a modifier to the page, indexed by its rectangle\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const div = this.divIndex(modifier.box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (!this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div] = [];\r\n }\r\n this.modifierTabDivs[div].push(modifier);\r\n }\r\n }\r\n /**\r\n * Add a new selection to the page\r\n * @param selection \r\n */\r\n addArtifact(selection: SmoSelection) { \r\n this.systemMap.addArtifact(selection);\r\n }\r\n /**\r\n * Try to find a selection on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n return this.systemMap.findArtifact(box);\r\n }\r\n /**\r\n * Try to find a modifier on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(box: SvgBox): ModifierTab[] {\r\n const rv:ModifierTab[] = [];\r\n const div = this.divIndex(box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div].forEach((modTab) => {\r\n if (SvgHelpers.doesBox1ContainBox2(modTab.box, box)) {\r\n rv.push(modTab);\r\n }\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n clearModifiers() { \r\n Object.keys(this.modifierTabDivs).forEach((key) => {\r\n const modifiers = this.modifierTabDivs[parseInt(key)];\r\n modifiers.forEach((mod) => {\r\n if (mod instanceof SmoTextGroup) {\r\n (mod as SmoTextGroup).elements.forEach((element) => {\r\n element.remove();\r\n });\r\n (mod as SmoTextGroup).elements = [];\r\n }\r\n });\r\n });\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Measure the bounding box of an element. Return the box as if the top of the first page were 0,0.\r\n * Bounding boxes are stored in absolute coordinates from the top of the first page. When rendering\r\n * elements, we adjust the coordinates for hte local page.\r\n * @param element \r\n * @returns \r\n */\r\n offsetBbox(element: SVGSVGElement): SvgBox {\r\n const yoff = this.box.y;\r\n const xoff = this.box.x;\r\n const lbox = element.getBBox();\r\n return ({ x: lbox.x + xoff, y: lbox.y + yoff, width: lbox.width, height: lbox.height });\r\n }\r\n /**\r\n * Adjust the bounding box to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgBox(box: SvgBox) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y, width: box.width, height: box.height };\r\n }\r\n /**\r\n * Adjust the point to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgPoint(box: SvgPoint) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y };\r\n }\r\n get svg(): SVGSVGElement {\r\n return this.getContext().svg as SVGSVGElement;\r\n }\r\n}\r\n/**\r\n * A container for all the SVG elements, and methods to manage adding and finding elements. Each\r\n * page of the score has its own SVG element.\r\n */\r\nexport class SvgPageMap {\r\n _layout: SmoGlobalLayout;\r\n _container: HTMLElement;\r\n _pageLayouts: SmoPageLayout[];\r\n vfRenderers: SvgPage[] = [];\r\n static get strokes(): Record {\r\n return {\r\n 'debug-mouse-box': {\r\n strokeName: 'debug-mouse',\r\n stroke: '#7ce',\r\n strokeWidth: 3,\r\n strokeDasharray: '1,1',\r\n fill: 'none',\r\n opacity: 0.6\r\n }\r\n };\r\n }\r\n containerOffset: SvgPoint = SvgPoint.default;\r\n /**\r\n * \r\n * @param layout - defines the page width/height and relative zoom common to all the pages\r\n * @param container - the parent DOM element that contains all the pages\r\n * @param pages - the layouts (margins, etc) for each pages.\r\n */\r\n constructor(layout: SmoGlobalLayout, container: HTMLElement, pages: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._container = container;\r\n this._pageLayouts = pages;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n /**\r\n * Update the offset of the music container DOM element, in client coordinates. This is used\r\n * when converting absolute screen coordinates (like from a mouse event) to SVG coordinates\r\n * @param scrollPoint \r\n */\r\n updateContainerOffset(scrollPoint: SvgPoint) {\r\n const rect = SvgHelpers.smoBox(this.container.getBoundingClientRect());\r\n this.containerOffset = { x: rect.x + scrollPoint.x, y: rect.y + scrollPoint.y };\r\n }\r\n get layout() {\r\n return this._layout;\r\n }\r\n get pageLayouts() {\r\n return this._pageLayouts;\r\n }\r\n get zoomScale() {\r\n return this.layout.zoomScale;\r\n }\r\n get renderScale() {\r\n return this.layout.svgScale;\r\n }\r\n get pageDivHeight() {\r\n return this.layout.pageHeight * this.zoomScale;\r\n }\r\n get pageDivWidth() {\r\n return this.layout.pageWidth * this.zoomScale;\r\n }\r\n get pageHeight() {\r\n return this.layout.pageHeight / this.layout.svgScale;\r\n }\r\n get pageWidth() {\r\n return this.layout.pageWidth / this.layout.svgScale;\r\n }\r\n get totalHeight() {\r\n return this.pageDivHeight * this.pageLayouts.length;\r\n }\r\n /**\r\n * create/re-create all the page SVG elements\r\n */\r\n createRenderers() {\r\n // $(this.container).html('');\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n const toRemove: HTMLElement[] = [];\r\n this.vfRenderers.forEach((renderer) => {\r\n const container = (renderer.svg as SVGSVGElement).parentElement;\r\n if (container) {\r\n toRemove.push(container);\r\n }\r\n });\r\n toRemove.forEach((tt) => {\r\n tt.remove();\r\n });\r\n this.vfRenderers = [];\r\n this.pageLayouts.forEach(() => {\r\n this.addPage();\r\n });\r\n }\r\n addPage() {\r\n const ix = this.vfRenderers.length;\r\n const container = document.createElement('div');\r\n container.setAttribute('id', 'smoosic-svg-div-' + ix.toString());\r\n this._container.append(container);\r\n const vexRenderer = new VF.Renderer(container, VF.Renderer.Backends.SVG);\r\n const svg = (vexRenderer.getContext() as any).svg as SVGSVGElement;\r\n SvgHelpers.svgViewport(svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n const topY = this.pageHeight * ix;\r\n const box = SvgHelpers.boxPoints(0, topY, this.pageWidth, this.pageHeight);\r\n this.vfRenderers.push(new SvgPage(vexRenderer, ix, box));\r\n }\r\n updateZoom(zoomScale: number) {\r\n this.layout.zoomScale = zoomScale;\r\n this.vfRenderers.forEach((pp) => {\r\n SvgHelpers.svgViewport(pp.svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n });\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n }\r\n\r\n /**\r\n * Convert from screen/client event to SVG space. We assume the scroll offset is already added to `box`\r\n * @param box \r\n * @returns \r\n */\r\n clientToSvg(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x - this.containerOffset.x) / cof;\r\n const y = (box.y - this.containerOffset.y) / cof;\r\n const logicalBox = SvgHelpers.boxPoints(x, y, Math.max(box.width / cof, 1), Math.max(box.height / cof, 1));\r\n logicalBox.y -= Math.round(logicalBox.y / this.layout.pageHeight) / this.layout.svgScale;\r\n if (layoutDebug.mask | layoutDebug.values['mouseDebug']) {\r\n layoutDebug.updateMouseDebug(box, logicalBox, this.containerOffset);\r\n }\r\n return logicalBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClient(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof) + this.containerOffset.x;\r\n const y = (box.y * cof) + this.containerOffset.y;\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClientNoOffset(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof);\r\n const y = (box.y * cof);\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n\r\n /**\r\n * Find a selection from a mouse event\r\n * @param box - location of a mouse event or specific screen coordinates\r\n * @returns \r\n */\r\n findArtifact(logicalBox: SvgBox): { selections: SmoSelection[], page: SvgPage} {\r\n const selections: SmoSelection[] = [];\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return { selections: page.findArtifact(logicalBox), page };\r\n }\r\n return { selections, page: this.vfRenderers[0] };\r\n }\r\n /**\r\n * Find any modifiers intersecting with `box`\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(logicalBox: SvgBox): ModifierTab[] {\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return page.findModifierTabs(logicalBox);\r\n }\r\n return [];\r\n }\r\n /**\r\n * add a rendered page to the page map\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return;\r\n }\r\n const page = this.getRenderer(selection.note.logicalBox);\r\n if (page) {\r\n page.addArtifact(selection);\r\n }\r\n }\r\n /**\r\n * add a rendered modifier to the page map\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const page = this.getRenderer(modifier.box);\r\n if (page) {\r\n page.addModifierTab(modifier);\r\n }\r\n }\r\n clearModifiersForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n this.vfRenderers[page].clearModifiers();\r\n }\r\n }\r\n /**\r\n * The number of pages is changing, remove the last page\r\n * @returns \r\n */\r\n removePage() {\r\n let i = 0;\r\n // Don't remove the only page\r\n if (this.vfRenderers.length < 2) {\r\n return;\r\n }\r\n\r\n // Remove last page div\r\n const elementId = 'smoosic-svg-div-' + (this.vfRenderers.length - 1).toString();\r\n const container = document.getElementById(elementId);\r\n if (container) {\r\n container.remove();\r\n }\r\n // pop last renderer off the stack.\r\n const renderers = [];\r\n const layouts = [];\r\n for (i = 0; i < this.vfRenderers.length - 1; ++i) {\r\n renderers.push(this.vfRenderers[i]);\r\n layouts.push(this.pageLayouts[i]);\r\n }\r\n this.vfRenderers = renderers;\r\n this._pageLayouts = layouts;\r\n\r\n // update page height\r\n const totalHeight = this.pageDivHeight * this.pageLayouts.length ;\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(totalHeight) + 'px');\r\n }\r\n /**\r\n * The score dimensions have changed, clear maps and recreate the pages.\r\n * @param layout \r\n * @param pageLayouts \r\n */\r\n updateLayout(layout: SmoGlobalLayout, pageLayouts: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._pageLayouts = pageLayouts;\r\n this.createRenderers();\r\n }\r\n /**\r\n * Return the page by index\r\n * @param page \r\n * @returns \r\n */\r\n getRendererForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n return this.vfRenderers[page];\r\n }\r\n return this.vfRenderers[this.vfRenderers.length - 1];\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param point \r\n * @returns \r\n */\r\n getRendererFromPoint(point: SvgPoint): SvgPage | null {\r\n const ix = Math.floor(point.y / (this.layout.pageHeight / this.layout.svgScale));\r\n if (ix < this.vfRenderers.length) {\r\n return this.vfRenderers[ix];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param box \r\n * @returns \r\n */\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage {\r\n const rv = this.getRendererFromPoint({ x: box.x, y: box.y });\r\n if (rv) {\r\n return rv;\r\n }\r\n return this.vfRenderers[0];\r\n }\r\n /**\r\n * Return the page based on the coordinates of a modifier\r\n * @param modifier \r\n * @returns \r\n */\r\n getRendererFromModifier(modifier?: Renderable) {\r\n let rv = this.vfRenderers[0];\r\n if (modifier && modifier.logicalBox) {\r\n const context = this.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n rv = context;\r\n }\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiInlineText, SuiTextBlock } from './textRender';\r\nimport { SuiRenderState } from './renderState';\r\nimport { SuiScroller } from './scroller';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { OutlineInfo, StrokeInfo, SvgHelpers } from './svgHelpers';\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgPage } from './svgPageMap';\r\nimport { SuiScoreViewOperations } from './scoreViewOperations';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic parameters to create a text editor\r\n * @param context Vex renderer context\r\n * @param scroller\r\n * @param x initial x position\r\n * @param y initial y position\r\n * @param text initial text\r\n */\r\nexport interface SuiTextEditorParams {\r\n pageMap: SvgPageMap,\r\n context: SvgPage,\r\n scroller: SuiScroller,\r\n x: number,\r\n y: number,\r\n text: string\r\n}\r\nexport interface SuiLyricEditorParams extends SuiTextEditorParams {\r\n lyric: SmoLyric\r\n}\r\n\r\nexport interface SuiTextSessionParams {\r\n scroller: SuiScroller;\r\n renderer: SuiRenderState;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport interface SuiLyricSessionParams {\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n verse: number;\r\n selector: SmoSelector;\r\n}\r\nexport type SuiTextStrokeName = 'text-suggestion' | 'text-selection' | 'text-highlight' | 'text-drag' | 'inactive-text';\r\n/**\r\n * The heirarchy of text editing objects goes:\r\n * \r\n * `dialog -> component -> session -> editor`\r\n * \r\n * Editors and Sessions are defined in this module.\r\n * ### editor\r\n * handles low-level events and renders the preview using one\r\n * of the text layout objects.\r\n * ### session\r\n * creates and destroys editors, e.g. for lyrics that have a Different\r\n * editor instance for each note.\r\n * \r\n * ## SuiTextEditor\r\n * The base text editor handles the positioning and inserting\r\n * of text blocks into the text area. The derived class shoud interpret key events.\r\n * A container class will manage the session for starting/stopping the editor\r\n * and retrieving the results into the target object.\r\n * */\r\nexport class SuiTextEditor {\r\n static get States(): Record {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n // parsers use this convention to represent text types (superscript)\r\n static textTypeToChar(textType: number): string {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n return '^';\r\n }\r\n if (textType === SuiInlineText.textTypes.subScript) {\r\n return '%';\r\n }\r\n return '';\r\n }\r\n\r\n static textTypeFromChar(char: string): number {\r\n if (char === '^') {\r\n return SuiInlineText.textTypes.superScript;\r\n }\r\n if (char === '%') {\r\n return SuiInlineText.textTypes.subScript;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n svgText: SuiInlineText | null = null;\r\n context: SvgPage;\r\n outlineInfo: OutlineInfo | null = null;\r\n pageMap: SvgPageMap;\r\n x: number = 0;\r\n y: number = 0;\r\n text: string;\r\n textPos: number = 0;\r\n selectionStart: number = -1;\r\n selectionLength: number = -1;\r\n empty: boolean = true;\r\n scroller: SuiScroller;\r\n suggestionIndex: number = -1;\r\n cursorState: boolean = false;\r\n cursorRunning: boolean = false;\r\n textType: number = SuiInlineText.textTypes.normal;\r\n fontWeight: string = 'normal';\r\n fontFamily: string = 'Merriweather';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.RUNNING;\r\n suggestionRect: OutlineInfo | null = null;\r\n constructor(params: SuiTextEditorParams) {\r\n this.scroller = params.scroller;\r\n this.context = params.context;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.text = params.text;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static get strokes(): Record {\r\n return {\r\n 'text-suggestion': {\r\n strokeName: 'text-suggestion',\r\n stroke: '#cce',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n 'text-selection': {\r\n strokeName: 'text-selection',\r\n stroke: '#99d',\r\n strokeWidth: 1,\r\n fill: 'none',\r\n strokeDasharray: '',\r\n opacity: 1.0\r\n }, \r\n 'text-highlight': {\r\n strokeName: 'text-highlight',\r\n stroke: '#dd9',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n }, \r\n 'text-drag': {\r\n strokeName: 'text-drag',\r\n stroke: '#d99',\r\n strokeWidth: 1,\r\n strokeDasharray: '2,1',\r\n fill: '#eee',\r\n opacity: 0.3\r\n },\r\n 'inactive-text': {\r\n strokeName: 'inactive-text',\r\n stroke: '#fff',\r\n strokeWidth: 1,\r\n strokeDasharray: '',\r\n fill: '#ddd',\r\n opacity: 0.3\r\n }\r\n };\r\n }\r\n\r\n // ### _suggestionParameters\r\n // Create the svg text outline parameters\r\n _suggestionParameters(box: SvgBox, strokeName: SuiTextStrokeName): OutlineInfo {\r\n const outlineStroke = SuiTextEditor.strokes[strokeName];\r\n if (!this.suggestionRect) {\r\n this.suggestionRect = {\r\n context: this.context, box, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n };\r\n this.suggestionRect.box = SvgHelpers.smoBox(box);\r\n return this.suggestionRect;\r\n }\r\n\r\n // ### _expandSelectionToSuggestion\r\n // Expand the selection to include the character the user clicked on.\r\n _expandSelectionToSuggestion() {\r\n if (this.suggestionIndex < 0) {\r\n return;\r\n }\r\n if (this.selectionStart < 0) {\r\n this._setSelectionToSugggestion();\r\n return;\r\n } else if (this.selectionStart > this.suggestionIndex) {\r\n const oldStart = this.selectionStart;\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = (oldStart - this.selectionStart) + this.selectionLength;\r\n } else if (this.selectionStart < this.suggestionIndex\r\n && this.selectionStart > this.selectionStart + this.selectionLength) {\r\n this.selectionLength = (this.suggestionIndex - this.selectionStart) + 1;\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _setSelectionToSugggestion\r\n // Set the selection to the character the user clicked on.\r\n _setSelectionToSugggestion() {\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = 1;\r\n this.suggestionIndex = -1;\r\n this._updateSelections();\r\n }\r\n\r\n rerender() {\r\n this.svgText?.unrender();\r\n this.svgText?.render();\r\n }\r\n // ### handleMouseEvent\r\n // Handle hover/click behavior for the text under edit.\r\n // Returns: true if the event was handled here\r\n handleMouseEvent(ev: any): boolean {\r\n let handled = false;\r\n if (this.svgText === null) {\r\n return false;\r\n }\r\n const clientBox = SvgHelpers.boxPoints(\r\n ev.clientX + this.scroller.scrollState.x,\r\n ev.clientY + this.scroller.scrollState.y, \r\n 1, 1);\r\n const logicalBox = this.pageMap.clientToSvg(clientBox);\r\n var blocks = this.svgText.getIntersectingBlocks(logicalBox);\r\n\r\n // The mouse is not over the text\r\n if (!blocks.length) {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n\r\n // If the user clicks and there was a previous selection, treat it as selected\r\n if (ev.type === 'click' && this.suggestionIndex >= 0) {\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n handled = true;\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n handled = true;\r\n // outline the text that is hovered. Since mouse is a point\r\n // there should only be 1\r\n blocks.forEach((block) => {\r\n SvgHelpers.outlineRect(this._suggestionParameters(block.box, 'text-suggestion'));\r\n this.suggestionIndex = block.index;\r\n });\r\n // if the user clicked on it, add it to the selection.\r\n if (ev.type === 'click') {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n const npos = this.selectionStart + this.selectionLength;\r\n if (npos >= 0 && npos <= this.svgText.blocks.length) {\r\n this.textPos = npos;\r\n }\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n\r\n // ### _serviceCursor\r\n // Flash the cursor as a background task\r\n _serviceCursor() {\r\n if (this.cursorState) {\r\n this.svgText?.renderCursorAt(this.textPos - 1, this.textType);\r\n } else {\r\n this.svgText?.removeCursor();\r\n }\r\n this.cursorState = !this.cursorState;\r\n }\r\n // ### _refreshCursor\r\n // If the text position changes, update the cursor position right away\r\n // don't wait for blink.\r\n _refreshCursor() {\r\n this.svgText?.removeCursor();\r\n this.cursorState = true;\r\n this._serviceCursor();\r\n }\r\n\r\n get _endCursorCondition(): boolean {\r\n return this.cursorRunning === false;\r\n }\r\n\r\n _cursorPreResolve() {\r\n this.svgText?.removeCursor();\r\n }\r\n\r\n _cursorPoll() {\r\n this._serviceCursor();\r\n }\r\n\r\n // ### startCursorPromise\r\n // Used by the calling logic to start the cursor.\r\n // returns a promise that can be pended when the editing ends.\r\n startCursorPromise(): Promise {\r\n var self = this;\r\n this.cursorRunning = true;\r\n this.cursorState = true;\r\n self.svgText?.renderCursorAt(this.textPos, SuiInlineText.textTypes.normal);\r\n return PromiseHelpers.makePromise(() => this._endCursorCondition, () => this._cursorPreResolve(), () => this._cursorPoll(), 333);\r\n }\r\n stopCursor() {\r\n this.cursorRunning = false;\r\n }\r\n\r\n // ### setTextPos\r\n // Set the text position within the editor space and update the cursor\r\n setTextPos(val: number) {\r\n this.textPos = val;\r\n this._refreshCursor();\r\n }\r\n // ### moveCursorRight\r\n // move cursor right within the block of text.\r\n moveCursorRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n if (this.textPos <= this.svgText.blocks.length) {\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n }\r\n // ### moveCursorRight\r\n // move cursor left within the block of text.\r\n moveCursorLeft() {\r\n if (this.textPos > 0) {\r\n this.setTextPos(this.textPos - 1);\r\n }\r\n }\r\n\r\n // ### moveCursorRight\r\n // highlight the text selections\r\n _updateSelections() {\r\n let i = 0;\r\n const end = this.selectionStart + this.selectionLength;\r\n const start = this.selectionStart;\r\n this.svgText?.blocks.forEach((block) => {\r\n const val = start >= 0 && i >= start && i < end;\r\n this.svgText!.setHighlight(block, val);\r\n ++i;\r\n });\r\n }\r\n\r\n // ### _checkGrowSelectionLeft\r\n // grow selection within the bounds\r\n _checkGrowSelectionLeft() {\r\n if (this.selectionStart > 0) {\r\n this.selectionStart -= 1;\r\n this.selectionLength += 1;\r\n }\r\n }\r\n // ### _checkGrowSelectionRight\r\n // grow selection within the bounds\r\n _checkGrowSelectionRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n const end = this.selectionStart + this.selectionLength;\r\n if (end < this.svgText.blocks.length) {\r\n this.selectionLength += 1;\r\n }\r\n }\r\n\r\n // ### growSelectionLeft\r\n // handle the selection keys\r\n growSelectionLeft() {\r\n if (this.selectionStart === -1) {\r\n this.moveCursorLeft();\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n } else if (this.textPos === this.selectionStart) {\r\n this.moveCursorLeft();\r\n this._checkGrowSelectionLeft();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### growSelectionRight\r\n // handle the selection keys\r\n growSelectionRight() {\r\n if (this.selectionStart === -1) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.moveCursorRight();\r\n } else if (this.selectionStart + this.selectionLength === this.textPos) {\r\n this._checkGrowSelectionRight();\r\n this.moveCursorRight();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _clearSelections\r\n // Clear selected text\r\n _clearSelections() {\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### deleteSelections\r\n // delete the selected blocks of text/glyphs\r\n deleteSelections() {\r\n let i = 0;\r\n const blockPos = this.selectionStart;\r\n for (i = 0; i < this.selectionLength; ++i) {\r\n this.svgText?.removeBlockAt(blockPos); // delete shifts blocks so keep index the same.\r\n }\r\n this.setTextPos(blockPos);\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### parseBlocks\r\n // THis can be overridden by the base class to create the correct combination\r\n // of text and glyph blocks based on the underlying text\r\n parseBlocks() {\r\n let i = 0;\r\n \r\n this.svgText = new SuiInlineText({\r\n context: this.context, startX: this.x, startY: this.y,\r\n fontFamily: this.fontFamily, fontSize: this.fontSize, fontWeight: this.fontWeight, scroller: this.scroller,\r\n purpose: SuiInlineText.textPurposes.edit,\r\n fontStyle: 'normal', pageMap: this.pageMap\r\n });\r\n for (i = 0; i < this.text.length; ++i) {\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = this.text[i]\r\n this.svgText.addTextBlockAt(i, def);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n // ### evKey\r\n // Handle key events that filter down to the editor\r\n async evKey(evdata: KeyEvent): Promise {\r\n const removeCurrent = () => {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n this.svgText.element = null;\r\n }\r\n }\r\n if (evdata.code === 'ArrowRight') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionRight();\r\n } else {\r\n this.moveCursorRight();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'ArrowLeft') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionLeft();\r\n } else {\r\n this.moveCursorLeft();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Backspace') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0) {\r\n this.selectionStart = this.textPos - 1;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Delete') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0 && this.svgText !== null && this.textPos < this.svgText.blocks.length) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.key.charCodeAt(0) >= 33 && evdata.key.charCodeAt(0) <= 126 && evdata.key.length === 1) {\r\n removeCurrent();\r\n const isPaste = evdata.ctrlKey && evdata.key === 'v';\r\n let text = evdata.key;\r\n if (isPaste) {\r\n text = await navigator.clipboard.readText();\r\n }\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport class SuiTextBlockEditor extends SuiTextEditor {\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiTextEditorParams) {\r\n super(params);\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.parseBlocks();\r\n }\r\n\r\n _highlightEditor() {\r\n if (this.svgText === null || this.svgText.blocks.length === 0) {\r\n return;\r\n }\r\n const bbox = this.svgText.getLogicalBox();\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (this.outlineInfo && this.outlineInfo.element) {\r\n this.outlineInfo.element.remove();\r\n }\r\n this.outlineInfo = {\r\n context: this.context, box: bbox, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n };\r\n SvgHelpers.outlineRect(this.outlineInfo);\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (evdata.key.charCodeAt(0) === 32) {\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n const rv = super.evKey(evdata);\r\n this._highlightEditor();\r\n return rv;\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n}\r\n\r\nexport class SuiLyricEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n parseBlocks() {\r\n let i = 0;\r\n const def = SuiInlineText.defaults;\r\n def.context = this.context;\r\n def.startX = this.x;\r\n def.startY = this.y;\r\n def.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(def);\r\n for (i = 0; i < this.text.length; ++i) {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = this.text[i];\r\n this.svgText.addTextBlockAt(i, blockP);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n lyric: SmoLyric;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.getText();\r\n if (params.lyric.isHyphenated()) {\r\n this.text += '-';\r\n }\r\n this.lyric = params.lyric;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n if (this.svgText !== null) {\r\n this.svgText.unrender();\r\n }\r\n }\r\n}\r\n\r\nexport class SuiChordEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n static get SymbolModifiers() {\r\n return {\r\n NONE: 1,\r\n SUBSCRIPT: 2,\r\n SUPERSCRIPT: 3\r\n };\r\n }\r\n\r\n // ### toTextTypeChar\r\n // Given an old text type and a desited new text type,\r\n // return what the new text type character should be\r\n static toTextTypeChar(oldTextType: number, newTextType: number): string {\r\n const tt = SuiInlineText.getTextTypeResult(oldTextType, newTextType);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n static toTextTypeTransition(oldTextType: number, result: number): string {\r\n const tt = SuiInlineText.getTextTypeTransition(oldTextType, result);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n setTextType(textType: number) {\r\n this.textType = textType;\r\n }\r\n\r\n // Handle the case where user changed super/subscript in the middle of the\r\n // string.\r\n _updateSymbolModifiers() {\r\n let change = this.textPos;\r\n let render = false;\r\n let i = 0;\r\n for (i = this.textPos; this.svgText !== null && i < this.svgText.blocks.length; ++i) {\r\n const block = this.svgText!.blocks[i];\r\n if (block.textType !== this.textType &&\r\n block.textType !== change) {\r\n change = block.textType;\r\n block.textType = this.textType;\r\n render = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (render) {\r\n this.rerender();\r\n }\r\n }\r\n _setSymbolModifier(char: string): boolean {\r\n if (['^', '%'].indexOf(char) < 0) {\r\n return false;\r\n }\r\n const currentTextType = this.textType;\r\n const transitionType = SuiTextEditor.textTypeFromChar(char);\r\n this.textType = SuiInlineText.getTextTypeResult(currentTextType, transitionType);\r\n this._updateSymbolModifiers();\r\n return true;\r\n }\r\n\r\n parseBlocks() {\r\n let readGlyph = false;\r\n let curGlyph = '';\r\n let blockIx = 0; // so we skip modifier characters\r\n let i = 0;\r\n const params = SuiInlineText.defaults;\r\n params.context = this.context;\r\n params.startX = this.x;\r\n params.startY = this.y;\r\n params.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(params);\r\n\r\n for (i = 0; i < this.text.length; ++i) {\r\n const char = this.text[i];\r\n const isSymbolModifier = this._setSymbolModifier(char);\r\n if (char === '@') {\r\n if (!readGlyph) {\r\n readGlyph = true;\r\n curGlyph = '';\r\n } else {\r\n this._addGlyphAt(blockIx, curGlyph);\r\n blockIx += 1;\r\n readGlyph = false;\r\n }\r\n } else if (!isSymbolModifier) {\r\n if (readGlyph) {\r\n curGlyph = curGlyph + char;\r\n } else {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = char;\r\n blockP.textType = this.textType;\r\n this.svgText.addTextBlockAt(blockIx, blockP);\r\n blockIx += 1;\r\n }\r\n }\r\n this.empty = false;\r\n }\r\n this.textPos = blockIx;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n // ### getText\r\n // Get the text value that we persist\r\n getText(): string {\r\n if (this.svgText === null || this.svgText.blocks.length < 1) {\r\n return '';\r\n }\r\n let text = '';\r\n let textType = this.svgText.blocks[0].textType;\r\n this.svgText.blocks.forEach((block) => {\r\n if (block.textType !== textType) {\r\n text += SuiChordEditor.toTextTypeTransition(textType, block.textType);\r\n textType = block.textType;\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n text += '@' + block.glyphCode + '@';\r\n } else {\r\n text += block.text;\r\n }\r\n });\r\n return text;\r\n }\r\n\r\n _addGlyphAt(ix: number, code: string) {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.glyphCode = code;\r\n blockP.textType = this.textType;\r\n this.svgText?.addGlyphBlockAt(ix, blockP);\r\n this.textPos += 1;\r\n }\r\n unrender() {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n }\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this._setSymbolModifier(evdata.key)) {\r\n return true;\r\n }\r\n // Dialog gives us a specific glyph code\r\n if (evdata.key[0] === '@' && evdata.key.length > 2) {\r\n this.unrender();\r\n const glyph = evdata.key.substr(1, evdata.key.length - 2);\r\n this._addGlyphAt(this.textPos, getChordSymbolGlyphFromCode(glyph));\r\n this.rerender();\r\n edited = true;\r\n } else if (VF.ChordSymbol.glyphs[evdata.key[0]]) { // glyph shortcut like 'b'\r\n this.unrender();\r\n // hack: vexflow 5 broke this\r\n this._addGlyphAt(this.textPos, evdata.key[0]);\r\n this.rerender();\r\n edited = true;\r\n } else {\r\n // some ordinary key\r\n edited = await super.evKey(evdata);\r\n }\r\n if (this.svgText !== null && this.svgText.blocks.length > this.textPos && this.textPos >= 0) {\r\n this.textType = this.svgText.blocks[this.textPos].textType;\r\n }\r\n return edited;\r\n }\r\n lyric: SmoLyric;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.text;\r\n this.lyric = params.lyric;\r\n this.textType = SuiInlineText.textTypes.normal;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n}\r\nexport interface SuiDragSessionParams {\r\n context: SvgPageMap;\r\n scroller: SuiScroller;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport class SuiDragSession {\r\n pageMap: SvgPageMap;\r\n page: SvgPage;\r\n scroller: SuiScroller;\r\n outlineBox: SvgBox;\r\n textObject: SuiTextBlock;\r\n dragging: boolean = false;\r\n outlineRect: OutlineInfo | null = null;\r\n textGroup: SmoTextGroup;\r\n constructor(params: SuiDragSessionParams) {\r\n this.textGroup = params.textGroup;\r\n this.pageMap = params.context;\r\n this.scroller = params.scroller;\r\n this.page = this.pageMap.getRendererFromModifier(this.textGroup);\r\n // create a temporary text object for dragging\r\n this.textObject = SuiTextBlock.fromTextGroup(this.textGroup, this.page, this.pageMap, this.scroller); // SuiTextBlock\r\n this.dragging = false;\r\n this.outlineBox = this.textObject.getLogicalBox();\r\n }\r\n\r\n _outlineBox() {\r\n const outlineStroke = SuiTextEditor.strokes['text-drag'];\r\n const x = this.outlineBox.x - this.page.box.x;\r\n const y = this.outlineBox.y - this.page.box.y;\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: this.page, \r\n box: SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n unrender() {\r\n this.textGroup.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.textGroup.elements = [];\r\n this.textObject.unrender();\r\n }\r\n scrolledClientBox(x: number, y: number) {\r\n return { x: x + this.scroller.scrollState.x, y: y + this.scroller.scrollState.y, width: 1, height: 1 };\r\n }\r\n checkBounds() {\r\n if (this.outlineBox.y < this.outlineBox.height) {\r\n this.outlineBox.y = this.outlineBox.height;\r\n }\r\n if (this.outlineBox.x < 0) {\r\n this.outlineBox.x = 0;\r\n }\r\n if (this.outlineBox.x > this.page.box.x + this.page.box.width - this.outlineBox.width) {\r\n this.outlineBox.x = this.page.box.x + this.page.box.width - this.outlineBox.width;\r\n }\r\n if (this.outlineBox.y > this.page.box.y + this.page.box.height) {\r\n this.outlineBox.y = this.page.box.y + this.page.box.height;\r\n }\r\n }\r\n startDrag(e: any) {\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'start');\r\n }\r\n if (!SvgHelpers.doesBox1ContainBox2(this.outlineBox, svgMouseBox)) {\r\n return;\r\n }\r\n this.dragging = true;\r\n this.outlineBox = svgMouseBox;\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.unrender();\r\n this.checkBounds();\r\n this._outlineBox();\r\n }\r\n\r\n mouseMove(e: any) {\r\n if (!this.dragging) {\r\n return;\r\n }\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n this.outlineBox = SvgHelpers.smoBox(svgMouseBox);\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.checkBounds();\r\n\r\n this.textObject.offsetStartX(this.outlineBox.x - currentBox.x);\r\n this.textObject.offsetStartY(this.outlineBox.y - currentBox.y);\r\n this.textObject.render();\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'drag');\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n this._outlineBox();\r\n }\r\n\r\n endDrag() {\r\n // this.textObject.render();\r\n const newBox = this.textObject.getLogicalBox();\r\n const curBox = this.textGroup.logicalBox ?? SvgBox.default;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(curBox, newBox, 'end');\r\n }\r\n this.textGroup.offsetX(newBox.x - curBox.x);\r\n this.textGroup.offsetY(newBox.y - curBox.y + this.outlineBox.height);\r\n this.dragging = false;\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n }\r\n}\r\n\r\n// ## SuiTextSession\r\n// session for editing plain text\r\nexport class SuiTextSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n scroller: SuiScroller;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n fontFamily: string = '';\r\n fontWeight: string = '';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n editor: SuiTextBlockEditor | null = null;\r\n renderer: SuiRenderState;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiTextSessionParams) {\r\n this.scroller = params.scroller;\r\n this.renderer = params.renderer;\r\n this.scoreText = params.scoreText;\r\n this.text = this.scoreText.text;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.textGroup = params.textGroup;\r\n this.renderer = params.renderer;\r\n\r\n // Create a text group if one was not a startup parameter\r\n if (!this.textGroup) {\r\n this.textGroup = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n // Create a scoreText if one was not a startup parameter, or\r\n // get it from the text group\r\n if (!this.scoreText) {\r\n if (this.textGroup && this.textGroup.textBlocks.length) {\r\n this.scoreText = this.textGroup.textBlocks[0].text;\r\n } else {\r\n const stDef = SmoScoreText.defaults;\r\n stDef.x = this.x;\r\n stDef.y = this.y;\r\n this.scoreText = new SmoScoreText(stDef);\r\n this.textGroup.addScoreText(this.scoreText, SmoTextGroup.relativePositions.RIGHT);\r\n }\r\n }\r\n this.fontFamily = SmoScoreText.familyString(this.scoreText.fontInfo.family);\r\n this.fontWeight = SmoScoreText.weightString(this.scoreText.fontInfo.weight);\r\n this.fontSize = SmoScoreText.fontPointSize(this.scoreText.fontInfo.size);\r\n this.text = this.scoreText.text;\r\n }\r\n\r\n // ### _isRefreshed\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.dirty === false;\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.passState === SuiRenderState.passStates.clean;\r\n }\r\n\r\n _removeScoreText() {\r\n const selector = '#' + this.scoreText.attrs.id;\r\n $(selector).remove();\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n const context = this.renderer.pageMap.getRenderer({ x: this.x, y: this.y });\r\n if (context) {\r\n this.editor = new SuiTextBlockEditor({\r\n x: this.x, y: this.y, scroller: this.scroller,\r\n context: context, text: this.scoreText.text, pageMap: this.renderer.pageMap\r\n });\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this._removeScoreText();\r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n stopSession(): Promise {\r\n if (this.editor) {\r\n this.scoreText.text = this.editor.getText();\r\n this.scoreText.tryParseUnicode(); // convert unicode chars\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(()=> this._isRendered,() => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return false;\r\n }\r\n const rv = await this.editor.evKey(evdata);\r\n if (rv) {\r\n this._removeScoreText();\r\n }\r\n return rv;\r\n }\r\n\r\n handleMouseEvent(ev: any) {\r\n if (this.isRunning && this.editor !== null) {\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n }\r\n}\r\n// ## SuiLyricSession\r\n// Manage editor for lyrics, jupmping from note to note if asked\r\nexport class SuiLyricSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n parser: number;\r\n verse: number;\r\n selector: SmoSelector;\r\n selection: SmoSelection | null;\r\n note: SmoNote | null = null;\r\n originalText: string;\r\n lyric: SmoLyric | null = null;\r\n text: string = '';\r\n editor: SuiLyricEditor | null = null;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n this.score = params.score;\r\n this.renderer = params.renderer;\r\n this.scroller = params.scroller;\r\n this.view = params.view;\r\n this.parser = SmoLyric.parsers.lyric;\r\n this.verse = params.verse;\r\n this.selector = params.selector;\r\n this.selection = SmoSelection.noteFromSelector(this.score, this.selector);\r\n if (this.selection !== null) {\r\n this.note = this.selection.note;\r\n }\r\n this.originalText = '';\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (!this.note) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, SmoLyric.parsers.lyric);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'lyrics');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const lyricD = SmoLyric.defaults;\r\n lyricD.text = '';\r\n lyricD.verse = this.verse;\r\n lyricD.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(lyricD);\r\n }\r\n this.text = this.lyric.text;\r\n this.originalText = this.text;\r\n // this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n\r\n // ### _endLyricCondition\r\n // Lyric editor has stopped running (promise condition)\r\n get _endLyricCondition(): boolean {\r\n return this.editor !== null && this.editor.state !== SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _endLyricCondition\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.renderStateRendered;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.renderStateClean;\r\n }\r\n\r\n get _pendingEditor(): boolean {\r\n return this.state !== SuiTextEditor.States.PENDING_EDITOR;\r\n }\r\n\r\n // ### _hideLyric\r\n // Hide the lyric so you only see the editor.\r\n _hideLyric() {\r\n if (this.lyric !== null && this.lyric.selector) {\r\n $(this.lyric.selector).remove();\r\n }\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.note.logicalBox.y + this.note.logicalBox.height + \r\n SmoScoreText.fontPointSize(this.lyric.fontInfo.size);\r\n this.lyric.skipRender = true;\r\n const lyricRendered = this.lyric.text.length > 0;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n const context = this.view.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiLyricEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (!lyricRendered && this.editor !== null && this.editor.svgText !== null) {\r\n const delta = 2 * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric();\r\n \r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n this._setLyricForNote();\r\n this._startSessionForNote();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n async stopSession() {\r\n if (this.editor && !this._endLyricCondition) {\r\n await this._updateLyricFromEditor();\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(() => this._isRendered, () => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### _advanceSelection\r\n // Based on a skip character, move the editor forward/back one note.\r\n async _advanceSelection(isShift: boolean) {\r\n const nextSelection = isShift ? SmoSelection.lastNoteSelectionFromSelector(this.score, this.selector)\r\n : SmoSelection.nextNoteSelectionFromSelector(this.score, this.selector);\r\n if (nextSelection) {\r\n this.selector = nextSelection.selector;\r\n this.selection = nextSelection;\r\n this.note = nextSelection.note;\r\n this._setLyricForNote();\r\n const conditionArray: any = [];\r\n this.state = SuiTextEditor.States.PENDING_EDITOR;\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._endLyricCondition, null, null, 100));\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._isRefreshed,() => this._startSessionForNote(), null, 100));\r\n await PromiseHelpers.promiseChainThen(conditionArray);\r\n }\r\n }\r\n\r\n // ### advanceSelection\r\n // external interfoace to move to next/last note\r\n async advanceSelection(isShift: boolean) {\r\n if (this.isRunning) {\r\n await this._updateLyricFromEditor();\r\n await this._advanceSelection(isShift);\r\n }\r\n }\r\n\r\n async removeLyric() {\r\n if (this.selection && this.lyric) {\r\n await this.view.removeLyric(this.selection.selector, this.lyric);\r\n this.lyric.skipRender = true;\r\n await this.advanceSelection(false);\r\n }\r\n }\r\n\r\n // ### _updateLyricFromEditor\r\n // The editor is done running, so update the lyric now.\r\n async _updateLyricFromEditor() {\r\n if (this.editor === null || this.lyric === null) {\r\n return;\r\n }\r\n const txt = this.editor.getText();\r\n this.lyric.setText(txt);\r\n this.lyric.skipRender = false;\r\n this.editor.stopEditor();\r\n if (!this.lyric.deleted && this.originalText !== txt && this.selection !== null) {\r\n await this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n }\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.key === '-' || evdata.key === ' ') {\r\n // skip\r\n const back = evdata.shiftKey && evdata.key === ' ';\r\n if (evdata.key === '-' && this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n }\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(back);\r\n } else if (this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n this._hideLyric();\r\n }\r\n return true;\r\n }\r\n get textType(): number {\r\n if (this.isRunning && this.editor !== null) {\r\n return this.editor.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n\r\n set textType(type) {\r\n if (this.editor) {\r\n this.editor.textType = type;\r\n }\r\n }\r\n // ### handleMouseEvent\r\n // Mouse event (send to editor)\r\n handleMouseEvent(ev: any) {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return;\r\n }\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n}\r\n\r\nexport class SuiChordSession extends SuiLyricSession {\r\n editor: SuiLyricEditor | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n super(params);\r\n this.parser = SmoLyric.parsers.chord;\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.code === 'Enter') {\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(evdata.shiftKey);\r\n edited = true;\r\n } else if (this.editor !== null) {\r\n edited = await this.editor.evKey(evdata);\r\n }\r\n this._hideLyric();\r\n return edited;\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (this.note === null) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, this.parser);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'chords');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const ldef = SmoLyric.defaults;\r\n ldef.text = '';\r\n ldef.verse = this.verse;\r\n ldef.parser = this.parser;\r\n ldef.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(ldef);\r\n this.note.addLyric(this.lyric);\r\n }\r\n this.text = this.lyric.text;\r\n }\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null) {\r\n return;\r\n }\r\n if (this.selection === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.selection.measure.svg.logicalBox.y;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n this.selection.measure.svg.logicalBox.y + this.selection.measure.svg.logicalBox.height - 70;\r\n const context = this.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiChordEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (this.editor !== null && this.editor.svgText !== null) {\r\n const delta = (-1) * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric(); \r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, OutlineInfo } from './svgHelpers';\r\nimport { SmoTextGroup, SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiTextEditor } from './textEdit';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoAttrs, SvgBox, getId } from '../../smo/data/common';\r\nimport { SvgPage, SvgPageMap } from './svgPageMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { VexFlow,\r\n chordSubscriptOffset, chordSuperscriptOffset, FontInfo, getVexGlyphFromChordCode, \r\n getChordSymbolMetricsForGlyph, blockMetricsYShift } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n\r\n// From textfont.ts in VF\r\n\r\n/**\r\n * parameters to render text\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineTextParams {\r\n fontFamily: string,\r\n fontWeight: string,\r\n fontSize: number,\r\n fontStyle: string,\r\n startX: number,\r\n startY: number,\r\n scroller: SuiScroller,\r\n purpose: string,\r\n context: SvgPage,\r\n pageMap: SvgPageMap\r\n}\r\n/**\r\n * metrics for a single line of text. A textGroup can be composed\r\n * of multiple inline blocks.\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineBlock {\r\n symbolType: number,\r\n textType: number,\r\n highlighted: boolean,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n scale: number,\r\n metrics: any,\r\n glyph: any,\r\n glyphCode: string,\r\n text: string\r\n}\r\nexport interface SuiInlineArtifact {\r\n block: SuiInlineBlock,\r\n box: SvgBox,\r\n index: number\r\n}\r\n// ## textRender.js\r\n// Classes responsible for formatting and rendering text in SVG space.\r\n\r\n/**\r\n * Inline text is a block of SVG text with the same font. Each block can\r\n * contain either text or an svg (vex) glyph. Each block in the text has its own\r\n * metrics so we can support inline svg text editors (cursor).\r\n * @category SuiRender\r\n */\r\nexport class SuiInlineText {\r\n static get textTypes() {\r\n return { normal: 0, superScript: 1, subScript: 2 };\r\n }\r\n static get symbolTypes() {\r\n return {\r\n GLYPH: 1,\r\n TEXT: 2,\r\n LINE: 3\r\n };\r\n }\r\n static get textPurposes(): Record {\r\n return {render: 'sui-inline-render', edit: 'sui-inline-edit' };\r\n }\r\n\r\n // ### textTypeTransitions\r\n // Given a current text type and a type change request, what is the result\r\n // text type? This truth table tells you.\r\n static get textTypeTransitions(): number[][] {\r\n return [\r\n [1, 1, 0],\r\n [1, 0, 1],\r\n [1, 2, 2],\r\n [2, 2, 0],\r\n [2, 0, 2],\r\n [2, 1, 1],\r\n [0, 1, 1],\r\n [0, 0, 0],\r\n [0, 2, 2]\r\n ];\r\n }\r\n\r\n static getTextTypeResult(oldType: number, newType: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[1] === newType) {\r\n rv = tt[2];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n static getTextTypeTransition(oldType: number, result: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[2] === result) {\r\n rv = tt[1];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n get spacing(): number {\r\n return VF.ChordSymbol.spacingBetweenBlocks;\r\n }\r\n\r\n static get defaults(): SuiInlineTextParams {\r\n return JSON.parse(JSON.stringify({\r\n blocks: [],\r\n fontFamily: 'Merriweather',\r\n fontSize: 14,\r\n startX: 100,\r\n startY: 100,\r\n fontWeight: 500,\r\n fontStyle: 'normal',\r\n scale: 1,\r\n activeBlock: -1,\r\n artifacts: [],\r\n purpose: 'render',\r\n classes: '',\r\n updatedMetrics: false\r\n }));\r\n }\r\n fontFamily: string;\r\n fontWeight: string;\r\n fontStyle: string;\r\n fontSize: number;\r\n width: number = -1;\r\n height: number = -1;\r\n purpose: string;\r\n\r\n attrs: SmoAttrs;\r\n textFont: TextFormatter;\r\n startX: number;\r\n startY: number;\r\n blocks: SuiInlineBlock[] = [];\r\n updatedMetrics: boolean = false;\r\n context: SvgPage;\r\n pageMap: SvgPageMap;\r\n scroller: SuiScroller;\r\n artifacts: SuiInlineArtifact[] = [];\r\n logicalBox: SvgBox = SvgBox.default;\r\n element: SVGSVGElement | null = null;\r\n\r\n updateFontInfo(): TextFormatter {\r\n const tf = TextFormatter.create({\r\n family: this.fontFamily,\r\n weight: this.fontWeight,\r\n size: this.fontSize,\r\n style: this.fontStyle\r\n });\r\n return tf;\r\n }\r\n // ### constructor just creates an empty svg\r\n constructor(params: SuiInlineTextParams) {\r\n this.fontFamily = params.fontFamily;\r\n this.fontWeight = params.fontWeight;\r\n this.fontStyle = params.fontStyle;\r\n this.fontSize = params.fontSize;\r\n this.textFont = this.updateFontInfo();\r\n this.scroller = params.scroller;\r\n this.startX = params.startX;\r\n this.startY = params.startY;\r\n this.purpose = params.purpose;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SuiInlineText'\r\n };\r\n this.context = params.context;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static fromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiInlineText {\r\n \r\n const params: SuiInlineTextParams = {\r\n fontFamily: SmoScoreText.familyString(scoreText.fontInfo.family),\r\n fontWeight: SmoScoreText.weightString(scoreText.fontInfo.weight),\r\n fontStyle: scoreText.fontInfo.style ?? 'normal',\r\n startX: scoreText.x, startY: scoreText.y,\r\n scroller,\r\n purpose: SuiInlineText.textPurposes.render,\r\n fontSize: SmoScoreText.fontPointSize(scoreText.fontInfo.size), context,\r\n pageMap\r\n };\r\n const rv = new SuiInlineText(params);\r\n rv.attrs.id = scoreText.attrs.id;\r\n const blockParams = SuiInlineText.blockDefaults;\r\n blockParams.text = scoreText.text;\r\n rv.addTextBlockAt(0, blockParams);\r\n return rv;\r\n }\r\n\r\n static get blockDefaults(): SuiInlineBlock {\r\n return JSON.parse(JSON.stringify({\r\n symbolType: SuiInlineText.symbolTypes.TEXT,\r\n textType: SuiInlineText.textTypes.normal,\r\n highlighted: false,\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n scale: 1.0,\r\n glyph: {},\r\n text: '',\r\n glyphCode: ''\r\n }));\r\n }\r\n\r\n // ### pointsToPixels\r\n // The font size is specified in points, convert to 'pixels' in the svg space\r\n get pointsToPixels(): number {\r\n return this.textFont.fontSizeInPixels;\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.startX += offset;\r\n this.blocks.forEach((block) => {\r\n block.x += offset;\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.startY += offset;\r\n this.blocks.forEach((block) => {\r\n block.y += offset;\r\n });\r\n }\r\n maxFontHeight(scale: number): number {\r\n return this.textFont.maxHeight * scale;\r\n }\r\n\r\n _glyphOffset(block: SuiInlineBlock): number {\r\n return blockMetricsYShift(block.glyph.getMetrics()) * this.pointsToPixels * block.scale;\r\n }\r\n\r\n /**\r\n * Based on the font metrics, compute the width of the strings and glyph that make up\r\n * this block\r\n */\r\n _calculateBlockIndex() {\r\n var curX = this.startX;\r\n var maxH = 0;\r\n let superXAlign = 0;\r\n let superXWidth = 0;\r\n let prevBlock: SuiInlineBlock | null = null;\r\n let i = 0;\r\n this.textFont.setFontSize(this.fontSize);\r\n this.blocks.forEach((block) => {\r\n // super/subscript\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n\r\n block.width = 0;\r\n block.height = 0;\r\n\r\n // coeff for sub/super script\r\n const subAdj = (sp || sub) ? VF.ChordSymbol.superSubRatio : 1.0;\r\n // offset for super/sub\r\n let subOffset = 0;\r\n if (sp) {\r\n subOffset = chordSuperscriptOffset() * this.pointsToPixels;\r\n } else if (sub) {\r\n subOffset = chordSubscriptOffset() * this.pointsToPixels;\r\n } else {\r\n subOffset = 0;\r\n }\r\n block.x = curX;\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n for (i = 0; i < block.text.length; ++i) {\r\n const ch = block.text[i];\r\n const glyph = this.textFont.getGlyphMetrics(ch);\r\n block.width += ((glyph.advanceWidth ?? 0) / this.textFont.getResolution()) * this.pointsToPixels * block.scale * subAdj;\r\n const blockHeight = (glyph.ha / this.textFont.getResolution()) * this.pointsToPixels * block.scale;\r\n block.height = block.height < blockHeight ? blockHeight : block.height;\r\n block.y = this.startY + (subOffset * block.scale);\r\n }\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n // TODO: vexflow broke leftSideBearing and advanceWidth\r\n // vex5\r\n /*\r\n block.width = (block.glyph.getMetrics().width) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.getMetrics().ha) * this.pointsToPixels * block.scale;\r\n block.x += block.glyph.getMetrics().xMin * this.pointsToPixels * block.scale;\r\n */\r\n block.width = (block.metrics.advanceWidth / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.metrics.ha / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale; \r\n block.x += block.metrics.leftSideBearing / VF.ChordSymbol.engravingFontResolution * this.pointsToPixels * block.scale;\r\n block.y = this.startY + this._glyphOffset(block) + subOffset;\r\n }\r\n // Line subscript up with super if the follow each other\r\n if (sp) {\r\n if (superXAlign === 0) {\r\n superXAlign = block.x;\r\n }\r\n } else if (sub) {\r\n if (superXAlign > 0 && prevBlock !== null) {\r\n block.x = superXAlign;\r\n superXWidth = prevBlock.x + prevBlock.width;\r\n curX = superXAlign;\r\n superXAlign = 0;\r\n } else {\r\n if (superXWidth > 0 && superXWidth < block.width + block.x) {\r\n superXWidth = block.width + block.x;\r\n }\r\n }\r\n } else if (superXWidth > 0) {\r\n block.x = superXWidth + VF.ChordSymbol.spacingBetweenBlocks;\r\n superXWidth = 0;\r\n } else {\r\n superXAlign = 0;\r\n }\r\n curX += block.width;\r\n maxH = block.height > maxH ? maxH : block.height;\r\n prevBlock = block;\r\n });\r\n this.width = curX - this.startX;\r\n this.height = maxH;\r\n this.updatedMetrics = true;\r\n }\r\n\r\n // ### getLogicalBox\r\n // return the calculated svg metrics. In SMO parlance the\r\n // logical box is in SVG space, 'renderedBox' is in client space.\r\n getLogicalBox(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const adjBox = (box: SvgBox) => {\r\n const nbox = SvgHelpers.smoBox(box);\r\n nbox.y = nbox.y - nbox.height;\r\n return nbox;\r\n };\r\n this.blocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = SvgHelpers.smoBox(adjBox(block));\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, adjBox(block));\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### renderCursorAt\r\n // When we are using textLayout to render editor, create a cursor that adjusts it's size\r\n renderCursorAt(position: number, textType: number) {\r\n let adjH = 0;\r\n let adjY = 0;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const group = this.context.getContext().openGroup();\r\n group.id = 'inlineCursor';\r\n const h = this.fontSize;\r\n if (this.blocks.length <= position || position < 0) {\r\n const x = this.startX - this.context.box.x;\r\n const y = this.startY - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y - h, h);\r\n this.context.getContext().closeGroup();\r\n return;\r\n }\r\n const block = this.blocks[position];\r\n adjH = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? h / 2 : h;\r\n // For glyph, add y adj back to the cursor since it's not a glyph\r\n adjY = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? block.y - this._glyphOffset(block) :\r\n block.y;\r\n if (typeof (textType) === 'number' && textType !== SuiInlineText.textTypes.normal) {\r\n const ratio = textType !== SuiInlineText.textTypes.normal ? VF.ChordSymbol.superSubRatio : 1.0;\r\n adjH = adjH * ratio;\r\n if (textType !== block.textType) {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n adjY -= h / 2;\r\n } else {\r\n adjY += h / 2;\r\n }\r\n }\r\n }\r\n const x = block.x + block.width - this.context.box.x;\r\n const y = adjY - (adjH * block.scale) - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y, adjH * block.scale);\r\n this.context.getContext().closeGroup();\r\n }\r\n removeCursor() {\r\n $('svg #inlineCursor').remove();\r\n }\r\n unrender() {\r\n this.element?.remove();\r\n this.element = null;\r\n }\r\n getIntersectingBlocks(box: SvgBox): SuiInlineArtifact[] {\r\n if (!this.artifacts) {\r\n return [];\r\n }\r\n return SvgHelpers.findIntersectingArtifact(box, this.artifacts) as SuiInlineArtifact[];\r\n }\r\n _addBlockAt(position: number, block: SuiInlineBlock) {\r\n if (position >= this.blocks.length) {\r\n this.blocks.push(block);\r\n } else {\r\n this.blocks.splice(position, 0, block);\r\n }\r\n }\r\n removeBlockAt(position: number) {\r\n this.blocks.splice(position, 1);\r\n this.updatedMetrics = false;\r\n }\r\n\r\n // ### addTextBlockAt\r\n // Add a text block to the line of text.\r\n // params must contain at least:\r\n // {text:'xxx'}\r\n addTextBlockAt(position: number, params: SuiInlineBlock) {\r\n const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1;\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n _getGlyphBlock(params: SuiInlineBlock): SuiInlineBlock {\r\n // vex 5\r\n /* const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n params.text = params.glyphCode;\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1; */\r\n const block = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n block.symbolType = SuiInlineText.symbolTypes.GLYPH;\r\n\r\n block.glyphCode = params.glyphCode;\r\n const vexCode = getVexGlyphFromChordCode(block.glyphCode);\r\n block.glyph = new VF.Glyph(vexCode, this.fontSize);\r\n // Vex 4 feature, vex 5 elimitated metrics here\r\n block.metrics = getChordSymbolMetricsForGlyph(vexCode);\r\n block.scale = (params.textType && params.textType !== SuiInlineText.textTypes.normal) ?\r\n 2 * VF.ChordSymbol.superSubRatio : 2;\r\n\r\n block.textType = params.textType ? params.textType : SuiInlineText.textTypes.normal;\r\n\r\n block.glyph.scale = block.glyph.scale * block.scale;\r\n return block;\r\n }\r\n // ### addGlyphBlockAt\r\n // Add a glyph block to the line of text. Params must include:\r\n // {glyphCode:'csymDiminished'}\r\n addGlyphBlockAt(position: number, params: SuiInlineBlock) {\r\n const block = this._getGlyphBlock(params);\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n isSuperscript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.superScript;\r\n }\r\n isSubcript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.subScript;\r\n }\r\n getHighlight(block: SuiInlineBlock): boolean {\r\n return block.highlighted;\r\n }\r\n setHighlight(block: SuiInlineBlock, value: boolean) {\r\n block.highlighted = value;\r\n }\r\n\r\n rescale(scale: number) {\r\n scale = (scale * this.fontSize < 6) ? 6 / this.fontSize : scale;\r\n scale = (scale * this.fontSize > 72) ? 72 / this.fontSize : scale;\r\n this.blocks.forEach((block) => {\r\n block.scale = scale;\r\n });\r\n this.updatedMetrics = false;\r\n }\r\n\r\n render() {\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n\r\n this.context.getContext().setFont({\r\n family: this.fontFamily, size: this.fontSize, weight: this.fontWeight, style: this.fontStyle\r\n });\r\n const group = this.context.getContext().openGroup();\r\n this.element = group;\r\n const mmClass = 'suiInlineText';\r\n let ix = 0;\r\n group.classList.add('vf-' + this.attrs.id);\r\n group.classList.add(this.attrs.id);\r\n group.classList.add(mmClass);\r\n group.classList.add(this.purpose);\r\n group.id = this.attrs.id;\r\n this.artifacts = [];\r\n\r\n this.blocks.forEach((block) => {\r\n var bg = this.context.getContext().openGroup();\r\n bg.classList.add('textblock-' + this.attrs.id + ix);\r\n this._drawBlock(block);\r\n this.context.getContext().closeGroup();\r\n const artifact: SuiInlineArtifact = { block, box: SvgBox.default, index: 0 };\r\n artifact.box = this.context.offsetBbox(bg);\r\n artifact.index = ix;\r\n this.artifacts.push(artifact);\r\n ix += 1;\r\n });\r\n this.context.getContext().closeGroup();\r\n this.logicalBox = this.context.offsetBbox(group);\r\n }\r\n\r\n _drawBlock(block: SuiInlineBlock) {\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n const highlight = this.getHighlight(block);\r\n const y = block.y - this.context.box.y; // relative y into page\r\n\r\n if (highlight) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFillStyle('#999');\r\n }\r\n\r\n // This is how svgcontext expects to get 'style'\r\n const weight = this.fontWeight;\r\n const style = this.fontStyle;\r\n const family = this.fontFamily;\r\n if (sp || sub) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFont({\r\n family, size: this.fontSize * VF.ChordSymbol.superSubRatio * block.scale, weight, style\r\n });\r\n } else {\r\n this.context.getContext().setFont({ family, size: this.fontSize * block.scale, weight, style });\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n this.context.getContext().fillText(block.text, block.x, y);\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n block.glyph.render(this.context.getContext(), block.x, y);\r\n }\r\n if (sp || sub) {\r\n this.context.getContext().restore();\r\n }\r\n if (highlight) {\r\n this.context.getContext().restore();\r\n }\r\n }\r\n\r\n getText(): string {\r\n let rv = '';\r\n this.blocks.forEach((block) => {\r\n rv += block.text;\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SuiTextBlockBlock {\r\n text: SuiInlineText;\r\n position: number;\r\n activeText: boolean;\r\n}\r\nexport interface SuiTextBlockParams {\r\n blocks: SuiTextBlockBlock[];\r\n scroller: SuiScroller;\r\n spacing: number;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n justification: number;\r\n}\r\nexport interface SuiTextBlockJusityCalc {\r\n blocks: SuiInlineText[], minx: number, maxx: number, width: number\r\n}\r\n// ## SuiTextBlock\r\n// A text block is a set of inline blocks that can be aligned/arranged in different ways.\r\nexport class SuiTextBlock {\r\n static get relativePosition() {\r\n return {\r\n ABOVE: SmoTextGroup.relativePositions.ABOVE,\r\n BELOW: SmoTextGroup.relativePositions.BELOW,\r\n LEFT: SmoTextGroup.relativePositions.LEFT,\r\n RIGHT: SmoTextGroup.relativePositions.RIGHT\r\n };\r\n }\r\n inlineBlocks: SuiTextBlockBlock[] = [];\r\n scroller: SuiScroller;\r\n spacing: number = 0;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n currentBlockIndex: number = 0;\r\n justification: number;\r\n outlineRect: OutlineInfo | null = null;\r\n currentBlock: SuiTextBlockBlock | null = null;\r\n logicalBox: SvgBox = SvgBox.default;\r\n constructor(params: SuiTextBlockParams) {\r\n this.inlineBlocks = [];\r\n this.scroller = params.scroller;\r\n this.spacing = params.spacing;\r\n this.context = params.context;\r\n this.skipRender = false; // used when editing the text\r\n if (params.blocks.length < 1) {\r\n const inlineParams = SuiInlineText.defaults;\r\n inlineParams.scroller = this.scroller;\r\n inlineParams.context = this.context;\r\n const inst = new SuiInlineText(inlineParams);\r\n params.blocks = [{ text: inst, position: SmoTextGroup.relativePositions.RIGHT, activeText: true }];\r\n }\r\n params.blocks.forEach((block) => {\r\n if (!this.currentBlock) {\r\n this.currentBlock = block;\r\n this.currentBlockIndex = 0;\r\n }\r\n this.inlineBlocks.push(block);\r\n });\r\n this.justification = params.justification ? params.justification :\r\n SmoTextGroup.justifications.LEFT;\r\n }\r\n render() {\r\n this.unrender(); \r\n this.inlineBlocks.forEach((block) => {\r\n block.text.render();\r\n if (block.activeText) {\r\n this._outlineBox(this.context, block.text.logicalBox);\r\n }\r\n if (!this.logicalBox || this.logicalBox.width < 1) {\r\n this.logicalBox = SvgHelpers.smoBox(block.text.logicalBox);\r\n } else {\r\n this.logicalBox = SvgHelpers.unionRect(this.logicalBox, block.text.logicalBox);\r\n }\r\n });\r\n }\r\n _outlineBox(context: any, box: SvgBox) {\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context, box, classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = box;\r\n this.outlineRect.context = context;\r\n this.outlineRect.scroll = this.scroller.scrollState;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartX(offset);\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartY(offset);\r\n });\r\n }\r\n\r\n rescale(scale: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.rescale(scale);\r\n });\r\n }\r\n\r\n get x(): number {\r\n return this.getLogicalBox().x;\r\n }\r\n get y(): number {\r\n return this.getLogicalBox().y;\r\n }\r\n\r\n maxFontHeight(scale: number): number {\r\n let rv = 0;\r\n this.inlineBlocks.forEach((block) => {\r\n const blockHeight = block.text.maxFontHeight(scale);\r\n rv = blockHeight > rv ? blockHeight : rv;\r\n });\r\n return rv;\r\n }\r\n static blockFromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, position: number, scroller: SuiScroller): SuiTextBlockBlock {\r\n var inlineText = SuiInlineText.fromScoreText(scoreText, context, pageMap, scroller);\r\n return { text: inlineText, position, activeText: true };\r\n }\r\n\r\n getLogicalBox(): SvgBox {\r\n return this._calculateBoundingClientRect();\r\n }\r\n _calculateBoundingClientRect(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n this.inlineBlocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = block.text.getLogicalBox();\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, block.text.getLogicalBox());\r\n }\r\n });\r\n rv.y = rv.y - rv.height;\r\n return rv;\r\n }\r\n static fromTextGroup(tg: SmoTextGroup, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiTextBlock {\r\n const blocks: SuiTextBlockBlock[] = [];\r\n\r\n // Create an inline block for each ScoreText\r\n tg.textBlocks.forEach((stBlock) => {\r\n const st = stBlock.text;\r\n const newText = SuiTextBlock.blockFromScoreText(st, context, pageMap, stBlock.position, scroller);\r\n newText.activeText = stBlock.activeText;\r\n blocks.push(newText);\r\n });\r\n const rv = new SuiTextBlock({\r\n blocks, justification: tg.justification, spacing: tg.spacing, context, scroller,\r\n skipRender: false\r\n });\r\n rv._justify();\r\n return rv;\r\n }\r\n unrender() {\r\n this.inlineBlocks.forEach((block) => {\r\n if (block.text.element) {\r\n block.text.element.remove();\r\n block.text.element = null;\r\n }\r\n });\r\n }\r\n // ### _justify\r\n // justify the blocks according to the group justify policy and the\r\n // relative position of the blocks\r\n _justify() {\r\n let hIx = 0;\r\n let left = 0;\r\n let minx = 0;\r\n let maxx = 0;\r\n let lvl = 0;\r\n let maxwidth = 0;\r\n let runningWidth = 0;\r\n let runningHeight = 0;\r\n if (!this.inlineBlocks.length) {\r\n return;\r\n }\r\n minx = this.inlineBlocks[0].text.startX;\r\n // We justify relative to first block x/y.\r\n const initialX = this.inlineBlocks[0].text.startX;\r\n const initialY = this.inlineBlocks[0].text.startY;\r\n const vert: Record = {};\r\n this.inlineBlocks.forEach((inlineBlock) => {\r\n const block = inlineBlock.text;\r\n const blockBox = block.getLogicalBox();\r\n // If this is a horizontal positioning, reset to first blokc position\r\n //\r\n if (hIx > 0) {\r\n block.startX = initialX;\r\n block.startY = initialY;\r\n }\r\n minx = block.startX < minx ? block.startX : minx;\r\n maxx = (block.startX + blockBox.width) > maxx ? block.startX + blockBox.width : maxx;\r\n\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.ABOVE ? lvl + 1 : lvl;\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.BELOW ? lvl - 1 : lvl;\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.RIGHT) {\r\n block.startX += runningWidth;\r\n if (hIx > 0) {\r\n block.startX += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.LEFT) {\r\n if (hIx > 0) {\r\n block.startX = minx - blockBox.width;\r\n minx = block.startX;\r\n block.startX -= this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.BELOW) {\r\n block.startY += runningHeight;\r\n if (hIx > 0) {\r\n block.startY += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.ABOVE) {\r\n block.startY -= runningHeight;\r\n if(hIx > 0) {\r\n block.startY -= this.spacing;\r\n }\r\n }\r\n if (!vert[lvl]) {\r\n vert[lvl] = {\r\n blocks: [block], minx: block.startX, maxx: block.startX + blockBox.width,\r\n width: blockBox.width\r\n };\r\n maxwidth = vert[lvl].width;\r\n vert[lvl].blocks = [block];\r\n vert[lvl].minx = block.startX;\r\n vert[lvl].maxx = block.startX + blockBox.width;\r\n maxwidth = vert[lvl].width = blockBox.width;\r\n } else {\r\n vert[lvl].blocks.push(block);\r\n vert[lvl].minx = vert[lvl].minx < block.startX ? vert[lvl].minx : block.startX;\r\n vert[lvl].maxx = vert[lvl].maxx > (block.startX + blockBox.width) ?\r\n vert[lvl].maxx : (block.startX + blockBox.width);\r\n vert[lvl].width += blockBox.width;\r\n maxwidth = maxwidth > vert[lvl].width ? maxwidth : vert[lvl].width;\r\n }\r\n runningWidth += blockBox.width;\r\n runningHeight += blockBox.height;\r\n hIx += 1;\r\n block.updatedMetrics = false;\r\n });\r\n\r\n const levels = Object.keys(vert);\r\n\r\n // Horizontal justify the vertical blocks\r\n levels.forEach((level) => {\r\n const vobj = vert[level];\r\n if (this.justification === SmoTextGroup.justifications.LEFT) {\r\n left = minx - vobj.minx;\r\n } else if (this.justification === SmoTextGroup.justifications.RIGHT) {\r\n left = maxx - vobj.maxx;\r\n } else {\r\n left = (maxwidth / 2) - (vobj.width / 2);\r\n left += minx - vobj.minx;\r\n }\r\n vobj.blocks.forEach((block) => {\r\n block.offsetStartX(left);\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMapper, SuiRendererBase } from './mapper';\r\nimport { SvgHelpers, StrokeInfo, OutlineInfo } from './svgHelpers';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from '../../smo/xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SuiScroller } from './scroller';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * SuiTracker\r\n A tracker maps the UI elements to the logical elements ,and allows the user to\r\n move through the score and make selections, for navigation and editing.\r\n */\r\nexport class SuiTracker extends SuiMapper {\r\n idleTimer: number = Date.now();\r\n musicCursorGlyph: SVGSVGElement | null = null;\r\n static get strokes(): Record {\r\n return {\r\n suggestion: {\r\n strokeName: 'suggestion',\r\n stroke: '#fc9',\r\n strokeWidth: 3,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n selection: {\r\n strokeName: 'selection',\r\n stroke: '#99d',\r\n strokeWidth: 3,\r\n strokeDasharray: 2,\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n staffModifier: {\r\n strokeName: 'staffModifier',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }, pitchSelection: {\r\n strokeName: 'pitchSelection',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }\r\n\r\n };\r\n }\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller, pasteBuffer: PasteBuffer) {\r\n super(renderer, scroller, pasteBuffer);\r\n }\r\n // ### renderElement\r\n // the element the score is rendered on\r\n get renderElement(): Element {\r\n return this.renderer.renderElement;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this.renderer.score;\r\n }\r\n\r\n getIdleTime(): number {\r\n return this.idleTimer;\r\n }\r\n\r\n getSelectedModifier() {\r\n if (this.modifierSelections.length) {\r\n return this.modifierSelections[0];\r\n }\r\n return null;\r\n }\r\n\r\n getSelectedModifiers() {\r\n return this.modifierSelections;\r\n }\r\n\r\n static serializeEvent(evKey: KeyEvent | null): any {\r\n if (!evKey) {\r\n return [];\r\n }\r\n const rv = {};\r\n smoSerialize.serializedMerge(['type', 'shiftKey', 'ctrlKey', 'altKey', 'key', 'keyCode'], evKey, rv);\r\n return rv;\r\n }\r\n\r\n advanceModifierSelection(score: SmoScore, keyEv: KeyEvent | null) {\r\n if (!keyEv) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const offset = keyEv.key === 'ArrowLeft' ? -1 : 1;\r\n this.modifierIndex = this.modifierIndex + offset;\r\n this.modifierIndex = (this.modifierIndex === -2 && this.localModifiers.length) ?\r\n this.localModifiers.length - 1 : this.modifierIndex;\r\n if (this.modifierIndex >= this.localModifiers.length || this.modifierIndex < 0) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [];\r\n return;\r\n }\r\n const local: ModifierTab = this.localModifiers[this.modifierIndex];\r\n const box: SvgBox = SvgHelpers.smoBox(local.box) as SvgBox;\r\n this.modifierSelections = [{ index: 0, box, modifier: local.modifier, selection: local.selection }];\r\n this._highlightModifier();\r\n }\r\n\r\n static stringifyBox(box: SvgBox): string {\r\n return '{x:' + box.x + ',y:' + box.y + ',width:' + box.width + ',height:' + box.height + '}';\r\n }\r\n\r\n // ### _getOffsetSelection\r\n // Get the selector that is the offset of the first existing selection\r\n _getOffsetSelection(offset: number): SmoSelector {\r\n if (!this.score) {\r\n return SmoSelector.default;\r\n }\r\n let testSelection = this.getExtremeSelection(Math.sign(offset));\r\n const scopyTick = JSON.parse(JSON.stringify(testSelection.selector));\r\n const scopyMeasure = JSON.parse(JSON.stringify(testSelection.selector));\r\n scopyTick.tick += offset;\r\n scopyMeasure.measure += offset;\r\n const targetMeasure = SmoSelection.measureSelection(this.score, testSelection.selector.staff,\r\n scopyMeasure.measure);\r\n if (targetMeasure && targetMeasure.measure && targetMeasure.measure.voices.length <= scopyMeasure.voice) {\r\n scopyMeasure.voice = 0;\r\n }\r\n if (targetMeasure && targetMeasure.measure) {\r\n scopyMeasure.tick = (offset < 0) ? targetMeasure.measure.voices[scopyMeasure.voice].notes.length - 1 : 0;\r\n }\r\n\r\n if (testSelection.measure.voices.length > scopyTick.voice &&\r\n testSelection.measure.voices[scopyTick.voice].notes.length > scopyTick.tick && scopyTick.tick >= 0) {\r\n if (testSelection.selector.voice !== testSelection.measure.getActiveVoice()) {\r\n scopyTick.voice = testSelection.measure.getActiveVoice();\r\n testSelection = this._getClosestTick(scopyTick);\r\n return testSelection.selector;\r\n }\r\n return scopyTick;\r\n } else if (targetMeasure &&\r\n scopyMeasure.measure < testSelection.staff.measures.length && scopyMeasure.measure >= 0) {\r\n return scopyMeasure;\r\n }\r\n return testSelection.selector;\r\n }\r\n\r\n getSelectedGraceNotes(): ModifierTab[] {\r\n if (!this.modifierSelections.length) {\r\n return [];\r\n }\r\n const ff = this.modifierSelections.filter((mm) =>\r\n mm.modifier?.attrs?.type === 'SmoGraceNote'\r\n );\r\n return ff;\r\n }\r\n\r\n isGraceNoteSelected(): boolean {\r\n if (this.modifierSelections.length) {\r\n const ff = this.modifierSelections.findIndex((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n return ff >= 0;\r\n }\r\n return false;\r\n }\r\n\r\n _growGraceNoteSelections(offset: number) {\r\n this.idleTimer = Date.now();\r\n const far = this.modifierSelections.filter((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n if (!far.length) {\r\n return;\r\n }\r\n const ix = (offset < 0) ? 0 : far.length - 1;\r\n const sel: ModifierTab = far[ix] as ModifierTab;\r\n const left = this.localModifiers.filter((mt) =>\r\n mt.modifier?.attrs?.type === 'SmoGraceNote' && sel.selection && mt.selection &&\r\n SmoSelector.sameNote(mt.selection.selector, sel.selection.selector)\r\n );\r\n if (ix + offset < 0 || ix + offset >= left.length) {\r\n return;\r\n }\r\n const leftSel = left[ix + offset];\r\n if (!leftSel) {\r\n console.warn('bad selector in _growGraceNoteSelections');\r\n }\r\n leftSel.box = leftSel.box ?? SvgBox.default;\r\n this.modifierSelections.push(leftSel);\r\n this._highlightModifier();\r\n }\r\n get autoPlay(): boolean {\r\n return this.renderer.score ? this.renderer.score.preferences.autoPlay : false;\r\n }\r\n\r\n growSelectionRight() {\r\n this._growSelectionRight(false);\r\n }\r\n _growSelectionRight(skipPlay: boolean): number {\r\n this.idleTimer = Date.now();\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(1);\r\n return 0;\r\n }\r\n const nselect = this._getOffsetSelection(1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n if (!this.mapping && this.autoPlay && skipPlay === false && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.selections.push(artifact);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n moveHome(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const mm = ls.measures[0];\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: 0, voice: mm.getActiveVoice(), tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else {\r\n this.selections = [homeSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (homeSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n const lm = ls.measures.find((mm) =>\r\n mm.svg.lineIndex === system && mm.measureNumber.systemIndex === 0);\r\n const mm = lm as SmoMeasure;\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: mm.measureNumber.measureIndex, voice: mm.getActiveVoice(),\r\n tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else if (homeSel?.measure?.svg?.logicalBox) {\r\n this.selections = [homeSel];\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n }\r\n }\r\n moveEnd(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const lm = ls.measures[ls.measures.length - 1];\r\n const voiceIx = lm.getActiveVoice();\r\n const voice = lm.voices[voiceIx];\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: ls.measures.length - 1, voice: voiceIx, tick: voice.notes.length - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n // find the largest measure index on this staff in this system\r\n const measures = ls.measures.filter((mm) =>\r\n mm.svg.lineIndex === system);\r\n const lm = measures.reduce((a, b) =>\r\n b.measureNumber.measureIndex > a.measureNumber.measureIndex ? b : a);\r\n const ticks = lm.voices[lm.getActiveVoice()].notes.length;\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: lm.measureNumber.measureIndex, voice: lm.getActiveVoice(), tick: ticks - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n }\r\n }\r\n growSelectionRightMeasure() {\r\n let toSelect = 0;\r\n const rightmost = this.getExtremeSelection(1);\r\n const ticksLeft = rightmost.measure.voices[rightmost.measure.activeVoice]\r\n .notes.length - rightmost.selector.tick;\r\n if (ticksLeft === 0) {\r\n if (rightmost.selector.measure < rightmost.staff.measures.length) {\r\n const mix = rightmost.selector.measure + 1;\r\n rightmost.staff.measures[mix].setActiveVoice(rightmost.selector.voice);\r\n toSelect = rightmost.staff.measures[mix]\r\n .voices[rightmost.staff.measures[mix].activeVoice].notes.length;\r\n }\r\n } else {\r\n toSelect = ticksLeft;\r\n }\r\n while (toSelect > 0) {\r\n this._growSelectionRight(true);\r\n toSelect -= 1;\r\n }\r\n }\r\n\r\n growSelectionLeft(): number {\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(-1);\r\n return 0;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselect = this._getOffsetSelection(-1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n artifact.measure.setActiveVoice(nselect.voice);\r\n this.selections.push(artifact);\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n\r\n // if we are being moved right programmatically, avoid playing the selected note.\r\n moveSelectionRight(score: SmoScore, evKey: KeyEvent | null, skipPlay: boolean) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n // const original = JSON.parse(JSON.stringify(this.getExtremeSelection(-1).selector));\r\n const nselect = this._getOffsetSelection(1);\r\n // skip any measures that are not displayed due to rest or repetition\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure); \r\n if (mselect?.measure.svg.multimeasureLength) {\r\n nselect.measure += mselect?.measure.svg.multimeasureLength;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n }\r\n this._replaceSelection(nselect, skipPlay);\r\n }\r\n\r\n moveSelectionLeft() {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n const nselect = this._getOffsetSelection(-1);\r\n // Skip multimeasure rests in parts\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure);\r\n while (nselect.measure > 0 && mselect && (mselect.measure.svg.hideMultimeasure || mselect.measure.svg.multimeasureLength > 0)) {\r\n nselect.measure -= 1;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n } \r\n this._replaceSelection(nselect, false);\r\n }\r\n moveSelectionLeftMeasure() {\r\n this._moveSelectionMeasure(-1);\r\n }\r\n moveSelectionRightMeasure() {\r\n this._moveSelectionMeasure(1);\r\n }\r\n _moveSelectionMeasure(offset: number) {\r\n const selection = this.getExtremeSelection(Math.sign(offset));\r\n this.idleTimer = Date.now();\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.measure += offset;\r\n selector.tick = 0;\r\n const selObj = this._getClosestTick(selector);\r\n if (selObj) {\r\n this.selections = [selObj];\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n _moveStaffOffset(offset: number) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n nselector.staff = this.score.incrementActiveStaff(offset);\r\n \r\n this.selections = [this._getClosestTick(nselector)];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n removePitchSelection() {\r\n if (this.outlines['pitchSelection']) {\r\n if (this.outlines['pitchSelection'].element) {\r\n this.outlines['pitchSelection'].element.remove();\r\n }\r\n delete this.outlines['pitchSelection'];\r\n }\r\n }\r\n\r\n // ### _moveSelectionPitch\r\n // Suggest a specific pitch in a chord, so we can transpose just the one note vs. the whole chord.\r\n _moveSelectionPitch(index: number) {\r\n this.idleTimer = Date.now();\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n const sel = this.selections[0];\r\n const note = sel.note as SmoNote;\r\n if (note.pitches.length < 2) {\r\n this.pitchIndex = -1;\r\n this.removePitchSelection();\r\n return;\r\n }\r\n this.pitchIndex = (this.pitchIndex + index) % note.pitches.length;\r\n sel.selector.pitches = [];\r\n sel.selector.pitches.push(this.pitchIndex);\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n }\r\n moveSelectionPitchUp() {\r\n this._moveSelectionPitch(1);\r\n }\r\n moveSelectionPitchDown() {\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n this._moveSelectionPitch((this.selections[0].note as SmoNote).pitches.length - 1);\r\n }\r\n\r\n moveSelectionUp() {\r\n this._moveStaffOffset(-1);\r\n }\r\n moveSelectionDown() {\r\n this._moveStaffOffset(1);\r\n }\r\n\r\n containsArtifact(): boolean {\r\n return this.selections.length > 0;\r\n }\r\n\r\n _replaceSelection(nselector: SmoSelector, skipPlay: boolean) {\r\n if (this.score === null) {\r\n return;\r\n }\r\n var artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, nselector.voice, nselector.tick);\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, nselector.tick);\r\n }\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, 0);\r\n }\r\n if (!artifact) {\r\n // disappeared - default to start\r\n artifact = SmoSelection.noteSelection(this.score, 0, 0, 0, 0);\r\n }\r\n if (!skipPlay && this.autoPlay && artifact) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n if (!artifact) {\r\n return;\r\n }\r\n artifact.measure.setActiveVoice(nselector.voice);\r\n\r\n // clear modifier selections\r\n this.clearModifierSelections();\r\n this.score.setActiveStaff(nselector.staff);\r\n const mapKey = Object.keys(this.measureNoteMap).find((k) =>\r\n artifact && SmoSelector.sameNote(this.measureNoteMap[k].selector, artifact.selector)\r\n );\r\n if (!mapKey) {\r\n return;\r\n }\r\n const mapped = this.measureNoteMap[mapKey];\r\n // If this is a new selection, remove pitch-specific and replace with note-specific\r\n if (!nselector.pitches || nselector.pitches.length === 0) {\r\n this.pitchIndex = -1;\r\n }\r\n\r\n this.selections = [mapped];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n getFirstMeasureOfSelection() {\r\n if (this.selections.length) {\r\n return this.selections[0].measure;\r\n }\r\n return null;\r\n }\r\n // ## measureIterator\r\n // Description: iterate over the any measures that are part of the selection\r\n getSelectedMeasures(): SmoSelection[] {\r\n const set: number[] = [];\r\n const rv: SmoSelection[] = [];\r\n if (!this.score) {\r\n return [];\r\n }\r\n this.selections.forEach((sel) => {\r\n const measure = SmoSelection.measureSelection(this.score!, sel.selector.staff, sel.selector.measure);\r\n if (measure) {\r\n const ix = measure.selector.measure;\r\n if (set.indexOf(ix) === -1) {\r\n set.push(ix);\r\n rv.push(measure);\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n _addSelection(selection: SmoSelection) {\r\n const ar: SmoSelection[] = this.selections.filter((sel) =>\r\n SmoSelector.neq(sel.selector, selection.selector)\r\n );\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(selection, this.score, 1);\r\n }\r\n ar.push(selection);\r\n this.selections = ar;\r\n }\r\n\r\n _selectFromToInStaff(score: SmoScore, sel1: SmoSelection, sel2: SmoSelection) {\r\n const selections = SmoSelection.innerSelections(score, sel1.selector, sel2.selector);\r\n /* .filter((ff) => \r\n ff.selector.voice === sel1.measure.activeVoice\r\n ); */\r\n this.selections = [];\r\n // Get the actual selections from our map, since the client bounding boxes are already computed\r\n selections.forEach((sel) => {\r\n const key = SmoSelector.getNoteKey(sel.selector);\r\n sel.measure.setActiveVoice(sel.selector.voice);\r\n // Skip measures that are not rendered because they are part of a multi-rest\r\n if (this.measureNoteMap && this.measureNoteMap[key]) {\r\n this.selections.push(this.measureNoteMap[key]);\r\n }\r\n });\r\n\r\n if (this.selections.length === 0) {\r\n this.selections = [sel1];\r\n }\r\n this.idleTimer = Date.now();\r\n }\r\n _selectBetweenSelections(score: SmoScore, s1: SmoSelection, s2: SmoSelection) {\r\n const min = SmoSelector.gt(s1.selector, s2.selector) ? s2 : s1;\r\n const max = SmoSelector.lt(min.selector, s2.selector) ? s2 : s1;\r\n this._selectFromToInStaff(score, min, max);\r\n this._createLocalModifiersList();\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n this.deferHighlight();\r\n }\r\n selectSuggestion(score: SmoScore,ev: KeyEvent) {\r\n if (!this.suggestion || !this.suggestion.measure || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n\r\n if (this.modifierSuggestion) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [this.modifierSuggestion];\r\n this.modifierSuggestion = null;\r\n this.createLocalModifiersFromModifierTabs(this.modifierSelections);\r\n // If we selected due to a mouse click, move the selection to the\r\n // selected modifier\r\n this._highlightModifier();\r\n return;\r\n } else if (ev.type === 'click') {\r\n this.clearModifierSelections(); // if we click on a non-modifier, clear the\r\n // modifier selections\r\n }\r\n\r\n if (ev.shiftKey) {\r\n const sel1 = this.getExtremeSelection(-1);\r\n if (sel1.selector.staff === this.suggestion.selector.staff) {\r\n this._selectBetweenSelections(score, sel1, this.suggestion);\r\n return;\r\n }\r\n }\r\n\r\n if (ev.ctrlKey) {\r\n this._addSelection(this.suggestion);\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n return;\r\n }\r\n if (this.autoPlay) {\r\n SuiOscillator.playSelectionNow(this.suggestion, this.score, 1);\r\n }\r\n\r\n const preselected = this.selections[0] ?\r\n SmoSelector.sameNote(this.suggestion.selector, this.selections[0].selector) && this.selections.length === 1 : false;\r\n\r\n if (this.selections.length === 0) {\r\n this.selections.push(this.suggestion);\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (preselected && note.pitches.length > 1) {\r\n this.pitchIndex = (this.pitchIndex + 1) % note.pitches.length;\r\n this.selections[0].selector.pitches = [this.pitchIndex];\r\n } else {\r\n const selection = SmoSelection.noteFromSelector(this.score, this.suggestion.selector);\r\n if (selection) {\r\n selection.box = JSON.parse(JSON.stringify(this.suggestion.box));\r\n selection.scrollBox = JSON.parse(JSON.stringify(this.suggestion.scrollBox));\r\n this.selections = [selection];\r\n }\r\n }\r\n if (preselected && this.modifierSelections.length) {\r\n const mods = this.modifierSelections.filter((mm) => mm.selection && SmoSelector.sameNote(mm.selection.selector, this.selections[0].selector));\r\n if (mods.length) {\r\n const modToAdd = mods[0];\r\n if (!modToAdd) {\r\n console.warn('bad modifier selection in selectSuggestion 2');\r\n }\r\n this.modifierSelections[0] = modToAdd;\r\n this.modifierIndex = mods[0].index;\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n this.score.setActiveStaff(this.selections[0].selector.staff);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n _setModifierAsSuggestion(artifact: ModifierTab): void {\r\n if (!artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n\r\n _setArtifactAsSuggestion(artifact: SmoSelection) {\r\n let sameSel: SmoSelection | null = null;\r\n let i = 0;\r\n for (i = 0; i < this.selections.length; ++i) {\r\n const ss = this.selections[i];\r\n if (ss && SmoSelector.sameNote(ss.selector, artifact.selector)) {\r\n sameSel = ss;\r\n break;\r\n }\r\n }\r\n if (sameSel || !artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = null;\r\n\r\n this.suggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n _highlightModifier() {\r\n let box: SvgBox | null = null;\r\n if (!this.modifierSelections.length) {\r\n return;\r\n }\r\n this.modifierSelections.forEach((artifact) => {\r\n if (box === null) {\r\n box = artifact.modifier.logicalBox ?? null;\r\n } else {\r\n box = SvgHelpers.unionRect(box, SvgHelpers.smoBox(artifact.modifier.logicalBox));\r\n }\r\n });\r\n if (box === null) {\r\n return;\r\n }\r\n this._drawRect(box, 'staffModifier');\r\n }\r\n\r\n _highlightPitchSelection(note: SmoNote, index: number) {\r\n const noteDiv = $(this.renderElement).find('#' + note.renderId);\r\n const heads = noteDiv.find('.vf-notehead');\r\n if (!heads.length) {\r\n return;\r\n }\r\n const headEl = heads[index];\r\n const pageContext = this.renderer.pageMap.getRendererFromModifier(note);\r\n $(pageContext.svg).find('.vf-pitchSelection').remove();\r\n const box = pageContext.offsetBbox(headEl);\r\n this._drawRect(box, 'pitchSelection');\r\n }\r\n\r\n _highlightActiveVoice(selection: SmoSelection) {\r\n let i = 0;\r\n const selector = selection.selector;\r\n for (i = 1; i <= 4; ++i) {\r\n const cl = 'v' + i.toString() + '-active';\r\n $('body').removeClass(cl);\r\n }\r\n const c2 = 'v' + (selector.voice + 1).toString() + '-active';\r\n $('body').addClass(c2);\r\n }\r\n // The user has just switched voices, select the active voice\r\n selectActiveVoice() {\r\n const selection = this.selections[0];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.voice = selection.measure.activeVoice;\r\n this.selections = [this._getClosestTick(selector)];\r\n this.deferHighlight();\r\n }\r\n\r\n highlightSelection() {\r\n let i = 0;\r\n let prevSel: SmoSelection | null = null;\r\n let curBox: SvgBox = SvgBox.default;\r\n this.idleTimer = Date.now();\r\n const grace = this.getSelectedGraceNotes();\r\n // If this is not a note with grace notes, logically unselect the grace notes\r\n if (grace && grace.length && grace[0].selection && this.selections.length) {\r\n if (!SmoSelector.sameNote(grace[0].selection.selector, this.selections[0].selector)) {\r\n this.clearModifierSelections();\r\n } else {\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n // If there is a race condition with a change, avoid referencing null note\r\n if (!this.selections[0].note) {\r\n return;\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (this.pitchIndex >= 0 && this.selections.length === 1 &&\r\n this.pitchIndex < note.pitches.length) {\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n this.removePitchSelection();\r\n this.pitchIndex = -1;\r\n if (this.selections.length === 1 && note.logicalBox) {\r\n this._drawRect(note.logicalBox, 'selection');\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n const sorted = this.selections.sort((a, b) => SmoSelector.gt(a.selector, b.selector) ? 1 : -1);\r\n prevSel = sorted[0];\r\n // rendered yet?\r\n if (!prevSel || !prevSel.box) {\r\n return;\r\n }\r\n curBox = SvgHelpers.smoBox(prevSel.box);\r\n const boxes: SvgBox[] = [];\r\n for (i = 1; i < sorted.length; ++i) {\r\n const sel = sorted[i];\r\n if (!sel.box || !prevSel.box) {\r\n continue;\r\n }\r\n // const ydiff = Math.abs(prevSel.box.y - sel.box.y);\r\n if (sel.selector.staff === prevSel.selector.staff && sel.measure.svg.lineIndex === prevSel.measure.svg.lineIndex) {\r\n curBox = SvgHelpers.unionRect(curBox, sel.box);\r\n } else if (curBox) {\r\n boxes.push(curBox);\r\n curBox = SvgHelpers.smoBox(sel.box);\r\n }\r\n this._highlightActiveVoice(sel);\r\n prevSel = sel;\r\n }\r\n boxes.push(curBox);\r\n if (this.modifierSelections.length) {\r\n boxes.push(this.modifierSelections[0].box);\r\n }\r\n this._drawRect(boxes, 'selection');\r\n }\r\n /**\r\n * Boxes are divided up into lines/systems already. But we need\r\n * to put the correct box on the correct page.\r\n * @param boxes \r\n */\r\n drawSelectionRects(boxes: SvgBox[]) {\r\n const keys = Object.keys(this.selectionRects);\r\n // erase any old selections\r\n keys.forEach((key) => {\r\n const oon = this.selectionRects[parseInt(key)];\r\n oon.forEach((outline) => {\r\n if (outline.element) {\r\n outline.element.remove();\r\n outline.element = undefined;\r\n \r\n }\r\n })\r\n });\r\n this.selectionRects = {};\r\n // Create an OutlineInfo for each page\r\n const pages: number[] = [];\r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)['selection'];\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n testBox.y -= context.box.y;\r\n if (!this.selectionRects[context.pageNumber]) {\r\n this.selectionRects[context.pageNumber] = [];\r\n pages.push(context.pageNumber);\r\n }\r\n this.selectionRects[context.pageNumber].push({\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n });\r\n });\r\n pages.forEach((pageNo) => {\r\n const outlineInfos = this.selectionRects[pageNo];\r\n outlineInfos.forEach((info) => {\r\n SvgHelpers.outlineRect(info);\r\n });\r\n });\r\n }\r\n _drawRect(pBox: SvgBox | SvgBox[], strokeName: string) { \r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)[strokeName];\r\n const boxes = Array.isArray(pBox) ? pBox : [pBox];\r\n if (strokeName === 'selection') {\r\n this.drawSelectionRects(boxes);\r\n return;\r\n }\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n const timeOff = strokeName === 'suggestion' ? 1000 : 0; \r\n if (context) {\r\n testBox.y -= context.box.y;\r\n if (!this.outlines[strokeName]) {\r\n this.outlines[strokeName] = {\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff\r\n };\r\n }\r\n this.outlines[strokeName].box = testBox;\r\n this.outlines[strokeName].context = context;\r\n SvgHelpers.outlineRect(this.outlines[strokeName]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoBarline } from '../../smo/data/measureModifiers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { VexFlow, GlyphInfo, getGlyphWidth } from '../../common/vex';\r\n\r\nexport class vexGlyph {\r\n static width(smoGlyph: GlyphInfo) {\r\n return getGlyphWidth(smoGlyph);\r\n }\r\n static accidental(a: string): GlyphInfo {\r\n return vexGlyph.accidentals[a];\r\n }\r\n static barWidth(b: SmoBarline): number {\r\n const str = SmoBarline.barlineString(b);\r\n const cc = vexGlyph.dimensions[str];\r\n return cc.width + cc.spacingRight;\r\n }\r\n static accidentalWidth(accidental: string): number {\r\n return vexGlyph.width(vexGlyph.accidentals[accidental]);\r\n }\r\n static get accidentals(): Record {\r\n return {\r\n 'b': vexGlyph.dimensions.flat,\r\n '#': vexGlyph.dimensions.sharp,\r\n 'bb': vexGlyph.dimensions.doubleFlat,\r\n '##': vexGlyph.dimensions.doubleSharp,\r\n 'n': vexGlyph.dimensions.natural\r\n };\r\n }\r\n\r\n static repeatSymbolWidth(): number {\r\n return vexGlyph.width(vexGlyph.dimensions['repeatSymbol']);\r\n }\r\n static get tempo(): GlyphInfo {\r\n return vexGlyph.dimensions.tempo;\r\n }\r\n static keySignatureLength(key: string) {\r\n return SmoMusic.getSharpsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.sharp) +\r\n SmoMusic.getFlatsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.flat) +\r\n vexGlyph.dimensions.keySignature.spacingRight;\r\n }\r\n static get timeSignature() {\r\n return vexGlyph.dimensions.timeSignature;\r\n }\r\n static get dot() {\r\n return vexGlyph.dimensions.dot;\r\n }\r\n\r\n static get tupletBeam() {\r\n return vexGlyph.dimensions.tupletBeam;\r\n }\r\n static get stem() {\r\n return vexGlyph.dimensions.stem;\r\n }\r\n static get flag() {\r\n return vexGlyph.dimensions.flag;\r\n }\r\n static clef(c: string): GlyphInfo {\r\n const key = c.toLowerCase() + 'Clef';\r\n if (!vexGlyph.dimensions[key]) {\r\n return vexGlyph.dimensions.tenorClef;\r\n }\r\n if (vexGlyph.dimensions[key].vexGlyph) {\r\n const width = vexGlyph.width(vexGlyph.dimensions[key]);\r\n return {\r\n width,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 10,\r\n vexGlyph: 'gClef'\r\n };\r\n }\r\n return vexGlyph.dimensions[key];\r\n }\r\n static get dimensions(): Record {\r\n return {\r\n tupletBeam: {\r\n width: 5,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n }, repeatSymbol: {\r\n width: 25,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'repeat1Bar'\r\n },\r\n singleBar: {\r\n width: 1,\r\n height: 41,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 1,\r\n vexGlyph: null\r\n },\r\n endBar: {\r\n width: 5.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n doubleBar: {\r\n width: 3.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n endRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n startRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n noteHead: {\r\n width: 15.3,\r\n height: 10.48,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'noteheadBlack'\r\n },\r\n dot: {\r\n width: 15,\r\n height: 5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'augmentationDot'\r\n }, // This isn't accurate, but I don't\r\n // want to add extra space just for clef.\r\n trebleClef: {\r\n width: 35,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 5,\r\n vexGlyph: 'gClef'\r\n },\r\n bassClef: {\r\n width: 36,\r\n height: 31.88,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'fClef'\r\n },\r\n altoClef: {\r\n width: 31.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n height: 85.5,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n tenorClef: {\r\n width: 31.5,\r\n yTop: 10,\r\n yBottom: 0,\r\n height: 41,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n timeSignature: {\r\n width: 22.36,\r\n height: 85,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 11,\r\n vexGlyph: 'timeSig4'\r\n },\r\n tempo: {\r\n width: 10,\r\n height: 37,\r\n yTop: 37,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n flat: {\r\n width: 15,\r\n height: 23.55,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalFlat'\r\n },\r\n keySignature: {\r\n width: 0,\r\n height: 85.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 10,\r\n vexGlyph: null\r\n },\r\n sharp: {\r\n width: 17,\r\n height: 62,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalSharp',\r\n },\r\n natural: {\r\n width: 15,\r\n height: 53.35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalNatural',\r\n },\r\n doubleSharp: {\r\n height: 10.04,\r\n width: 21.63,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleSharp'\r\n },\r\n doubleFlat: {\r\n width: 13.79,\r\n height: 49.65,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleFlat'\r\n }, stem: {\r\n width: 1,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n }, flag: {\r\n width: 10,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'flag8thUp' // use for width measurements all flags\r\n }\r\n };\r\n }\r\n}\r\n","import { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SmoBarline, SmoMeasureText, SmoRepeatSymbol, SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoLyric, VexAnnotationParams } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { VexFlow } from '../../common/vex';\r\nconst VF = VexFlow;\r\n/**\r\n * convert from Smo library values to Vex values\r\n * @module\r\n * \r\n **/\r\n\r\n/**\r\n *\r\n *\r\n * @export\r\n * @param {SmoSystemGroup} athis\r\n * @return {*} \r\n */\r\nexport function leftConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.leftConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n return VF.StaveConnector.type.DOUBLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.brace:\r\n return VF.StaveConnector.type.BRACE;\r\n case SmoSystemGroup.connectorTypes.bracket:\r\n default:\r\n return VF.StaveConnector.type.BRACKET;\r\n }\r\n}\r\n/**\r\n * convert from a SmoSystemGroup connector to Vex enumeration\r\n * @param athis \r\n * @returns \r\n */\r\nexport function rightConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.rightConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_RIGHT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n default:\r\n return VF.StaveConnector.type.DOUBLE_RIGHT;\r\n }\r\n}\r\nexport const vexBarlineType = [VF.Barline.type.SINGLE, VF.Barline.type.DOUBLE, VF.Barline.type.END,\r\n VF.Barline.type.REPEAT_BEGIN, VF.Barline.type.REPEAT_END, VF.Barline.type.NONE];\r\n\r\nexport const vexBarlinePosition = [ VF.StaveModifierPosition.BEGIN, VF.StaveModifierPosition.END ];\r\n\r\nexport function toVexBarlineType(athis: SmoBarline): number {\r\n return vexBarlineType[athis.barline];\r\n}\r\nexport function toVexBarlinePosition(athis: SmoBarline): number {\r\n return vexBarlinePosition[athis.position];\r\n}\r\n\r\nexport const vexSymbol = [VF.Repetition.type.NONE, VF.Repetition.type.CODA_LEFT, VF.Repetition.type.SEGNO_LEFT, VF.Repetition.type.DC,\r\n VF.Repetition.type.DC_AL_CODA, VF.Repetition.type.DC_AL_FINE, VF.Repetition.type.DS,\r\n VF.Repetition.type.DS_AL_CODA, VF.Repetition.type.DS_AL_FINE, VF.Repetition.type.FINE];\r\n\r\nexport function toVexSymbol(athis: SmoRepeatSymbol) {\r\n return vexSymbol[athis.symbol];\r\n}\r\nexport function toVexVolta(volta: SmoVolta, measureNumber: number) {\r\n if (volta.startBar === measureNumber && volta.startBar === volta.endBar) {\r\n return VF.Volta.type.BEGIN_END;\r\n }\r\n if (volta.startBar === measureNumber) {\r\n return VF.Volta.type.BEGIN;\r\n }\r\n if (volta.endBar === measureNumber) {\r\n return VF.Volta.type.END;\r\n }\r\n if (volta.startBar < measureNumber && volta.endBar > measureNumber) {\r\n return VF.Volta.type.MID;\r\n }\r\n return VF.Volta.type.NONE;\r\n}\r\n\r\nexport const vexTextPosition = [VF.Modifier.Position.ABOVE, VF.Modifier.Position.BELOW, VF.Modifier.Position.LEFT, VF.Modifier.Position.RIGHT];\r\nexport const vexTextJustification = [VF.TextJustification.LEFT, VF.TextJustification.RIGHT, VF.TextJustification.CENTER];\r\n\r\nexport function toVexTextJustification(athis: SmoMeasureText) {\r\n return vexTextJustification[athis.justification];\r\n}\r\nexport function toVexTextPosition(athis: SmoMeasureText) {\r\n return vexTextPosition[parseInt(athis.position as any, 10)];\r\n}\r\n\r\nexport function vexOptions(athis: SmoTie) {\r\n const rv: any = {};\r\n rv.direction = athis.invert ? VF.Stem.DOWN : VF.Stem.UP;\r\n SmoTie.vexParameters.forEach((p) => {\r\n rv[p] = (athis as any)[p];\r\n });\r\n return rv;\r\n}\r\nexport function vexAnnotationPosition(chordPos: number) {\r\n if (chordPos === SmoLyric.symbolPosition.NORMAL) {\r\n return VF.ChordSymbol.symbolModifiers.NONE;\r\n } else if (chordPos === SmoLyric.symbolPosition.SUPERSCRIPT) {\r\n return VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n }\r\n return VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n}\r\n\r\nexport function getVexChordBlocks(athis: SmoLyric) {\r\n let mod = VF.ChordSymbol.symbolModifiers.NONE;\r\n let isGlyph = false;\r\n const tokens = SmoLyric._tokenizeChordString(athis.text);\r\n const blocks: VexAnnotationParams[] = [];\r\n tokens.forEach((token) => {\r\n if (token === '^') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUPERSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n } else if (token === '%') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUBSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n } else if (token === '@') {\r\n isGlyph = !isGlyph;\r\n } else if (token.length) {\r\n if (isGlyph) {\r\n const glyph = SmoLyric._chordGlyphFromCode(token);\r\n blocks.push({\r\n glyph, symbolModifier: mod\r\n });\r\n } else {\r\n blocks.push({\r\n text: token, symbolModifier: mod\r\n });\r\n }\r\n }\r\n });\r\n return blocks;\r\n}\r\n\r\nexport function toVexStemDirection(note: SmoNote) {\r\n return (note.flagState === SmoNote.flagStates.up ? VF.Stem.UP : VF.Stem.DOWN);\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure, SmoVoice, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { VexFlow, StaveNoteStruct, TupletOptions, vexOrnaments } from '../../common/vex';\r\nimport { SmoBarline, SmoRehearsalMark } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { getId } from '../../smo/data/common';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { StaffModifierBase, SmoStaffHairpin, SmoSlur, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, leftConnectorVx, rightConnectorVx,\r\n toVexVolta, getVexChordBlocks } from '../../render/vex/smoAdapter';\r\n\r\n\r\n\r\nconst VF = VexFlow;\r\nexport const fontStacks: Record = {\r\n Bravura: ['\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Gonville: ['\"Gonville\"', '\"Bravura\"', '\"Custom\"'],\r\n Petaluma: ['\"Petaluma\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Leland: ['\"Leland\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'] \r\n}\r\ninterface LyricAdjust {\r\n verse: number, lyric: SmoLyric, \r\n}\r\ninterface VexNoteRenderInfo {\r\n smoNote: SmoNote,voiceIx: number, noteIx: number, tickmapObject: MeasureTickmaps, lyricAdj: string[]\r\n}\r\ninterface VexStaveGroupMusic {\r\n formatter: string, measures: SmoMeasure[], voiceStrings: string[], heightOffset: number, \r\n systemGroup?: SmoSystemGroup\r\n}\r\nfunction smoNoteToVexKeys(smoNote: SmoNote) {\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n return keys;\r\n}\r\nfunction smoNoteToGraceNotes(smoNote: SmoNote, strs: string[]) {\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const grGroup: string[] = [];\r\n gar.forEach((g) => {\r\n const grid = g.attrs.id;\r\n const args = JSON.stringify(g.toVexGraceNote());\r\n strs.push(`const ${grid} = new VF.GraceNote(JSON.parse('${args}'))`);\r\n strs.push(`${grid}.setAttribute('id', '${grid}');`);\r\n for (var i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const acid = 'acc' + i.toString() + grid;\r\n strs.push(`const ${acid} = new VF.Accidental('${pitch.accidental}');`);\r\n if (pitch.cautionary) {\r\n strs.push(`${acid}.setAsCautionary();`);\r\n }\r\n strs.push(`${grid}.addModifier(${acid}, ${i})`);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n grGroup.push(grid);\r\n });\r\n const ggid = 'ggrp' + smoNote.attrs.id;\r\n const grString = '[' + grGroup.join(',') + ']';\r\n strs.push(`const ${ggid} = new VF.GraceNoteGroup(${grString});`);\r\n if (toBeam) {\r\n strs.push(`${ggid}.beamNotes();`);\r\n }\r\n strs.push(`${smoNote.attrs.id}.addModifier(${ggid}, 0);`);\r\n }\r\n}\r\nfunction smoNoteToStaveNote(smoNote: SmoNote) {\r\n const duration =\r\n smoNote.isTuplet ?\r\n SmoMusic.closestVexDuration(smoNote.tickCount) :\r\n SmoMusic.ticksToDuration[smoNote.tickCount];\r\n const sn: StaveNoteStruct = {\r\n clef: smoNote.clef,\r\n duration,\r\n dots: smoNote.dots,\r\n type: smoNote.noteType\r\n };\r\n if (smoNote.flagState !== SmoNote.flagStates.auto) {\r\n sn.stem_direction = smoNote.flagState === SmoNote.flagStates.up ? 1 : -1;\r\n sn.auto_stem = false; \r\n } else {\r\n sn.auto_stem = true;\r\n }\r\n sn.keys = smoNoteToVexKeys(smoNote);\r\n return sn;\r\n}\r\nexport const getVoiceId = (smoMeasure:SmoMeasure, voiceIx: number) => {\r\n return smoMeasure.attrs.id + 'v' + voiceIx.toString();\r\n}\r\nfunction lastNoteInSystem(smoScore: SmoScore, selection: SmoSelection) {\r\n let rv = selection;\r\n let next: SmoSelection | null = null;\r\n next = SmoSelection.nextNoteSelection(smoScore, selection.selector.staff,\r\n selection.selector.measure, selection.selector.voice, selection.selector.tick);\r\n while (next) {\r\n if (next.measure.svg.rowInSystem !== selection.measure.svg.rowInSystem) {\r\n return rv;\r\n break;\r\n }\r\n rv = next;\r\n next = SmoSelection.nextNoteSelection(smoScore, next.selector.staff,\r\n next.selector.measure, next.selector.voice, next.selector.tick);\r\n }\r\n return rv;\r\n}\r\nfunction createMeasureModifiers(smoMeasure: SmoMeasure, strs: string[]) {\r\n const sb = smoMeasure.getStartBarline();\r\n const eb = smoMeasure.getEndBarline();\r\n const sym = smoMeasure.getRepeatSymbol();\r\n const vxStave = 'stave' + smoMeasure.attrs.id;\r\n if (smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && smoMeasure.format.padLeft === 0) {\r\n strs.push(`${vxStave}.setBegBarType(VF.Barline.type.NONE);`);\r\n } else {\r\n strs.push(`${vxStave}.setBegBarType(${toVexBarlineType(sb)});`);\r\n }\r\n if (smoMeasure.svg.multimeasureLength > 0 && !smoMeasure.svg.hideMultimeasure) {\r\n const bl = vexBarlineType[smoMeasure.svg.multimeasureEndBarline];\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n const bl = toVexBarlineType(eb);\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n }\r\n if (smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n strs.push(`${vxStave}.setSection('${rm.symbol}', 0);`);\r\n }\r\n }\r\n const tempo = smoMeasure.getTempo();\r\n if (tempo && smoMeasure.svg.forceTempo) {\r\n const vexTempo = tempo.toVexTempo();\r\n const tempoString = JSON.stringify(vexTempo);\r\n strs.push(`${vxStave}.setTempo(JSON.parse('${tempoString}'), -1 * ${tempo.yOffset});`);\r\n }\r\n}\r\nexport function renderVoltas(smoScore: SmoScore, startMeasure: number, endMeasure: number, strs: string[]) {\r\n const voltas = smoScore.staves[0].getVoltaMap(startMeasure, endMeasure);\r\n for (var i = 0; i < voltas.length; ++i) {\r\n const ending = voltas[i];\r\n for (var j = ending.startBar; j <= ending.endBar; ++j) {\r\n const smoMeasure = smoScore.staves[0].measures[j];\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vx = smoMeasure.staffX + ending.xOffsetStart;\r\n const vxStave = 'stave' + smoMeasure.attrs.id;\r\n const endingName = ending.attrs.id + smoMeasure.attrs.id;\r\n strs.push(`const ${endingName} = new VF.Volta(${vtype}, '${ending.number.toString()}', ${vx}, ${ending.yOffset});`);\r\n strs.push(`${endingName}.setContext(context).draw(${vxStave}, -1 * ${ending.xOffsetEnd});`);\r\n }\r\n }\r\n}\r\nfunction renderModifier(modifier: StaffModifierBase, startNote: SmoNote | null, endNote: SmoNote | null, strs: string[]) {\r\n const modifierName = getId();\r\n const startKey = SmoSelector.getNoteKey(modifier.startSelector);\r\n const endKey = SmoSelector.getNoteKey(modifier.endSelector);\r\n strs.push(`// modifier from ${startKey} to ${endKey}`);\r\n if (modifier.ctor === 'SmoStaffHairpin' && startNote && endNote) {\r\n const hp = modifier as SmoStaffHairpin; \r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = startNote.attrs.id;\r\n const hpParams = { first_note: vxStart, last_note: vxEnd };\r\n strs.push(`const ${modifierName} = new VF.StaveHairpin({ first_note: ${vxStart}, last_note: ${vxEnd},\r\n firstNote: ${vxStart}, lastNote: ${vxEnd} });`);\r\n strs.push(`${modifierName}.setRenderOptions({ height: ${hp.height}, y_shift: ${hp.yOffset}, left_shift_px: ${hp.xOffsetLeft},right_shift_px: ${hp.xOffsetRight} });`);\r\n strs.push(`${modifierName}.setContext(context).setPosition(${hp.position}).draw();`);\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const slur = modifier as SmoSlur; \r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n let slurX = 0;\r\n if (startNote === null || endNote === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n const hpParams = {\r\n thickness: slur.thickness,\r\n xShift: slurX,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n invert: slur.invert,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const paramStrings = JSON.stringify(hpParams);\r\n strs.push(`const ${modifierName} = new VF.Curve(${vxStart}, ${vxEnd}, JSON.parse('${paramStrings}'));`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n // TODO: handle case of overlap\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n if (ctie.lines.length > 0) {\r\n // Hack: if a chord changed, the ties may no longer be valid. We should check\r\n // this when it changes.\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n strs.push(`const ${modifierName} = new VF.StaveTie({ first_note: ${vxStart}, last_note: ${vxEnd}, \r\n firstNote: ${vxStart}, lastNote: ${vxEnd}, first_indices: [${fromLines}], last_indices: [${toLines}]});`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket' && startNote && endNote) {\r\n const ctext = modifier as SmoStaffTextBracket;\r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = endNote.attrs.id;\r\n if (vxStart && vxEnd) {\r\n strs.push(`const ${modifierName} = new VF.TextBracket({ start: ${vxStart}, stop: ${vxEnd}, text: '${ctext.text}', position: ${ctext.position} });`);\r\n strs.push(`${modifierName}.setLine(${ctext.line}).setContext(context).draw();`);\r\n }\r\n }\r\n}\r\nfunction renderModifiers(smoScore: SmoScore, staff: SmoSystemStaff, \r\n startMeasure: number, endMeasure: number, strs: string[]) {\r\n const modifiers = staff.renderableModifiers.filter((mm) => mm.startSelector.measure >= startMeasure && mm.endSelector.measure <= endMeasure);\r\n modifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(smoScore,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(smoScore,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n // TODO: handle case of multiple line slur/tie\r\n if (startNote && startNote.note && endNote && endNote.note) {\r\n if (endNote.measure.svg.lineIndex !== startNote.measure.svg.lineIndex) {\r\n const endFirst = lastNoteInSystem(smoScore, startNote);\r\n if (endFirst && endFirst.note) {\r\n const startLast = SmoSelection.noteSelection(smoScore, endNote.selector.staff,\r\n endNote.selector.measure, 0, 0);\r\n if (startLast && startLast.note) {\r\n renderModifier(modifier, startNote.note, null, strs);\r\n renderModifier(modifier, null, endNote.note, strs);\r\n }\r\n }\r\n } else {\r\n renderModifier(modifier, startNote.note, endNote.note, strs);\r\n }\r\n }\r\n });\r\n}\r\nfunction createStaveNote(renderInfo: VexNoteRenderInfo, key: string, row: number, strs: string[]) {\r\n const { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj } = { ...renderInfo };\r\n const id = smoNote.attrs.id;\r\n const ctorInfo = smoNoteToStaveNote(smoNote);\r\n const ctorString = JSON.stringify(ctorInfo);\r\n if (smoNote.noteType === '/') {\r\n strs.push(`const ${id} = new VF.GlyphNote(new VF.Glyph('repeatBarSlash', 40), { duration: '${ctorInfo.duration}' });`)\r\n } else {\r\n strs.push(`const ${id} = new VF.StaveNote(JSON.parse('${ctorString}'))`);\r\n }\r\n smoNoteToGraceNotes(smoNote, strs);\r\n strs.push(`${id}.setAttribute('id', '${id}');`);\r\n if (smoNote.fillStyle) {\r\n strs.push(`${id}.setStyle({ fillStyle: '${smoNote.fillStyle}' });`);\r\n } else if (voiceIx > 0) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#115511\" });`);\r\n } else if (smoNote.isHidden()) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#ffffff00\" });`);\r\n }\r\n if (smoNote.noteType === 'n') {\r\n smoNote.pitches.forEach((pitch, ix) => {\r\n const zz = SmoMusic.accidentalDisplay(pitch, key,\r\n tickmapObject.tickmaps[voiceIx].durationMap[noteIx], tickmapObject.accidentalArray);\r\n if (zz) {\r\n const aname = id + ix.toString() + 'acc';\r\n strs.push(`const ${aname} = new VF.Accidental('${zz.symbol}');`);\r\n if (zz.courtesy) {\r\n strs.push(`${aname}.setAsCautionary();`);\r\n }\r\n strs.push(`${id}.addModifier(${aname}, ${ix});`);\r\n }\r\n }); \r\n }\r\n for (var i = 0; i < smoNote.dots; ++i) {\r\n for (var j = 0; j < smoNote.pitches.length; ++j) {\r\n strs.push(`${id}.addModifier(new VF.Dot(), ${j});`); \r\n }\r\n }\r\n smoNote.articulations.forEach((aa) => {\r\n const position: number = SmoArticulation.positionToVex[aa.position];\r\n const vexArt = SmoArticulation.articulationToVex[aa.articulation];\r\n const sn = getId();\r\n strs.push(`const ${sn} = new VF.Articulation('${vexArt}').setPosition(${position});`);\r\n strs.push(`${id}.addModifier(${sn}, 0);`);\r\n });\r\n smoNote.getJazzOrnaments().forEach((ll) => {\r\n const vexCode = ll.toVex();\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`)\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n smoNote.getOrnaments().forEach((ll) => {\r\n const vexCode = vexOrnaments[ll.ornament];\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n strs.push(`${ll.attrs.id}.setDelayed(true);`);\r\n }\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n const lyrics = smoNote.getTrueLyrics();\r\n if (smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n let classString = 'lyric lyric-' + ll.verse;\r\n let text = ll.getText();\r\n if (!ll.skipRender) {\r\n if (!text.length && ll.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (text.length) {\r\n const sn = ll.attrs.id;\r\n text = text.replace(\"'\",\"\\\\'\");\r\n strs.push(`const ${sn} = new VF.Annotation('${text}');`);\r\n strs.push(`${sn}.setAttribute('id', '${sn}');`);\r\n const weight = ll.fontInfo.weight ?? 'normal';\r\n strs.push(`${sn}.setFont('${ll.fontInfo.family}', ${ll.fontInfo.size}, '${weight}');`)\r\n strs.push(`${sn}.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);`);\r\n strs.push(`${id}.addModifier(${sn});`);\r\n if (ll.adjY > 0) {\r\n const adjy = Math.round(ll.adjY);\r\n lyricAdj.push(`context.svg.getElementById('vf-${sn}').setAttributeNS('', 'transform', 'translate(0 ${adjy})');`);\r\n }\r\n if (ll.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n strs.push(`${sn}.addClass('${classString}');`);\r\n }\r\n }\r\n });\r\n }\r\n const chords = smoNote.getChords();\r\n chords.forEach((chord) => {\r\n strs.push(`const ${chord.attrs.id} = new VF.ChordSymbol();`);\r\n strs.push(`${chord.attrs.id}.setAttribute('id', '${chord.attrs.id}');`);\r\n const vblocks = getVexChordBlocks(chord);\r\n vblocks.forEach((vblock) => {\r\n const glyphParams = JSON.stringify(vblock);\r\n if (vblock.glyph) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${vblock.glyph}', JSON.parse('${glyphParams}'));`);\r\n } else {\r\n const btext = vblock.text ?? '';\r\n if (btext.trim().length) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${btext}', JSON.parse('${glyphParams}'));`);\r\n }\r\n }\r\n });\r\n strs.push(`${chord.attrs.id}.setFont('${chord.fontInfo.family}', ${chord.fontInfo.size}).setReportWidth(${chord.adjustNoteWidth});`);\r\n strs.push(`${id}.addModifier(${chord.attrs.id}, 0);`);\r\n });\r\n return id;\r\n}\r\nfunction createColumn(groups: Record, strs: string[]) {\r\n const groupKeys = Object.keys(groups);\r\n groupKeys.forEach((groupKey) => {\r\n const music = groups[groupKey];\r\n // Need to create beam groups before formatting\r\n strs.push(`// create beam groups and tuplets for format grp ${groupKey} before formatting`);\r\n music.measures.forEach((smoMeasure) => {\r\n createBeamGroups(smoMeasure, strs);\r\n createTuplets(smoMeasure, strs);\r\n });\r\n strs.push(' ');\r\n strs.push(`// formatting measures in staff group ${groupKey}`);\r\n const joinVoiceStr = '[' + music.voiceStrings.join(',') + ']';\r\n const widthMeasure = music.measures[0];\r\n const staffWidth = Math.round(widthMeasure.staffWidth -\r\n (widthMeasure.svg.adjX + widthMeasure.svg.adjRight + widthMeasure.format.padLeft) - 10);\r\n strs.push(`${music.formatter}.format(${joinVoiceStr}, ${staffWidth});`);\r\n music.measures.forEach((smoMeasure) => {\r\n createMeasure(smoMeasure, music.heightOffset, strs);\r\n });\r\n });\r\n}\r\nfunction createBeamGroups(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const bgs = smoMeasure.beamGroups.filter((bb) => bb.voice === voiceIx);\r\n for (var i = 0; i < bgs.length; ++i) {\r\n const bg = bgs[i];\r\n let keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n const sdName = 'dir' + bg.attrs.id;\r\n strs.push(`const ${sdName} = ${bg.notes[keyNoteIx].attrs.id}.getStemDirection();`);\r\n const nar: string[] = [];\r\n for (var j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n if (note.noteType !== '/') {\r\n nar.push(vexNote);\r\n }\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n strs.push(`${vexNote}.setStemDirection(${sdName});`);\r\n }\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${bg.attrs.id} = new VF.Beam(${narString});`);\r\n }\r\n });\r\n}\r\nfunction createTuplets(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const tps = smoMeasure.tuplets.filter((tp) => tp.voice === voiceIx);\r\n for (var i = 0; i < tps.length; ++i) {\r\n const tp = tps[i];\r\n const nar: string[] = [];\r\n for (var j = 0; j < tp.notes.length; ++j) {\r\n const note = tp.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n nar.push(vexNote);\r\n }\r\n const direction = tp.getStemDirection(smoMeasure.clef) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const tpParams: TupletOptions = {\r\n num_notes: tp.num_notes,\r\n notes_occupied: tp.notes_occupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: direction\r\n };\r\n const tpParamString = JSON.stringify(tpParams);\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${tp.attrs.id} = new VF.Tuplet(${narString}, JSON.parse('${tpParamString}'));`);\r\n }\r\n });\r\n}\r\nfunction createMeasure(smoMeasure: SmoMeasure, heightOffset: number, strs: string[]) {\r\n const ssid = 'stave' + smoMeasure.attrs.id;\r\n const staffY = smoMeasure.svg.staffY + heightOffset;\r\n const staffWidth = Math.round(smoMeasure.svg.staffWidth);\r\n strs.push(`const ${ssid} = new VF.Stave(${smoMeasure.svg.staffX}, ${staffY}, ${staffWidth});`);\r\n strs.push(`${ssid}.setAttribute('id', '${ssid}');`);\r\n createMeasureModifiers(smoMeasure, strs);\r\n if (smoMeasure.svg.forceClef) {\r\n strs.push(`${ssid}.addClef('${smoMeasure.clef}');`);\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n const ts = smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (smoMeasure.timeSignature.displayString.length) {\r\n tsString = smoMeasure.timeSignature.displayString;\r\n }\r\n strs.push(`${ssid}.addTimeSignature('${tsString}');`);\r\n }\r\n if (smoMeasure.svg.forceKeySignature) {\r\n const key = SmoMusic.vexKeySignatureTranspose(smoMeasure.keySignature, 0);\r\n const ksid = 'key' + smoMeasure.attrs.id;\r\n strs.push(`const ${ksid} = new VF.KeySignature('${key}');`);\r\n if (smoMeasure.canceledKeySignature) {\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(smoMeasure.canceledKeySignature, 0);\r\n strs.push(`${ksid}.cancelKey('${canceledKey}');`);\r\n }\r\n strs.push(`${ksid}.addToStave(${ssid});`);\r\n }\r\n strs.push(`${ssid}.setContext(context);`);\r\n strs.push(`${ssid}.draw();`);\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const vs = getVoiceId(smoMeasure, voiceIx);\r\n strs.push(`${vs}.draw(context, ${ssid});`);\r\n });\r\n smoMeasure.beamGroups.forEach((bg) => {\r\n strs.push(`${bg.attrs.id}.setContext(context);`);\r\n strs.push(`${bg.attrs.id}.draw();`)\r\n });\r\n smoMeasure.tuplets.forEach((tp) => {\r\n strs.push(`${tp.attrs.id}.setContext(context).draw();`)\r\n })\r\n}\r\n// ## SmoToVex\r\n// Simple serialize class that produced VEX note and voice objects\r\n// for vex EasyScore (for easier bug reports and test cases)\r\nexport class SmoToVex {\r\n static convert(smoScore: SmoScore, options: any): string {\r\n let div = 'boo';\r\n let page = 0;\r\n options = options ?? {};\r\n if (typeof(options['div']) === 'string') {\r\n div = options.div\r\n }\r\n if (typeof(options['page']) === 'number') {\r\n page = options.page;\r\n }\r\n let startMeasure = -1;\r\n let endMeasure = -1;\r\n const strs: string[] = [];\r\n const pageHeight = smoScore.layoutManager?.getGlobalLayout().pageHeight ?? 1056;\r\n const pageWidth = smoScore.layoutManager?.getGlobalLayout().pageWidth ?? 816;\r\n const pageLength = smoScore.staves[0].measures[smoScore.staves[0].measures.length - 1].svg.pageIndex + 1;\r\n let scoreName = smoScore.scoreInfo.title + ' p ' + (page + 1).toString() + '/' + pageLength.toString();\r\n const scoreSub = smoScore.scoreInfo.subTitle?.length ? `(${smoScore.scoreInfo.subTitle})` : '';\r\n scoreName = `${scoreName} ${scoreSub} by ${smoScore.scoreInfo.composer}`;\r\n strs.push(`// @@ ${scoreName}`);\r\n strs.push('function main() {');\r\n strs.push('// create the div and svg element for the music');\r\n strs.push(`const div = document.getElementById('${div}');`);\r\n strs.push('const VF = Vex.Flow;');\r\n strs.push(`const renderer = new VF.Renderer(div, VF.Renderer.Backends.SVG);`);\r\n const zoomScale = (smoScore.layoutManager?.getZoomScale() ?? 1.0);\r\n const svgScale = (smoScore.layoutManager?.getGlobalLayout().svgScale ?? 1.0);\r\n const width = zoomScale * pageWidth;\r\n const height = zoomScale * pageHeight;\r\n const scale = svgScale * zoomScale;\r\n const heightOffset = -1 * (height * page) / scale;\r\n const vbWidth = Math.round(width / scale);\r\n const vbHeight = Math.round(height / scale);\r\n strs.push('const context = renderer.getContext();');\r\n strs.push('const svg = context.svg');\r\n strs.push(`svg.setAttributeNS('', 'width', '${width}');`);\r\n strs.push(`svg.setAttributeNS('', 'height', '${height}');`);\r\n strs.push(`svg.setAttributeNS('', 'viewBox', '0 0 ${vbWidth} ${vbHeight}');`);\r\n strs.push('//');\r\n strs.push('// create the musical objects');\r\n const font = smoScore.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n const fs = fontStacks[font.family].join(',');\r\n strs.push(`VF.setMusicFont(${fs});`);\r\n }\r\n const measureCount = smoScore.staves[0].measures.length;\r\n const lyricAdj: string[] = [];\r\n for (var k = 0; k < measureCount; ++k) {\r\n const groupMap: Record = {};\r\n if (smoScore.staves[0].measures[k].svg.pageIndex < page) {\r\n continue;\r\n }\r\n if (smoScore.staves[0].measures[k].svg.pageIndex > page) {\r\n break;\r\n }\r\n startMeasure = startMeasure < 0 ? k : startMeasure;\r\n endMeasure = Math.max(k, endMeasure);\r\n smoScore.staves.forEach((smoStaff, staffIx) => {\r\n const smoMeasure = smoStaff.measures[k];\r\n const selection = SmoSelection.measureSelection(smoScore, smoStaff.staffId, smoMeasure.measureNumber.measureIndex);\r\n if (!selection) {\r\n throw('ouch no selection');\r\n }\r\n const systemGroup = smoScore.getSystemGroupForStaff(selection);\r\n const justifyGroup: string = (systemGroup && smoMeasure.format.autoJustify) ? systemGroup.attrs.id : selection.staff.attrs.id;\r\n const tickmapObject = smoMeasure.createMeasureTickmaps();\r\n const measureIx = smoMeasure.measureNumber.measureIndex;\r\n const voiceStrings: string[] = [];\r\n const fmtid = 'fmt' + smoMeasure.attrs.id + measureIx.toString();\r\n strs.push(`const ${fmtid} = new VF.Formatter();`);\r\n if (!groupMap[justifyGroup]) {\r\n groupMap[justifyGroup] = {\r\n formatter: fmtid,\r\n measures: [],\r\n heightOffset,\r\n voiceStrings: [],\r\n systemGroup\r\n }\r\n }\r\n groupMap[justifyGroup].measures.push(smoMeasure);\r\n strs.push('//');\r\n strs.push(`// voices and notes for stave ${smoStaff.staffId} ${smoMeasure.measureNumber.measureIndex}`);\r\n smoMeasure.voices.forEach((smoVoice: SmoVoice, voiceIx: number) => { \r\n const vn = getVoiceId(smoMeasure, voiceIx);\r\n groupMap[justifyGroup].voiceStrings.push(vn);\r\n const vc = vn + 'ar';\r\n const ts = JSON.stringify({\r\n numBeats: smoMeasure.timeSignature.actualBeats,\r\n beatValue: smoMeasure.timeSignature.beatDuration\r\n });\r\n strs.push(`const ${vn} = new VF.Voice(JSON.parse('${ts}')).setMode(VF.Voice.Mode.SOFT);`);\r\n strs.push(`const ${vc} = [];`);\r\n smoVoice.notes.forEach((smoNote: SmoNote, noteIx: number) => {\r\n const renderInfo: VexNoteRenderInfo = { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj };\r\n const noteId = createStaveNote(renderInfo, smoMeasure.keySignature, smoMeasure.svg.rowInSystem, strs);\r\n strs.push(`${vc}.push(${noteId});`);\r\n });\r\n strs.push(`${vn}.addTickables(${vc})`);\r\n voiceStrings.push(vn);\r\n strs.push(`${fmtid}.joinVoices([${vn}]);`);\r\n });\r\n if (smoMeasure.svg.rowInSystem === smoScore.staves.length - 1) {\r\n createColumn(groupMap, strs);\r\n const mapKeys = Object.keys(groupMap);\r\n mapKeys.forEach((mapKey) => {\r\n const tmpGroup = groupMap[mapKey];\r\n if (tmpGroup.systemGroup) {\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const startMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.startSelector.staff].measures[k].attrs.id;\r\n const endMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.endSelector.staff].measures[k].attrs.id;\r\n const leftConnector = leftConnectorVx(tmpGroup.systemGroup);\r\n const rightConnector = rightConnectorVx(tmpGroup.systemGroup);\r\n const jgname = justifyGroup + startMeasure + staffIx.toString();\r\n if (systemIndex === 0 && smoScore.staves.length > 1) {\r\n strs.push(`const left${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${leftConnector});`);\r\n strs.push(`left${jgname}.setContext(context).draw();`);\r\n }\r\n let endStave = false;\r\n if (smoMeasure.measureNumber.systemIndex !== 0) {\r\n if (smoMeasure.measureNumber.systemIndex === smoScore.staves[0].measures.length - 1) {\r\n endStave = true;\r\n } else if (smoScore.staves[0].measures.length > k + 1 &&\r\n smoScore.staves[0].measures[k + 1].measureNumber.systemIndex === 0) {\r\n endStave = true;\r\n }\r\n }\r\n if (endStave) {\r\n strs.push(`const right${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${rightConnector});`);\r\n strs.push(`right${jgname}.setContext(context).draw();`);\r\n } \r\n }\r\n });\r\n }\r\n });\r\n }\r\n smoScore.staves.forEach((staff) => {\r\n renderModifiers(smoScore, staff, startMeasure, endMeasure, strs);\r\n });\r\n renderVoltas(smoScore, startMeasure, endMeasure, strs);\r\n if (lyricAdj.length) {\r\n strs.push('// ');\r\n strs.push('// Align lyrics on different measures, once they are rendered.');\r\n }\r\n const render = strs.concat(lyricAdj);\r\n render.push('}');\r\n return render.join(`\\n`);\r\n // console.log(render.join(`\\n`));\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## Description:\r\n// This file calls the vexflow routines that actually render a\r\n// measure of music. If multiple measures are justified in a\r\n// column, the rendering is deferred until all the measures have been\r\n// preformatted.\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\nimport { SmoRepeatSymbol, SmoMeasureText, SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SourceSerifProFont } from '../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoLyric, \r\n SmoArpeggio, SmoNoteModifierBase, VexAnnotationParams } from '../../smo/data/noteModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoMeasure, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { Clef, IsClef } from '../../smo/data/common';\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, toVexSymbol,\r\n toVexTextJustification, toVexTextPosition, getVexChordBlocks, toVexStemDirection } from './smoAdapter';\r\nimport { VexFlow, Stave,StemmableNote, Note, Beam, Tuplet, Voice,\r\n Formatter, Accidental, Annotation, StaveNoteStruct, StaveText, StaveModifier,\r\n createStaveText, renderDynamics, applyStemDirection,\r\n getVexNoteParameters, defaultNoteScale, defaultCueScale, getVexTuplets,\r\n createStave, createVoice, getOrnamentGlyph, getSlashGlyph, getRepeatBar, getMultimeasureRest,\r\n addChordGlyph } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n\r\ndeclare var $: any;\r\n// const VF = eval('Vex.Flow');\r\n\r\n/**\r\n * This is the interface for VexFlow library that actually does the engraving.\r\n * @category SuiRender\r\n */\r\nexport class VxMeasure {\r\n context: SvgPage;\r\n printing: boolean;\r\n selection: SmoSelection;\r\n softmax: number;\r\n smoMeasure: SmoMeasure;\r\n rendered: boolean = false;\r\n noteToVexMap: Record = {};\r\n beamToVexMap: Record = {};\r\n tupletToVexMap: Record = {};\r\n multimeasureRest: any | null = null;\r\n vexNotes: Note[] = [];\r\n vexBeamGroups: Beam[] = [];\r\n vexTuplets: Tuplet[] = [];\r\n tickmapObject: MeasureTickmaps | null = null;\r\n stave: Stave | null = null; // vex stave\r\n voiceNotes: Note[] = []; // notes for current voice, as rendering\r\n voiceAr: Voice[] = [];\r\n formatter: Formatter | null = null;\r\n allCues: boolean = false;\r\n modifiersToBox: SmoNoteModifierBase[] = [];\r\n collisionMap: Record = {};\r\n dbgLeftX: number = 0;\r\n dbgWidth: number = 0;\r\n\r\n constructor(context: SvgPage, selection: SmoSelection, printing: boolean, softmax: number) {\r\n this.context = context;\r\n this.rendered = false;\r\n this.selection = selection;\r\n this.smoMeasure = this.selection.measure;\r\n this.printing = printing;\r\n this.allCues = selection.staff.partInfo.displayCues;\r\n this.tupletToVexMap = {};\r\n this.vexNotes = [];\r\n this.vexBeamGroups = [];\r\n this.vexBeamGroups = [];\r\n this.beamToVexMap = {};\r\n this.softmax = softmax;\r\n }\r\n\r\n static get fillStyle() {\r\n return '#000';\r\n }\r\n\r\n isWholeRest() {\r\n return (this.smoMeasure.voices.length === 1 &&\r\n this.smoMeasure.voices[0].notes.length === 1 &&\r\n this.smoMeasure.voices[0].notes[0].isRest()\r\n );\r\n }\r\n // We add microtones to the notes, without regard really to how they interact\r\n _createMicrotones(smoNote: SmoNote, vexNote: Note) {\r\n const tones = smoNote.getMicrotones();\r\n tones.forEach((tone) => {\r\n const acc: Accidental = new VF.Accidental(tone.toVex);\r\n vexNote.addModifier(acc, tone.pitchIndex);\r\n });\r\n }\r\n createDots(smoNote: SmoNote, vexNote: Note) {\r\n for (var i = 0; i < smoNote.dots; ++i) {\r\n for (var j = 0; j < smoNote.pitches.length; ++j) {\r\n if (!this.isWholeRest()) {\r\n vexNote.addModifier(new VF.Dot(), j);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Create accidentals based on the active key and previous accidentals in this voice\r\n * @param smoNote \r\n * @param vexNote \r\n * @param tickIndex \r\n * @param voiceIx \r\n * @returns \r\n */\r\n _createAccidentals(smoNote: SmoNote, vexNote: Note, tickIndex: number, voiceIx: number) {\r\n let i = 0;\r\n if (smoNote.noteType === '/') {\r\n return;\r\n }\r\n if (smoNote.noteType !== 'n') {\r\n this.createDots(smoNote, vexNote);\r\n return;\r\n }\r\n smoNote.accidentalsRendered = [];\r\n for (i = 0; i < smoNote.pitches.length && this.tickmapObject !== null; ++i) {\r\n const pitch = smoNote.pitches[i];\r\n const zz = SmoMusic.accidentalDisplay(pitch, this.smoMeasure.keySignature,\r\n this.tickmapObject.tickmaps[voiceIx].durationMap[tickIndex], this.tickmapObject.accidentalArray);\r\n if (zz) {\r\n const acc = new VF.Accidental(zz.symbol);\r\n if (zz.courtesy) {\r\n acc.setAsCautionary();\r\n }\r\n smoNote.accidentalsRendered.push(pitch.accidental);\r\n vexNote.addModifier(acc, i);\r\n } else {\r\n smoNote.accidentalsRendered.push('');\r\n }\r\n }\r\n this.createDots(smoNote, vexNote);\r\n this._createMicrotones(smoNote, vexNote);\r\n if (smoNote.arpeggio) {\r\n vexNote.addModifier(new VF.Stroke(smoNote.arpeggio.typeCode));\r\n }\r\n }\r\n\r\n _createJazzOrnaments(smoNote: SmoNote, vexNote: Note) {\r\n const o = smoNote.getJazzOrnaments();\r\n o.forEach((ll) => {\r\n const mod = new VF.Ornament(ll.toVex());\r\n vexNote.addModifier(mod, 0);\r\n });\r\n }\r\n\r\n _createOrnaments(smoNote: SmoNote, vexNote: Note) {\r\n const o = smoNote.getOrnaments();\r\n o.forEach((ll) => {\r\n const ornamentCode = getOrnamentGlyph(ll.ornament);\r\n const mod = new VF.Ornament(ornamentCode);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n mod.setDelayed(true);\r\n }\r\n vexNote.addModifier(mod, 0);\r\n });\r\n }\r\n _addLyricAnnotationToNote(vexNote: Note, lyric: SmoLyric) {\r\n let classString = 'lyric lyric-' + lyric.verse;\r\n let text = lyric.getText();\r\n if (lyric.skipRender) {\r\n return;\r\n }\r\n if (!text.length && lyric.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (!text.length) {\r\n return;\r\n }\r\n const vexL: Annotation = new VF.Annotation(text); // .setReportWidth(lyric.adjustNoteWidth);\r\n vexL.setAttribute('id', lyric.attrs.id); //\r\n\r\n // If we adjusted this note for the lyric, adjust the lyric as well.\r\n vexL.setFont(lyric.fontInfo.family, lyric.fontInfo.size, lyric.fontInfo.weight);\r\n vexL.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);\r\n vexNote.addModifier(vexL);\r\n if (lyric.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n vexL.addClass(classString);\r\n }\r\n\r\n _addChordChangeToNote(vexNote: Note, lyric: SmoLyric) {\r\n const cs = new VF.ChordSymbol();\r\n cs.setAttribute('id', lyric.attrs.id);\r\n const blocks = getVexChordBlocks(lyric);\r\n blocks.forEach((block) => {\r\n if (block.glyph) {\r\n // Vex 5 broke this, does not distinguish between glyph and text\r\n // the reverse is for vex4 which expects the non-mangled identifier here,\r\n // e.g. 'diminished' and not 'csymDiminished'\r\n addChordGlyph(cs, block.glyph);\r\n } else {\r\n cs.addGlyphOrText(block.text ?? '', block);\r\n }\r\n });\r\n cs.setFont(lyric.fontInfo.family, lyric.fontInfo.size).setReportWidth(lyric.adjustNoteWidth);\r\n vexNote.addModifier(cs, 0);\r\n const classString = 'chord chord-' + lyric.verse;\r\n cs.addClass(classString);\r\n }\r\n\r\n _createLyric(smoNote: SmoNote, vexNote: Note) {\r\n const lyrics = smoNote.getTrueLyrics();\r\n if (smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n this._addLyricAnnotationToNote(vexNote, ll);\r\n });\r\n }\r\n const chords = smoNote.getChords();\r\n chords.forEach((chord) => {\r\n this._addChordChangeToNote(vexNote, chord);\r\n });\r\n }\r\n\r\n _createGraceNotes(smoNote: SmoNote, vexNote: Note) {\r\n let i = 0;\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const group: any[] = [];\r\n gar.forEach((g) => {\r\n const gr = new VF.GraceNote(g.toVexGraceNote());\r\n gr.setAttribute('id', g.attrs.id);\r\n for (i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const accidental = new VF.Accidental(pitch.accidental);\r\n if (pitch.cautionary) {\r\n accidental.setAsCautionary();\r\n }\r\n gr.addModifier(accidental, i);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n gr.addClass('grace-note'); // note: this doesn't work :(\r\n\r\n g.renderId = gr.getAttribute('id');\r\n group.push(gr);\r\n });\r\n const grace: any = new VF.GraceNoteGroup(group);\r\n if (toBeam) {\r\n grace.beamNotes();\r\n }\r\n vexNote.addModifier(grace, 0);\r\n }\r\n }\r\n\r\n createCollisionTickmap() {\r\n let i = 0;\r\n let j = 0;\r\n if (!this.tickmapObject) {\r\n return;\r\n }\r\n for (i = 0; i < this.smoMeasure.voices.length; ++i) {\r\n const tm = this.tickmapObject.tickmaps[i];\r\n for (j = 0; j < tm.durationMap.length; ++j) {\r\n if (typeof(this.collisionMap[tm.durationMap[j]]) === 'undefined') {\r\n this.collisionMap[tm.durationMap[j]] = [];\r\n }\r\n this.collisionMap[tm.durationMap[j]].push(this.smoMeasure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n isCollision(voiceIx: number, tickIx: number): boolean {\r\n let i = 0;\r\n let j = 0;\r\n let k = 0;\r\n let staffLines: number[] = [];\r\n if (!this.tickmapObject) {\r\n return false;\r\n }\r\n const tick = this.tickmapObject.tickmaps[voiceIx].durationMap[tickIx];\r\n // Just one note, no collision\r\n if (this.collisionMap[tick].length < 2) {\r\n return false;\r\n }\r\n for (i = 0; i < this.collisionMap[tick].length; ++i) {\r\n const note = this.collisionMap[tick][i];\r\n for (j = 0; j < note.pitches.length; ++j) {\r\n const clef: Clef = IsClef(note.clef) ? note.clef : 'treble';\r\n const pitch = note.pitches[j];\r\n const curLine = SmoMusic.pitchToStaffLine(clef, pitch);\r\n for (k = 0;k < staffLines.length; ++k) {\r\n if (Math.abs(curLine - staffLines[k]) < 1) {\r\n return true;\r\n }\r\n }\r\n staffLines.push(curLine);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * convert a smoNote into a vxNote so it can be rasterized\r\n * @param smoNote \r\n * @param tickIndex - used to calculate accidental\r\n * @param voiceIx \r\n * @returns \r\n */\r\n _createVexNote(smoNote: SmoNote, tickIndex: number, voiceIx: number) {\r\n let vexNote: Note | null = null;\r\n let timestamp = new Date().valueOf();\r\n const closestTicks = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n const exactTicks = SmoMusic.ticksToDuration[smoNote.tickCount];\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n const smoNoteParams = {\r\n isTuplet: smoNote.isTuplet, measureIndex: this.smoMeasure.measureNumber.measureIndex,\r\n clef: smoNote.clef,\r\n closestTicks, exactTicks, keys,\r\n noteType: smoNote.noteType };\r\n const { noteParams, duration } = getVexNoteParameters(smoNoteParams);\r\n if (smoNote.noteType === '/') {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n vexNote = getSlashGlyph();\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n } else {\r\n const smoVexStemParams = {\r\n voiceCount: this.smoMeasure.voices.length,\r\n voiceIx,\r\n isAuto: smoNote.flagState === SmoNote.flagStates.auto,\r\n isUp: smoNote.flagState === SmoNote.flagStates.up\r\n }\r\n applyStemDirection(smoVexStemParams, noteParams);\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATA, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n vexNote = new VF.StaveNote(noteParams);\r\n if (voiceIx > 0 && this.isCollision(voiceIx, tickIndex)) {\r\n vexNote.setXShift(-10);\r\n }\r\n if (this.isWholeRest()) {\r\n noteParams.duration = 'wr';\r\n vexNote = new VF.StaveNote(noteParams);\r\n vexNote.setCenterAlignment(true);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATB, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n if (smoNote.fillStyle && !this.printing) {\r\n vexNote.setStyle({ fillStyle: smoNote.fillStyle });\r\n } else if (voiceIx > 0 && !this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#115511\" });\r\n } else if (smoNote.isHidden() && this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#ffffff00\" });\r\n }\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n }\r\n\r\n this._createAccidentals(smoNote, vexNote, tickIndex, voiceIx);\r\n this._createLyric(smoNote, vexNote);\r\n this._createOrnaments(smoNote, vexNote);\r\n this._createJazzOrnaments(smoNote, vexNote);\r\n this._createGraceNotes(smoNote, vexNote);\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATC, new Date().valueOf() - timestamp);\r\n\r\n return vexNote;\r\n }\r\n\r\n _renderArticulations(vix: number) {\r\n const i = 0;\r\n this.smoMeasure.voices[vix].notes.forEach((smoNote) => {\r\n smoNote.articulations.forEach((art) => {\r\n if (smoNote.noteType === 'n') {\r\n const vx = this.noteToVexMap[smoNote.attrs.id];\r\n const position: number = SmoArticulation.positionToVex[art.position];\r\n const vexArt = SmoArticulation.articulationToVex[art.articulation];\r\n const vxArt = new VF.Articulation(vexArt).setPosition(position);\r\n vx.addModifier(vxArt, i);\r\n }\r\n });\r\n });\r\n }\r\n\r\n _renderNoteGlyph(smoNote: SmoNote, textObj: SmoDynamicText) {\r\n var x = this.noteToVexMap[smoNote.attrs.id].getAbsoluteX() + textObj.xOffset;\r\n // the -3 is copied from vexflow textDynamics\r\n var y = this.stave!.getYForLine(textObj.yOffsetLine - 3) + textObj.yOffsetPixels;\r\n let maxh = 0;\r\n const minx = x;\r\n var group = this.context.getContext().openGroup();\r\n group.classList.add(textObj.attrs.id + '-' + smoNote.attrs.id);\r\n group.classList.add(textObj.attrs.id);\r\n // const duration = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n for (var i = 0; i < textObj.text.length; i += 1 ) {\r\n const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]].code,\r\n textObj.fontSize, x, y);\r\n /* const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]],\r\n textObj.fontSize, x, y); */\r\n x += width;\r\n maxh = Math.max(height, maxh); \r\n }\r\n textObj.logicalBox = SvgHelpers.boxPoints(minx, y + this.context.box.y, x - minx, maxh);\r\n textObj.element = group;\r\n this.modifiersToBox.push(textObj);\r\n this.context.getContext().closeGroup();\r\n }\r\n\r\n renderDynamics() {\r\n this.smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((smoNote) => {\r\n const mods = smoNote.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoDynamicText'\r\n );\r\n mods.forEach((btm) => {\r\n const tm = btm as SmoDynamicText;\r\n this._renderNoteGlyph(smoNote, tm);\r\n });\r\n });\r\n });\r\n }\r\n createRepeatSymbol() {\r\n this.voiceNotes = [];\r\n // const vexNote = new VF.GlyphNote('\\uE500', { duration: 'w' }, { line: 2 });\r\n const vexNote = getRepeatBar();\r\n vexNote.setCenterAlignment(true);\r\n this.vexNotes.push(vexNote);\r\n this.voiceNotes.push(vexNote);\r\n }\r\n /**\r\n * create an a array of VF.StaveNote objects to render the active voice.\r\n * @param voiceIx \r\n */\r\n createVexNotes(voiceIx: number) {\r\n let i = 0;\r\n this.voiceNotes = [];\r\n const voice = this.smoMeasure.voices[voiceIx];\r\n for (i = 0;\r\n i < voice.notes.length; ++i) {\r\n const smoNote = voice.notes[i];\r\n const vexNote = this._createVexNote(smoNote, i, voiceIx);\r\n this.noteToVexMap[smoNote.attrs.id] = vexNote;\r\n this.vexNotes.push(vexNote);\r\n this.voiceNotes.push(vexNote);\r\n if (isNaN(smoNote.ticks.numerator) || isNaN(smoNote.ticks.denominator)\r\n || isNaN(smoNote.ticks.remainder)) {\r\n throw ('vxMeasure: NaN in ticks');\r\n }\r\n }\r\n if (!this.smoMeasure.repeatSymbol) {\r\n this._renderArticulations(voiceIx);\r\n }\r\n }\r\n\r\n /**\r\n * Group the notes for beaming and create Vex beam objects\r\n * @param vix - voice index\r\n * @returns \r\n */\r\n createVexBeamGroups(vix: number) {\r\n let keyNoteIx = -1;\r\n let i = 0;\r\n let j = 0;\r\n let stemDirection = VF.Stem.DOWN;\r\n for (i = 0; i < this.smoMeasure.beamGroups.length; ++i) {\r\n const bg = this.smoMeasure.beamGroups[i];\r\n if (bg.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: StemmableNote[] = [];\r\n keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n\r\n // Fix stem bug: key off first non-rest note.\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n if (note.noteType === '/') {\r\n continue;\r\n }\r\n const vexNote = this.noteToVexMap[note.attrs.id];\r\n // some type of redraw condition?\r\n if (!(vexNote instanceof VF.StaveNote || vexNote instanceof VF.GraceNote)) {\r\n return;\r\n }\r\n if (keyNoteIx === j) {\r\n stemDirection = note.flagState === SmoNote.flagStates.auto ?\r\n vexNote.getStemDirection() : toVexStemDirection(note);\r\n }\r\n vexNote.setStemDirection(stemDirection);\r\n vexNotes.push(vexNote); \r\n }\r\n const vexBeam = new VF.Beam(vexNotes);\r\n this.beamToVexMap[bg.attrs.id] = vexBeam;\r\n this.vexBeamGroups.push(vexBeam);\r\n }\r\n }\r\n\r\n /**\r\n * Create the VF tuplet objects based on the smo tuplet objects\r\n * @param vix \r\n */\r\n // \r\n createVexTuplets(vix: number) {\r\n var j = 0;\r\n var i = 0;\r\n this.vexTuplets = [];\r\n this.tupletToVexMap = {};\r\n for (i = 0; i < this.smoMeasure.tuplets.length; ++i) {\r\n const tp = this.smoMeasure.tuplets[i];\r\n if (tp.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: Note[] = [];\r\n for (j = 0; j < tp.notes.length; ++j) {\r\n const smoNote = tp.notes[j];\r\n vexNotes.push(this.noteToVexMap[smoNote.attrs.id]);\r\n }\r\n const location = tp.getStemDirection(this.smoMeasure.clef) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const smoTupletParams = {\r\n vexNotes,\r\n numNotes: tp.numNotes,\r\n notesOccupied: tp.note_ticks_occupied,\r\n location\r\n }\r\n const vexTuplet = getVexTuplets(smoTupletParams);\r\n this.tupletToVexMap[tp.attrs.id] = vexTuplet;\r\n this.vexTuplets.push(vexTuplet);\r\n }\r\n }\r\n\r\n /**\r\n * create the modifiers for the stave itself, bar lines etc.\r\n */\r\n createMeasureModifiers() {\r\n const sb = this.smoMeasure.getStartBarline();\r\n const eb = this.smoMeasure.getEndBarline();\r\n const sym = this.smoMeasure.getRepeatSymbol();\r\n if (!this.stave) {\r\n return;\r\n }\r\n\r\n // don't create a begin bar for any but the 1st measure.\r\n if (this.smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && this.smoMeasure.format.padLeft === 0) {\r\n this.stave.setBegBarType(VF.Barline.type.NONE);\r\n } else {\r\n this.stave.setBegBarType(toVexBarlineType(sb));\r\n }\r\n if (this.smoMeasure.svg.multimeasureLength > 0 && !this.smoMeasure.svg.hideMultimeasure) {\r\n this.stave.setEndBarType(vexBarlineType[this.smoMeasure.svg.multimeasureEndBarline]);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n this.stave.setEndBarType(toVexBarlineType(eb));\r\n }\r\n if (sym && sym.symbol !== SmoRepeatSymbol.symbols.None) {\r\n const rep = new VF.Repetition(toVexSymbol(sym), sym.xOffset + this.smoMeasure.staffX, sym.yOffset);\r\n this.stave.getModifiers().push(rep);\r\n }\r\n const tms = this.smoMeasure.getMeasureText();\r\n // TODO: set font\r\n tms.forEach((tmb: SmoMeasureModifierBase) => {\r\n const tm = tmb as SmoMeasureText;\r\n const offset = tm.position === SmoMeasureText.positions.left ? this.smoMeasure.format.padLeft : 0;\r\n const staveText = createStaveText(tm.text, toVexTextPosition(tm), \r\n {\r\n shiftX: tm.adjustX + offset, shiftY: tm.adjustY, justification: toVexTextJustification(tm)\r\n }\r\n );\r\n this.stave?.addModifier(staveText);\r\n\r\n // hack - we can't create staveText directly so this is the only way I could set the font\r\n const ar = this.stave!.getModifiers();\r\n const vm = ar[ar.length - 1];\r\n vm.setFont(tm.fontInfo);\r\n });\r\n if (this.smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = this.smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n this.stave.setSection(rm.symbol, 0);\r\n }\r\n }\r\n\r\n const tempo = this.smoMeasure.getTempo();\r\n if (tempo && this.smoMeasure.svg.forceTempo) {\r\n this.stave.setTempo(tempo.toVexTempo(), -1 * tempo.yOffset);\r\n const vexTempo = this.stave.getModifiers().find((mod: StaveModifier) => mod.getAttribute('type') === 'StaveTempo');\r\n if (vexTempo) {\r\n vexTempo.setFont({ family: SourceSerifProFont.fontFamily, size: 13, weight: 'bold' });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create all Vex notes and modifiers. We defer the format and rendering so\r\n * we can align across multiple staves\r\n */\r\n preFormat() {\r\n var j = 0;\r\n if (this.smoMeasure.svg.element !== null) {\r\n this.smoMeasure.svg.element.remove();\r\n this.smoMeasure.svg.element = null;\r\n }\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n // Note: need to do this to get it into VEX KS format\r\n const staffX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft;\r\n const staffY = this.smoMeasure.staffY - this.context.box.y;\r\n const key = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.keySignature, 0);\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.canceledKeySignature, 0);\r\n const smoVexStaveParams = {\r\n x: staffX,\r\n y: staffY,\r\n padLeft: this.smoMeasure.format.padLeft,\r\n id: this.smoMeasure.attrs.id,\r\n staffX: this.smoMeasure.staffX,\r\n staffY: this.smoMeasure.staffY,\r\n staffWidth: this.smoMeasure.staffWidth,\r\n forceClef: this.smoMeasure.svg.forceClef,\r\n clef: this.smoMeasure.clef,\r\n forceKey: this.smoMeasure.svg.forceKeySignature,\r\n key,\r\n canceledKey,\r\n startX: this.smoMeasure.svg.maxColumnStartX,\r\n adjX: this.smoMeasure.svg.adjX,\r\n context: this.context.getContext()\r\n }\r\n this.stave = createStave(smoVexStaveParams);\r\n if (this.smoMeasure.svg.forceTimeSignature) {\r\n const ts = this.smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (this.smoMeasure.timeSignature.displayString.length) {\r\n tsString = this.smoMeasure.timeSignature.displayString;\r\n }\r\n this.stave.addTimeSignature(tsString);\r\n }\r\n // Connect it to the rendering context and draw!\r\n this.stave.setContext(this.context.getContext());\r\n\r\n this.createMeasureModifiers();\r\n\r\n this.tickmapObject = this.smoMeasure.createMeasureTickmaps();\r\n this.createCollisionTickmap();\r\n\r\n this.voiceAr = [];\r\n this.vexNotes = [];\r\n this.noteToVexMap = {};\r\n\r\n // If there are multiple voices, add them all to the formatter at the same time so they don't collide\r\n for (j = 0; j < this.smoMeasure.voices.length; ++j) {\r\n const smoVexVoiceParams = {\r\n actualBeats: this.smoMeasure.timeSignature.actualBeats,\r\n beatDuration: this.smoMeasure.timeSignature.beatDuration,\r\n notes: this.vexNotes\r\n }\r\n if (!this.smoMeasure.svg.multimeasureLength && !this.smoMeasure.repeatSymbol) {\r\n this.createVexNotes(j);\r\n smoVexVoiceParams.notes = this.voiceNotes;\r\n this.createVexTuplets(j);\r\n this.createVexBeamGroups(j);\r\n\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n if (this.smoMeasure.repeatSymbol) {\r\n this.createRepeatSymbol();\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n }\r\n\r\n // Need to format for x position, then set y position before drawing dynamics.\r\n this.formatter = new VF.Formatter({ softmaxFactor: this.softmax, globalSoftmax: false });\r\n this.formatter.joinVoices(this.voiceAr);\r\n /* this.voiceAr.forEach((voice) => {\r\n if (this.formatter) {\r\n this.formatter.joinVoices([voice]);\r\n }\r\n });*/\r\n }\r\n /**\r\n * Create the Vex formatter that calculates the X and Y positions of the notes. A formatter\r\n * may actually span multiple staves for justified staves. The notes are drawn in their\r\n * individual vxMeasure objects but formatting is done once for all justified staves\r\n * @param voices Voice objects from VexFlow\r\n * @returns \r\n */\r\n format(voices: Voice[]) {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n if (this.smoMeasure.svg.multimeasureLength > 0) {\r\n this.multimeasureRest = getMultimeasureRest(this.smoMeasure.svg.multimeasureLength);\r\n this.multimeasureRest.setContext(this.context.getContext());\r\n this.multimeasureRest.setStave(this.stave);\r\n return;\r\n }\r\n if (!this.formatter) {\r\n return;\r\n }\r\n const timestamp = new Date().valueOf();\r\n const staffWidth = this.smoMeasure.staffWidth -\r\n (this.smoMeasure.svg.maxColumnStartX + this.smoMeasure.svg.adjRight + this.smoMeasure.format.padLeft) - 10;\r\n this.dbgLeftX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft + this.smoMeasure.svg.adjX;\r\n this.dbgWidth = staffWidth;\r\n this.formatter.format(voices, staffWidth);\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.FORMAT, new Date().valueOf() - timestamp);\r\n }\r\n /**\r\n * render is called after format. Actually draw the things.\r\n */\r\n render() {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n var group = this.context.getContext().openGroup() as SVGSVGElement;\r\n this.smoMeasure.svg.element = group;\r\n var mmClass = this.smoMeasure.getClassId();\r\n var j = 0;\r\n try {\r\n // bound each measure in its own SVG group for easy deletion and mapping to screen coordinate\r\n group.classList.add(this.smoMeasure.attrs.id);\r\n group.classList.add(mmClass);\r\n group.id = this.smoMeasure.attrs.id;\r\n this.stave!.draw();\r\n this.smoMeasure.svg.element = group;\r\n\r\n for (j = 0; j < this.voiceAr.length; ++j) {\r\n this.voiceAr[j].draw(this.context.getContext(), this.stave!);\r\n }\r\n\r\n this.vexBeamGroups.forEach((b) => {\r\n b.setContext(this.context.getContext()).draw();\r\n });\r\n\r\n this.vexTuplets.forEach((tuplet) => {\r\n tuplet.setContext(this.context.getContext()).draw();\r\n });\r\n if (this.multimeasureRest) {\r\n this.multimeasureRest.draw();\r\n }\r\n // this._updateLyricDomSelectors();\r\n this.renderDynamics();\r\n // this.smoMeasure.adjX = this.stave.start_x - (this.smoMeasure.staffX);\r\n\r\n this.context.getContext().closeGroup();\r\n // layoutDebug.setTimestamp(layoutDebug.codeRegions.RENDER, new Date().valueOf() - timestamp);\r\n\r\n this.rendered = true;\r\n if (layoutDebug.mask & layoutDebug.values['adjust']) {\r\n SvgHelpers.debugBoxNoText(this.context.getContext().svg,\r\n SvgHelpers.boxPoints(this.dbgLeftX, \r\n this.smoMeasure.svg.staffY, this.dbgWidth, 40), 'render-x-dbg', 0);\r\n }\r\n } catch (exc) {\r\n console.warn('unable to render measure ' + this.smoMeasure.measureNumber.measureIndex);\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { VxMeasure } from './vxMeasure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, StaffModifierBase, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { leftConnectorVx, rightConnectorVx } from './smoAdapter';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText'\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { SuiScroller } from '../sui/scroller';\r\nimport { VexFlow, Voice, Note, createHairpin, createSlur, createTie } from '../../common/vex';\r\nimport { toVexVolta, vexOptions } from './smoAdapter';\r\nconst VF = VexFlow;\r\n\r\nexport interface VoltaInfo {\r\n smoMeasure: SmoMeasure,\r\n ending: SmoVolta\r\n}\r\nexport interface SuiSystemGroup {\r\n firstMeasure: VxMeasure,\r\n voices: Voice[]\r\n}\r\n/**\r\n * Create a system of staves and draw music on it. This calls the Vex measure\r\n * rendering methods, and also draws all the score and system level stuff like slurs, \r\n * text, aligns the lyrics.\r\n * */\r\nexport class VxSystem {\r\n context: SvgPage;\r\n leftConnector: any[] = [null, null];\r\n score: SmoScore;\r\n vxMeasures: VxMeasure[] = [];\r\n smoMeasures: SmoMeasure[] = [];\r\n lineIndex: number;\r\n maxStaffIndex: number;\r\n maxSystemIndex: number;\r\n minMeasureIndex: number = -1;\r\n maxMeasureIndex: number = 0;\r\n width: number;\r\n staves: SmoSystemStaff[] = [];\r\n box: SvgBox = SvgBox.default;\r\n currentY: number;\r\n topY: number;\r\n clefWidth: number;\r\n ys: number[] = [];\r\n measures: VxMeasure[] = [];\r\n modifiers: any[] = [];\r\n constructor(context: SvgPage, topY: number, lineIndex: number, score: SmoScore) {\r\n this.context = context;\r\n this.lineIndex = lineIndex;\r\n this.score = score;\r\n this.maxStaffIndex = -1;\r\n this.maxSystemIndex = -1;\r\n this.width = -1;\r\n this.staves = [];\r\n this.currentY = 0;\r\n this.topY = topY;\r\n this.clefWidth = 70;\r\n this.ys = [];\r\n }\r\n\r\n getVxMeasure(smoMeasure: SmoMeasure) {\r\n let i = 0;\r\n for (i = 0; i < this.vxMeasures.length; ++i) {\r\n const vm = this.vxMeasures[i];\r\n if (vm.smoMeasure.attrs.id === smoMeasure.attrs.id) {\r\n return vm;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getVxNote(smoNote: SmoNote): Note | null {\r\n let i = 0;\r\n if (!smoNote) {\r\n return null;\r\n }\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (mm.noteToVexMap[smoNote.attrs.id]) {\r\n return mm.noteToVexMap[smoNote.attrs.id];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _updateChordOffsets(note: SmoNote) {\r\n var i = 0;\r\n for (i = 0; i < 3; ++i) {\r\n const chords = note.getLyricForVerse(i, SmoLyric.parsers.chord);\r\n chords.forEach((bchord) => {\r\n const chord = bchord as SmoLyric;\r\n const dom = this.context.svg.getElementById('vf-' + chord.attrs.id);\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + chord.translateX + ' ' + (-1 * chord.translateY) + ')');\r\n }\r\n });\r\n }\r\n }\r\n _lowestYLowestVerse(lyrics: SmoLyric[], vxMeasures: VxMeasure[]) {\r\n // Move each verse down, according to the lowest lyric on that line/verse,\r\n // and the accumulation of the verses above it\r\n let lowestY = 0;\r\n for (var lowVerse = 0; lowVerse < 4; ++lowVerse) {\r\n let maxVerseHeight = 0;\r\n const verseLyrics = lyrics.filter((ll) => ll.verse === lowVerse);\r\n if (lowVerse === 0) {\r\n // first verse, go through list twice. first find lowest points\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n // 'lowest' Y on screen is Y with largest value...\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n lowestY = Math.max(ly + lyric.musicYOffset, lowestY);\r\n }\r\n });\r\n // second offset all to that point\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n } else {\r\n // subsequent verses, first find the tallest lyric\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n maxVerseHeight = Math.max(lyric.logicalBox.height, maxVerseHeight);\r\n }\r\n });\r\n // adjust lowestY to be the verse height below the previous verse\r\n lowestY = lowestY + maxVerseHeight * 1.1; // 1.1 magic number?\r\n // and offset these lyrics\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ### updateLyricOffsets\r\n // Adjust the y position for all lyrics in the line so they are even.\r\n // Also replace '-' with a longer dash do indicate 'until the next measure'\r\n updateLyricOffsets() {\r\n let i = 0;\r\n for (i = 0; i < this.score.staves.length; ++i) {\r\n const tmpI = i;\r\n const lyricsDash: SmoLyric[] = [];\r\n const lyricHyphens: SmoLyric[] = [];\r\n const lyricVerseMap: Record = {};\r\n const lyrics: SmoLyric[] = [];\r\n // is this necessary? They should all be from the current line\r\n const vxMeasures = this.vxMeasures.filter((vx) =>\r\n vx.smoMeasure.measureNumber.staffId === tmpI\r\n );\r\n\r\n // All the lyrics on this line\r\n // The vertical bounds on each line\r\n vxMeasures.forEach((mm) => {\r\n var smoMeasure = mm.smoMeasure;\r\n\r\n // Get lyrics from any voice.\r\n smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n this._updateChordOffsets(note);\r\n note.getTrueLyrics().forEach((ll: SmoLyric) => {\r\n const hasLyric = ll.getText().length > 0 || ll.isHyphenated();\r\n if (hasLyric && ll.logicalBox && !lyricVerseMap[ll.verse]) {\r\n lyricVerseMap[ll.verse] = [];\r\n }else if (hasLyric && !ll.logicalBox) {\r\n console.warn(\r\n `unrendered lyric for note ${note.attrs.id} measure ${smoMeasure.measureNumber.staffId}-${smoMeasure.measureNumber.measureIndex}`);\r\n }\r\n if (hasLyric && ll.logicalBox) {\r\n lyricVerseMap[ll.verse].push(ll);\r\n lyrics.push(ll);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n // calculate y offset so the lyrics all line up\r\n this._lowestYLowestVerse(lyrics, vxMeasures);\r\n const vkey: string[] = Object.keys(lyricVerseMap).sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\r\n vkey.forEach((sverse) => {\r\n const verse = parseInt(sverse, 10);\r\n let hyphenLyric: SmoLyric | null = null;\r\n const lastVerse = lyricVerseMap[verse][lyricVerseMap[verse].length - 1].attrs.id;\r\n lyricVerseMap[verse].forEach((ll: SmoLyric) => {\r\n if (hyphenLyric !== null && hyphenLyric.logicalBox !== null && ll.logicalBox !== null) {\r\n const x = ll.logicalBox.x - (ll.logicalBox.x -\r\n (hyphenLyric.logicalBox.x + hyphenLyric.logicalBox.width)) / 2;\r\n ll.hyphenX = x;\r\n lyricHyphens.push(ll);\r\n }\r\n if (ll.isHyphenated() && ll.logicalBox !== null) {\r\n if (ll.attrs.id === lastVerse) {\r\n // Last word on the system, place the hyphen after the word\r\n const fontSize = SmoScoreText.fontPointSize(ll.fontInfo.size);\r\n ll.hyphenX = ll.logicalBox.x + ll.logicalBox.width + fontSize / 2;\r\n lyricHyphens.push(ll);\r\n } else if (ll.getText().length) {\r\n // place the hyphen 1/2 between next word and this one.\r\n hyphenLyric = ll;\r\n }\r\n } else {\r\n hyphenLyric = null;\r\n }\r\n });\r\n });\r\n lyrics.forEach((lyric) => {\r\n const dom = this.context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + lyric.adjX + ' ' + lyric.adjY + ')');\r\n // Keep track of lyrics that are 'dash'\r\n if (lyric.isDash()) {\r\n lyricsDash.push(lyric);\r\n }\r\n }\r\n });\r\n lyricHyphens.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const text = document.createElementNS(SvgHelpers.namespace, 'text');\r\n text.textContent = '-';\r\n const fontSize = SmoScoreText.fontPointSize(lyric.fontInfo.size);\r\n text.setAttributeNS('', 'x', (lyric.hyphenX - fontSize / 3).toString());\r\n text.setAttributeNS('', 'y', (ly + (lyric.logicalBox.height * 2) / 3).toString());\r\n text.setAttributeNS('', 'font-size', '' + fontSize + 'pt');\r\n parent.appendChild(text);\r\n }\r\n });\r\n lyricsDash.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n const ymax = Math.round(ly + lyric.logicalBox.height / 2);\r\n const offset = Math.round(lyric.logicalBox.width / 2);\r\n line.setAttributeNS('', 'x1', (lyric.logicalBox.x - offset).toString());\r\n line.setAttributeNS('', 'y1', ymax.toString());\r\n line.setAttributeNS('', 'x2', (lyric.logicalBox.x + lyric.logicalBox.width + offset).toString());\r\n line.setAttributeNS('', 'y2', ymax.toString());\r\n line.setAttributeNS('', 'stroke-width', '1');\r\n line.setAttributeNS('', 'fill', 'none');\r\n line.setAttributeNS('', 'stroke', '#999999');\r\n parent.appendChild(line);\r\n const texts = parent.getElementsByTagName('text');\r\n // hide hyphen and replace with dash\r\n if (texts && texts.length) {\r\n const text = texts[0];\r\n text.setAttributeNS('', 'fill', '#fff');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### renderModifier\r\n // render a line-type modifier that is associated with a staff (e.g. slur)\r\n renderModifier(scroller: SuiScroller, modifier: StaffModifierBase,\r\n vxStart: Note | null, vxEnd: Note | null, smoStart: SmoSelection, smoEnd: SmoSelection) {\r\n let xoffset = 0;\r\n const setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n };\r\n if (smoStart && smoStart.note && smoStart.note.noteType === '/') {\r\n return;\r\n } if (smoEnd && smoEnd.note && smoEnd.note.noteType === '/') {\r\n return;\r\n }\r\n // if it is split between lines, render one artifact for each line, with a common class for\r\n // both if it is removed.\r\n if (vxStart) {\r\n const toRemove = this.context.svg.getElementById('vf-' + modifier.attrs.id);\r\n if (toRemove) {\r\n toRemove.remove();\r\n }\r\n }\r\n const artifactId = modifier.attrs.id + '-' + this.lineIndex;\r\n const group = this.context.getContext().openGroup('slur', artifactId);\r\n group.classList.add(modifier.attrs.id);\r\n const measureMod = 'mod-' + smoStart.selector.staff + '-' + smoStart.selector.measure;\r\n const staffMod = 'mod-' + smoStart.selector.staff;\r\n group.classList.add(measureMod);\r\n group.classList.add(staffMod);\r\n if (modifier.ctor === 'SmoStaffHairpin') {\r\n const hp = modifier as SmoStaffHairpin;\r\n if (!vxStart && !vxEnd) {\r\n this.context.getContext().closeGroup();\r\n }\r\n vxStart = setSameIfNull(vxStart, vxEnd);\r\n vxEnd = setSameIfNull(vxEnd, vxStart);\r\n const smoVexHairpinParams = {\r\n vxStart,\r\n vxEnd,\r\n hairpinType: hp.hairpinType,\r\n height: hp.height,\r\n yOffset: hp.yOffset,\r\n leftShiftPx: hp.xOffsetLeft,\r\n rightShiftPx: hp.xOffsetRight\r\n };\r\n const hairpin = createHairpin(smoVexHairpinParams);\r\n hairpin.setContext(this.context.getContext()).setPosition(hp.position).draw();\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const slur = modifier as SmoSlur;\r\n let slurX = slur.xOffset;\r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n const lyric = startNote.longestLyric() as SmoLyric;\r\n if (lyric && lyric.getText()) {\r\n // If there is a lyric, the bounding box of the start note is stretched to the right.\r\n // slide the slur left, and also make it a bit wider.\r\n const xtranslate = (-1 * lyric.getText().length * 6);\r\n xoffset += (xtranslate / 2) - SmoSlur.defaults.xOffset;\r\n }\r\n if (vxStart === null || vxEnd === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n const smoVexSlurParams = {\r\n vxStart, vxEnd,\r\n thickness: slur.thickness,\r\n xShift: slur.xOffset,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n invert: slur.invert,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const curve = createSlur(smoVexSlurParams);\r\n curve.setContext(this.context.getContext()).draw();\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const endNote: SmoNote = smoEnd!.note as SmoNote;\r\n ctie.checkLines(startNote, endNote);\r\n if (ctie.lines.length > 0) {\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n const smoVexTieParams = {\r\n fromLines,\r\n toLines,\r\n firstNote: vxStart,\r\n lastNote: vxEnd,\r\n vexOptions: vexOptions(ctie)\r\n }\r\n const tie = createTie(smoVexTieParams);\r\n tie.setContext(this.context.getContext()).draw();\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket') {\r\n if (vxStart && !vxEnd) {\r\n vxEnd = vxStart;\r\n } else if (vxEnd && !vxStart) {\r\n vxStart = vxEnd;\r\n }\r\n if (vxStart && vxEnd) {\r\n const smoBracket = (modifier as SmoStaffTextBracket);\r\n const bracket = new VF.TextBracket({\r\n start: vxStart, stop: vxEnd, text: smoBracket.text, superscript: smoBracket.superscript, position: smoBracket.position\r\n });\r\n bracket.setLine(smoBracket.line).setContext(this.context.getContext()).draw();\r\n }\r\n }\r\n\r\n this.context.getContext().closeGroup();\r\n if (xoffset) {\r\n const slurBox = this.context.svg.getElementById('vf-' + artifactId) as SVGSVGElement;\r\n if (slurBox) {\r\n SvgHelpers.translateElement(slurBox, xoffset, 0);\r\n }\r\n }\r\n modifier.element = group;\r\n }\r\n\r\n renderEndings(scroller: SuiScroller) {\r\n let j = 0;\r\n let i = 0;\r\n if (this.staves.length < 1) {\r\n return;\r\n }\r\n const voltas = this.staves[0].getVoltaMap(this.minMeasureIndex, this.maxMeasureIndex);\r\n voltas.forEach((ending) => {\r\n ending.elements.forEach((element: SVGSVGElement) => {\r\n element.remove();\r\n });\r\n ending.elements = [];\r\n });\r\n for (j = 0; j < this.smoMeasures.length; ++j) {\r\n let pushed = false;\r\n const smoMeasure = this.smoMeasures[j];\r\n // Only draw volta on top staff of system\r\n if (smoMeasure.svg.rowInSystem > 0) {\r\n continue;\r\n }\r\n const vxMeasure = this.getVxMeasure(smoMeasure);\r\n const voAr: VoltaInfo[] = [];\r\n for (i = 0; i < voltas.length && vxMeasure !== null; ++i) {\r\n const ending = voltas[i];\r\n const mix = smoMeasure.measureNumber.measureIndex;\r\n if ((ending.startBar <= mix) && (ending.endBar >= mix) && vxMeasure.stave !== null) {\r\n const group = this.context.getContext().openGroup(null, ending.attrs.id);\r\n group.classList.add(ending.attrs.id);\r\n group.classList.add(ending.endingId);\r\n ending.elements.push(group);\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vxVolta = new VF.Volta(vtype, ending.number.toString(), smoMeasure.staffX + ending.xOffsetStart, ending.yOffset);\r\n vxVolta.setContext(this.context.getContext()).draw(vxMeasure.stave, -1 * ending.xOffsetEnd);\r\n this.context.getContext().closeGroup();\r\n // ending.logicalBox = this.context.offsetBbox(group);\r\n if (!pushed) {\r\n voAr.push({ smoMeasure, ending });\r\n pushed = true;\r\n }\r\n vxMeasure.stave.getModifiers().push(vxVolta);\r\n }\r\n }\r\n // Adjust real height of measure to match volta height\r\n for (i = 0; i < voAr.length; ++i) {\r\n const mm = voAr[i].smoMeasure;\r\n const ending = voAr[i].ending;\r\n if (ending.logicalBox !== null) {\r\n const delta = mm.svg.logicalBox.y - ending.logicalBox.y;\r\n if (delta > 0) {\r\n mm.setBox(SvgHelpers.boxPoints(\r\n mm.svg.logicalBox.x, mm.svg.logicalBox.y - delta, mm.svg.logicalBox.width, mm.svg.logicalBox.height + delta),\r\n 'vxSystem adjust for volta');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMeasureByIndex(measureIndex: number, staffId: number) {\r\n let i = 0;\r\n for (i = 0; i < this.smoMeasures.length; ++i) {\r\n const mm = this.smoMeasures[i];\r\n if (measureIndex === mm.measureNumber.measureIndex && staffId === mm.measureNumber.staffId) {\r\n return mm;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // ## renderMeasure\r\n // ## Description:\r\n // Create the graphical (VX) notes and render them on svg. Also render the tuplets and beam\r\n // groups\r\n renderMeasure(smoMeasure: SmoMeasure, printing: boolean) {\r\n if (smoMeasure.svg.hideMultimeasure) {\r\n return;\r\n }\r\n const measureIndex = smoMeasure.measureNumber.measureIndex;\r\n if (this.minMeasureIndex < 0 || this.minMeasureIndex > measureIndex) {\r\n this.minMeasureIndex = measureIndex;\r\n }\r\n if (this.maxMeasureIndex < measureIndex) {\r\n this.maxMeasureIndex = measureIndex;\r\n }\r\n let brackets = false;\r\n const staff = this.score.staves[smoMeasure.measureNumber.staffId];\r\n const staffId = staff.staffId;\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const selection = SmoSelection.measureSelection(this.score, staff.staffId, smoMeasure.measureNumber.measureIndex);\r\n this.smoMeasures.push(smoMeasure);\r\n if (this.staves.length <= staffId) {\r\n this.staves.push(staff);\r\n }\r\n if (selection === null) {\r\n return;\r\n }\r\n let softmax = selection.measure.format.proportionality;\r\n if (softmax === SmoMeasureFormat.defaultProportionality) {\r\n softmax = this.score.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n const vxMeasure: VxMeasure = new VxMeasure(this.context, selection, printing, softmax);\r\n\r\n // create the vex notes, beam groups etc. for the measure\r\n vxMeasure.preFormat();\r\n this.vxMeasures.push(vxMeasure);\r\n\r\n const lastStaff = (staffId === this.score.staves.length - 1);\r\n const smoGroupMap: Record = {};\r\n const adjXMap: Record = {};\r\n const vxMeasures = this.vxMeasures.filter((mm) => !mm.smoMeasure.svg.hideEmptyMeasure);\r\n // If this is the last staff in the column, render the column with justification\r\n if (lastStaff) {\r\n vxMeasures.forEach((mm) => {\r\n if (typeof(adjXMap[mm.smoMeasure.measureNumber.systemIndex]) === 'undefined') {\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = mm.smoMeasure.svg.adjX;\r\n }\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = Math.max(adjXMap[mm.smoMeasure.measureNumber.systemIndex], mm.smoMeasure.svg.adjX);\r\n });\r\n vxMeasures.forEach((vv: VxMeasure) => {\r\n if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure) {\r\n vv.vexNotes.forEach((vnote) => {\r\n vnote.setXShift(vnote.getXShift() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);\r\n });\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n const justifyGroup: string = (systemGroup && vv.smoMeasure.format.autoJustify) ? systemGroup.attrs.id : vv.selection.staff.attrs.id;\r\n if (!smoGroupMap[justifyGroup]) {\r\n smoGroupMap[justifyGroup] = { firstMeasure: vv, voices: [] };\r\n }\r\n smoGroupMap[justifyGroup].voices =\r\n smoGroupMap[justifyGroup].voices.concat(vv.voiceAr);\r\n }\r\n });\r\n }\r\n const keys = Object.keys(smoGroupMap);\r\n keys.forEach((key) => {\r\n smoGroupMap[key].firstMeasure.format(smoGroupMap[key].voices);\r\n });\r\n if (lastStaff) {\r\n vxMeasures.forEach((vv) => {\r\n if (!vv.rendered) {\r\n vv.render();\r\n }\r\n });\r\n }\r\n // Keep track of the y coordinate for the nth staff\r\n const renderedConnection: Record = {};\r\n\r\n if (systemIndex === 0 && lastStaff) {\r\n if (staff.bracketMap[this.lineIndex]) {\r\n staff.bracketMap[this.lineIndex].forEach((element) => {\r\n element.remove();\r\n });\r\n }\r\n staff.bracketMap[this.lineIndex] = [];\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('lineBracket-' + this.lineIndex);\r\n group.classList.add('lineBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n vxMeasures.forEach((vv) => {\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n if (systemGroup && !renderedConnection[systemGroup.attrs.id] && \r\n !vv.smoMeasure.svg.hideEmptyMeasure) {\r\n renderedConnection[systemGroup.attrs.id] = 1;\r\n const startSel = this.vxMeasures[systemGroup.startSelector.staff];\r\n const endSel = this.vxMeasures[systemGroup.endSelector.staff];\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(leftConnectorVx(systemGroup));\r\n c1.setContext(this.context.getContext()).draw();\r\n brackets = true;\r\n }\r\n }\r\n });\r\n if (!brackets && vxMeasures.length > 1) {\r\n const c2 = new VF.StaveConnector(vxMeasures[0].stave!, vxMeasures[vxMeasures.length - 1].stave!);\r\n c2.setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n }\r\n // draw outer brace on parts with multiple staves (e.g. keyboards)\r\n vxMeasures.forEach((vv) => {\r\n if (vv.selection.staff.partInfo.stavesAfter > 0) {\r\n if (this.vxMeasures.length > vv.selection.selector.staff + 1) {\r\n const endSel = this.vxMeasures[vv.selection.selector.staff + 1];\r\n const startSel = vv;\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(VF.StaveConnector.type.BRACE);\r\n c1.setContext(this.context.getContext()).draw(); \r\n }\r\n }\r\n };\r\n });\r\n this.context.getContext().closeGroup();\r\n } else if (lastStaff && smoMeasure.measureNumber.measureIndex + 1 < staff.measures.length) {\r\n if (staff.measures[smoMeasure.measureNumber.measureIndex + 1].measureNumber.systemIndex === 0) {\r\n const endMeasure = vxMeasure;\r\n const startMeasure = vxMeasures.find((vv) => vv.selection.selector.staff === 0 &&\r\n vv.selection.selector.measure === vxMeasure.selection.selector.measure && \r\n vv.smoMeasure.svg.hideEmptyMeasure === false);\r\n if (endMeasure && endMeasure.stave && startMeasure && startMeasure.stave) {\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('endBracket-' + this.lineIndex);\r\n group.classList.add('endBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n const c2 = new VF.StaveConnector(startMeasure.stave, endMeasure.stave)\r\n .setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n }\r\n // keep track of left-hand side for system connectors\r\n if (systemIndex === 0) {\r\n if (staffId === 0) {\r\n this.leftConnector[0] = vxMeasure.stave;\r\n } else if (staffId > this.maxStaffIndex) {\r\n this.maxStaffIndex = staffId;\r\n this.leftConnector[1] = vxMeasure.stave;\r\n }\r\n } else if (smoMeasure.measureNumber.systemIndex > this.maxSystemIndex) {\r\n this.maxSystemIndex = smoMeasure.measureNumber.systemIndex;\r\n }\r\n this.measures.push(vxMeasure);\r\n }\r\n}\r\n","/**\r\n * definitions shared by all SMO types\r\n * @module /smo/data/common\r\n */\r\n/**\r\n * Same as attrs object in Vex objects.\r\n * @param id - unique identifier, can be used in DOM elements\r\n * @param type - a little bit redundate with `ctor` in `SmoObjectParams`\r\n */\r\nexport interface SmoAttrs {\r\n id: string,\r\n type: string\r\n}\r\n\r\nvar nextId = 32768;\r\nexport const getId = () => `smo` + (nextId++).toString();\r\n/**\r\n * All note, measure, staff, and score objects have\r\n * a serialize method and are deserializable with constructor `ctor`\r\n */\r\nexport interface SmoObjectParams {\r\n ctor: string,\r\n attrs?: SmoAttrs\r\n}\r\n\r\n/**\r\n * Note duration. The same abstraction used by vex, except here denominator is\r\n * always 1. remainder is used to reconstruct non-tuplets from tuplets.\r\n * @param numerator - duration, 4096 is 1/4 note\r\n * @param denominator - always 1 for SMO objects\r\n * @param remainder - used for tuplets whose duration doesn't divide evenly\r\n */\r\nexport interface Ticks {\r\n numerator: number,\r\n denominator: number,\r\n remainder: number\r\n}\r\n\r\n/**\r\n * constraint for SmoPitch.letter value, in lower case\r\n */\r\nexport type PitchLetter = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g';\r\n\r\nexport function IsPitchLetter(letter: PitchLetter | string): letter is PitchLetter {\r\n return letter.length === 1 && letter[0] >= 'a' && letter[0] <= 'g';\r\n}\r\n\r\n/**\r\n * PitchKey is a SmoPitch, without the octave\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n */\r\nexport interface PitchKey {\r\n letter: PitchLetter,\r\n accidental: string\r\n}\r\n/**\r\n * Represents a single pitch in Smo object model.\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n * @param octave - standard octave\r\n * @param cautionary? - can be used for courtesy accidental\r\n */\r\nexport interface Pitch {\r\n letter: PitchLetter,\r\n accidental: string,\r\n octave: number,\r\n cautionary?: boolean,\r\n forced?: boolean,\r\n role?: string\r\n}\r\n\r\n/**\r\n * A tuple indicating measure location in the score:\r\n * @param measureIndex - the actual offset from the first measure\r\n * @param localIndex - the index as shown to the user, considers renumbering\r\n * @param sytemIndex - which bar (column) of a system this measure is\r\n * @param staffId - which staff (row) of a system this measure is\r\n */\r\nexport interface MeasureNumber {\r\n measureIndex: number,\r\n localIndex: number,\r\n systemIndex: number,\r\n staffId: number\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\nexport class SvgPoint {\r\n x: number;\r\n y: number;\r\n static get default() {\r\n return { x: 0, y: 0 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\n export class SvgBox {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n static get default(): SvgBox {\r\n return { x: 0, y: 0, width: -1, height: -1 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n this.width = -1;\r\n this.height = -1;\r\n }\r\n}\r\n/**\r\n * kind of a pointless class...\r\n */\r\nexport interface SvgDimensions {\r\n width: number,\r\n height: number\r\n}\r\n/**\r\n * A `Transposable` is an abstraction of a note.\r\n * Can be passed into methods that transform pitches for both\r\n * grace notes and normal notes.\r\n * @param pitches - SMO pitch type\r\n * @param noteType - same convention as VexFlow, 'n' for note, 'r' for rest\r\n * @param renderId - ID for the containing SVG group, used to map UI elements\r\n * @param renderedBox - bounding box in client coordinates\r\n * @param logicalBox - bounding box in SVG coordinates\r\n */\r\nexport interface Transposable {\r\n pitches: Pitch[],\r\n noteType: string,\r\n renderId: string | null,\r\n logicalBox: SvgBox | null\r\n}\r\n\r\n/**\r\n * All note, measure etc. modifiers have these attributes. The SVG info\r\n * is for the tracker to track the artifacts in the UI (mouse events, etc)\r\n * @param ctor - constructor name for deserialize\r\n * @param logicalBox - bounding box in SVG coordinates\r\n * @param attr - unique ID, simlar to vex object attrs field\r\n */\r\nexport interface SmoModifierBase {\r\n ctor: string,\r\n logicalBox: SvgBox | null,\r\n attrs: SmoAttrs\r\n}\r\n\r\n/**\r\n * Renderable is just a thing that has a bounding box\r\n */\r\nexport interface Renderable {\r\n logicalBox: SvgBox | null | undefined\r\n}\r\n/**\r\n * Restriction from string to supported clefs\r\n */\r\nexport type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n | 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n\r\nexport var Clefs: Clef[] = ['treble' , 'bass' , 'tenor' , 'alto' , 'soprano' , 'percussion'\r\n, 'mezzo-soprano' , 'baritone-c' , 'baritone-f' , 'subbass' , 'french'];\r\n\r\nexport function IsClef(clef: Clef | string): clef is Clef {\r\n return Clefs.findIndex((x) => clef === x) >= 0;\r\n}\r\n\r\n/**\r\n * Most event handling in SMO is an 'any' from jquery, but\r\n * key events are sometimes narrowed to the common browser key event\r\n */\r\nexport interface KeyEvent {\r\n type: string,\r\n shiftKey: boolean,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n key: string,\r\n keyCode: string,\r\n code: string,\r\n event: string | null\r\n}\r\n\r\nexport interface TickAccidental {\r\n duration: number,\r\n pitch: Pitch\r\n}\r\n\r\n/**\r\n * Used to create {@link MeasureTickmaps}\r\n */\r\nexport interface AccidentalArray {\r\n duration: string | number,\r\n pitches: Record\r\n}\r\n\r\nexport interface AccidentalDisplay {\r\n symbol: string,\r\n courtesy: boolean,\r\n forced: boolean\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Contains definition and supporting classes for {@link SmoMeasure}.\r\n * Most of the engraving is done at the measure level. Measure contains multiple (at least 1)\r\n * voices, which in turn contain notes. Each measure also contains formatting information. This\r\n * is mostly serialized outside of measure (in score), since columns and often an entire region\r\n * share measure formatting. Measures also contain modifiers like barlines. Tuplets and beam groups\r\n * are contained at the measure level.\r\n * @module /smo/data/measure\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport {\r\n SmoBarline, SmoMeasureModifierBase, SmoRepeatSymbol, SmoTempoText, SmoMeasureFormat,\r\n SmoVolta, SmoRehearsalMarkParams, SmoRehearsalMark, SmoTempoTextParams, TimeSignature,\r\n TimeSignatureParametersSer, SmoMeasureFormatParamsSer, SmoTempoTextParamsSer\r\n} from './measureModifiers';\r\nimport { SmoNote, NoteType, SmoNoteParamsSer } from './note';\r\nimport { SmoTuplet, SmoTupletParamsSer, SmoTupletParams } from './tuplet';\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { TickMap } from '../xform/tickMap';\r\nimport { MeasureNumber, SvgBox, SmoAttrs, Pitch, PitchLetter, Clef, \r\n TickAccidental, AccidentalArray, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n/**\r\n * Voice is just a container for {@link SmoNote}\r\n */\r\nexport interface SmoVoice {\r\n notes: SmoNote[]\r\n}\r\n\r\nexport interface SmoVoiceSer {\r\n notes: SmoNoteParamsSer[]\r\n}\r\n/**\r\n * TickMappable breaks up a circular dependency on modifiers\r\n * like @SmoDuration\r\n */\r\nexport interface TickMappable {\r\n voices: SmoVoice[],\r\n keySignature: string\r\n}\r\n\r\nexport interface MeasureTick {\r\n voiceIndex: number,\r\n tickIndex: number\r\n}\r\n\r\n/**\r\n * Break up a circlar dependency with {@link SmoBeamGroup}\r\n */\r\nexport interface ISmoBeamGroup {\r\n notes: SmoNote[],\r\n voice: number,\r\n attrs: SmoAttrs\r\n}\r\n/**\r\n * geometry information about the current measure for rendering and\r\n * score layout.\r\n * @internal\r\n */\r\nexport interface MeasureSvg {\r\n staffWidth: number,\r\n unjustifiedWidth: number,\r\n adjX: number, // The start point of the music in the stave (after time sig, etc)\r\n maxColumnStartX: number,\r\n staffX: number, // The left-most x position of the staff\r\n staffY: number,\r\n logicalBox: SvgBox,\r\n yTop: number,\r\n adjRight: number,\r\n history: string[],\r\n lineIndex: number,\r\n pageIndex: number,\r\n rowInSystem: number,\r\n forceClef: boolean,\r\n forceKeySignature: boolean,\r\n forceTimeSignature: boolean,\r\n forceTempo: boolean,\r\n hideEmptyMeasure: boolean,\r\n hideMultimeasure: boolean,\r\n multimeasureLength: number,\r\n multimeasureEndBarline: number,\r\n element: SVGSVGElement | null\r\n}\r\n\r\n/**\r\n * Interface for a {@link TickMap} for each voice\r\n * for formatting\r\n */\r\nexport interface MeasureTickmaps {\r\n tickmaps: TickMap[],\r\n accidentalMap: Record>,\r\n accidentalArray: AccidentalArray[]\r\n}\r\n/**\r\n * Column-mapped modifiers, managed by the {@link SmoScore}\r\n */\r\nexport interface ColumnMappedParams {\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n timeSignature: any,\r\n keySignature: string,\r\n tempo: any\r\n}\r\n// @internal\r\nexport type SmoMeasureNumberParam = 'transposeIndex' | 'activeVoice' | 'lines' | 'repeatCount';\r\n// @internal\r\nexport const SmoMeasureNumberParams: SmoMeasureNumberParam[] = ['transposeIndex', 'activeVoice', 'lines', 'repeatCount'];\r\n// @internal\r\nexport type SmoMeasureStringParam = 'keySignature';\r\n// @internal\r\nexport const SmoMeasureStringParams: SmoMeasureStringParam[] = ['keySignature'];\r\n/**\r\n * constructor parameters for a {@link SmoMeasure}. Usually you will call\r\n * {@link SmoMeasure.defaults}, and modify the parameters you need to change.\r\n *\r\n * @param timeSignature\r\n * @param keySignature\r\n * @param tuplets\r\n * @param transposeIndex calculated from {@link SmoPartInfo} for non-concert-key instruments\r\n * @param lines number of lines in the stave\r\n * @param staffY Y coordinate (UL corner) of the measure stave\r\n * @param measureNumber combination configured/calculated measure number\r\n * @param clef\r\n * @param voices\r\n * @param activeVoice the active voice in the editor\r\n * @param tempo\r\n * @param format measure format, is managed by the score\r\n * @param modifiers All measure modifiers that5 aren't format, timeSignature or tempo\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureParams {\r\n timeSignature: TimeSignature,\r\n keySignature: string,\r\n tuplets: SmoTuplet[],\r\n transposeIndex: number,\r\n lines: number,\r\n staffY: number,\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: MeasureNumber,\r\n clef: Clef,\r\n voices: SmoVoice[],\r\n activeVoice: number,\r\n tempo: SmoTempoText,\r\n format: SmoMeasureFormat | null,\r\n modifiers: SmoMeasureModifierBase[],\r\n repeatSymbol: boolean,\r\n repeatCount: number\r\n}\r\n\r\n/**\r\n * The serializeable bits of SmoMeasure. Some parameters are \r\n * mapped by the stave if the don't change every measure, e.g.\r\n * time signature.\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * id of the measure\r\n */\r\n attrs: SmoAttrs;\r\n /**\r\n * time signature serialization\r\n */\r\n timeSignature?: TimeSignatureParametersSer,\r\n /**\r\n * key signature\r\n */\r\n keySignature?: string,\r\n /**\r\n * a list of tuplets (serialized)\r\n */\r\n tuplets: SmoTupletParamsSer[],\r\n /**\r\n * transpose the notes up/down. TODO: this should not be serialized\r\n * as its part of the instrument parameters\r\n */\r\n transposeIndex: number,\r\n /**\r\n * lines in the staff (e.g. percussion)\r\n */\r\n lines: number,\r\n /**\r\n * y coordinate of stave. TODO: this should not be serialized\r\n * since it is calculated as part of layout\r\n */\r\n staffY: number,\r\n /**\r\n * measure number, absolute and relative/remapped\r\n */\r\n measureNumber: MeasureNumber,\r\n /**\r\n * start clef\r\n */\r\n clef: Clef,\r\n /**\r\n * voices contain notes\r\n */\r\n voices: SmoVoiceSer[],\r\n /**\r\n * tempo at this point\r\n */\r\n tempo: SmoTempoTextParamsSer,\r\n /**\r\n * format customizations\r\n */\r\n format: SmoMeasureFormatParamsSer | null,\r\n /**\r\n * all other modifiers (barlines, etc)\r\n */\r\n modifiers: SmoMeasureModifierBase[]\r\n}\r\n\r\n/**\r\n * Only arrays and measure numbers are serilialized with default values.\r\n * @param params - result of serialization\r\n * @returns \r\n */\r\nfunction isSmoMeasureParamsSer(params: Partial):params is SmoMeasureParamsSer {\r\n if (!Array.isArray(params.voices) || \r\n !Array.isArray(params.tuplets) || !Array.isArray(params.modifiers) ||\r\n typeof(params?.measureNumber?.measureIndex) !== 'number') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Data for a measure of music. Many rules of musical engraving are\r\n * enforced at a measure level: the duration of notes, accidentals, etc.\r\n * \r\n * Measures contain {@link SmoNote}, {@link SmoTuplet}, and {@link SmoBeamGroup}\r\n * Measures are contained in {@link SmoSystemStaff}\r\n * @category SmoObject\r\n */\r\nexport class SmoMeasure implements SmoMeasureParams, TickMappable {\r\n static get timeSignatureDefault(): TimeSignature {\r\n return new TimeSignature(TimeSignature.defaults);\r\n }\r\n static defaultDupleDuration: number = 4096;\r\n static defaultTripleDuration: number = 2048 * 3;\r\n // @internal\r\n static readonly _defaults: SmoMeasureParams = {\r\n timeSignature: SmoMeasure.timeSignatureDefault,\r\n keySignature: 'C',\r\n tuplets: [],\r\n transposeIndex: 0,\r\n modifiers: [],\r\n staffY: 40,\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n },\r\n clef: 'treble',\r\n lines: 5,\r\n voices: [],\r\n format: new SmoMeasureFormat(SmoMeasureFormat.defaults),\r\n activeVoice: 0,\r\n tempo: new SmoTempoText(SmoTempoText.defaults),\r\n repeatSymbol: false,\r\n repeatCount: 0 \r\n }\r\n\r\n /**\r\n * Default constructor parameters. Defaults are always copied so the\r\n * caller can modify them to create a new measure.\r\n * @returns constructor params for a new measure\r\n */\r\n static get defaults(): SmoMeasureParams {\r\n const proto: any = JSON.parse(JSON.stringify(SmoMeasure._defaults));\r\n proto.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n proto.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n return proto;\r\n }\r\n // @ignore\r\n static convertLegacyTimeSignature(ts: string) {\r\n const rv = new TimeSignature(TimeSignature.defaults);\r\n rv.timeSignature = ts;\r\n return rv;\r\n }\r\n timeSignature: TimeSignature = SmoMeasure.timeSignatureDefault;\r\n /**\r\n * Overrides display of actual time signature, in the case of\r\n * pick-up notes where the actual and displayed durations are different\r\n */\r\n keySignature: string = '';\r\n canceledKeySignature: string = '';\r\n tuplets: SmoTuplet[] = [];\r\n repeatSymbol: boolean = false;\r\n repeatCount: number = 0;\r\n /**\r\n * Adjust for non-concert pitch intstruments\r\n */\r\n transposeIndex: number = 0;\r\n modifiers: SmoMeasureModifierBase[] = [];\r\n /**\r\n * Row, column, and custom numbering information about this measure.\r\n */\r\n measureNumber: MeasureNumber = {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n };\r\n clef: Clef = 'treble';\r\n voices: SmoVoice[] = [];\r\n /**\r\n * the active voice in the editor, if there are multiple voices\r\n * */\r\n activeVoice: number = 0;\r\n tempo: SmoTempoText;\r\n beamGroups: ISmoBeamGroup[] = [];\r\n lines: number = 5;\r\n /**\r\n * Runtime information about rendering\r\n */\r\n svg: MeasureSvg;\r\n /**\r\n * Measure-specific formatting parameters.\r\n */\r\n format: SmoMeasureFormat;\r\n /**\r\n * Information for identifying this object\r\n */\r\n attrs: SmoAttrs;\r\n\r\n /**\r\n * Fill in components. We assume the modifiers are already constructed,\r\n * e.g. by deserialize or the calling function.\r\n * @param params\r\n */\r\n constructor(params: SmoMeasureParams) {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n this.svg = {\r\n staffWidth: 0,\r\n unjustifiedWidth: 0,\r\n staffX: 0,\r\n staffY: 0,\r\n logicalBox: {\r\n x: 0, y: 0, width: 0, height: 0\r\n },\r\n yTop: 0,\r\n adjX: 0,\r\n maxColumnStartX: 0,\r\n adjRight: 0,\r\n history: [],\r\n lineIndex: 0,\r\n pageIndex: 0,\r\n rowInSystem: 0,\r\n forceClef: false,\r\n forceKeySignature: false,\r\n forceTimeSignature: false,\r\n forceTempo: false,\r\n hideEmptyMeasure: false,\r\n hideMultimeasure: false,\r\n multimeasureLength: 0,\r\n multimeasureEndBarline: SmoBarline.barlines['singleBar'],\r\n element: null\r\n };\r\n\r\n const defaults = SmoMeasure.defaults;\r\n SmoMeasureNumberParams.forEach((param) => {\r\n if (typeof (params[param]) !== 'undefined') {\r\n this[param] = params[param];\r\n }\r\n });\r\n SmoMeasureStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defaults[param];\r\n });\r\n this.clef = params.clef;\r\n this.repeatSymbol = params.repeatSymbol;\r\n this.measureNumber = JSON.parse(JSON.stringify(params.measureNumber));\r\n if (params.tempo) {\r\n this.tempo = new SmoTempoText(params.tempo);\r\n }\r\n // Handle legacy time signature format\r\n if (params.timeSignature) {\r\n const tsAny = params.timeSignature as any;\r\n if (typeof (tsAny) === 'string') {\r\n this.timeSignature = SmoMeasure.convertLegacyTimeSignature(tsAny);\r\n } else {\r\n this.timeSignature = TimeSignature.createFromPartial(tsAny);\r\n }\r\n }\r\n this.voices = params.voices ? params.voices : [];\r\n this.tuplets = params.tuplets ? params.tuplets : [];\r\n this.modifiers = params.modifiers ? params.modifiers : defaults.modifiers;\r\n this.setDefaultBarlines();\r\n this.keySignature = SmoMusic.vexKeySigWithOffset(this.keySignature, this.transposeIndex);\r\n\r\n if (!(params.format)) {\r\n this.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n this.format.measureIndex = this.measureNumber.measureIndex;\r\n } else {\r\n this.format = new SmoMeasureFormat(params.format);\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoMeasure'\r\n };\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get defaultAttributes() {\r\n return [\r\n 'keySignature', \r\n 'measureNumber',\r\n 'activeVoice', 'clef', 'transposeIndex',\r\n 'format', 'rightMargin', 'lines', 'repeatSymbol', 'repeatCount'\r\n ];\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get formattingOptions() {\r\n return ['customStretch', 'customProportion', 'autoJustify', 'systemBreak',\r\n 'pageBreak', 'padLeft'];\r\n }\r\n // @internal\r\n // used for serialization\r\n static get columnMappedAttributes() {\r\n return ['timeSignature', 'keySignature', 'tempo'];\r\n }\r\n static get serializableAttributes() {\r\n const rv: any = [];\r\n SmoMeasure.defaultAttributes.forEach((attr) => {\r\n if (SmoMeasure.columnMappedAttributes.indexOf(attr) < 0) {\r\n rv.push(attr);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n // Return true if the time signatures are the same, for display purposes (e.g. if a time sig change\r\n // is required)\r\n */\r\n static timeSigEqual(o1: TimeSignature, o2: TimeSignature) {\r\n return o1.timeSignature === o2.timeSignature && o1.useSymbol === o2.useSymbol;\r\n }\r\n\r\n /**\r\n * @internal\r\n * @returns column mapped parameters, serialized. caller will\r\n * decide if the parameters need to be persisted\r\n */\r\n serializeColumnMapped(): ColumnMappedParams {\r\n //\r\n return {\r\n timeSignature: this.timeSignature.serialize(),\r\n keySignature: this.keySignature,\r\n tempo: this.tempo.serialize()\r\n };\r\n }\r\n\r\n /**\r\n * Convert this measure object to a JSON object, recursively serializing all the notes,\r\n * note modifiers, etc.\r\n */\r\n serialize(): SmoMeasureParamsSer {\r\n const params: Partial = {};\r\n let ser = true;\r\n smoSerialize.serializedMergeNonDefault(SmoMeasure.defaults, SmoMeasure.serializableAttributes, this, params);\r\n // measure number can't be defaulted b/c tempos etc. can map to default measure\r\n params.measureNumber = JSON.parse(JSON.stringify(this.measureNumber));\r\n params.tuplets = [];\r\n params.voices = [];\r\n params.modifiers = [];\r\n\r\n this.tuplets.forEach((tuplet) => {\r\n params.tuplets!.push(tuplet.serialize());\r\n });\r\n\r\n this.voices.forEach((voice) => {\r\n const obj: any = {\r\n notes: []\r\n };\r\n voice.notes.forEach((note) => {\r\n obj.notes.push(note.serialize());\r\n });\r\n params.voices!.push(obj);\r\n });\r\n\r\n this.modifiers.forEach((modifier) => {\r\n ser = true;\r\n /* don't serialize default modifiers */\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.start &&\r\n (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.end\r\n && (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoTempoText') {\r\n // we don't save tempo text as a modifier anymore\r\n ser = false;\r\n } else if ((modifier as SmoRepeatSymbol).ctor === 'SmoRepeatSymbol' && (modifier as SmoRepeatSymbol).position === SmoRepeatSymbol.positions.start\r\n && (modifier as SmoRepeatSymbol).symbol === SmoRepeatSymbol.symbols.None) {\r\n ser = false;\r\n }\r\n if (ser) {\r\n params.modifiers!.push(modifier.serialize());\r\n }\r\n });\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw 'invalid measure';\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * restore a serialized measure object. Usually called as part of deserializing a score,\r\n * but can also be used to restore a measure due to an undo operation. Recursively\r\n * deserialize all the notes and modifiers to construct a new measure.\r\n * @param jsonObj the serialized SmoMeasure\r\n * @returns\r\n */\r\n static deserialize(jsonObj: SmoMeasureParamsSer): SmoMeasure {\r\n let j = 0;\r\n let i = 0;\r\n const voices: SmoVoice[] = [];\r\n const noteSum = [];\r\n for (j = 0; j < jsonObj.voices.length; ++j) {\r\n const voice = jsonObj.voices[j];\r\n const notes: SmoNote[] = [];\r\n voices.push({\r\n notes\r\n });\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const noteParams = voice.notes[i];\r\n const smoNote = SmoNote.deserialize(noteParams);\r\n notes.push(smoNote);\r\n noteSum.push(smoNote);\r\n }\r\n }\r\n\r\n const tuplets = [];\r\n for (j = 0; j < jsonObj.tuplets.length; ++j) {\r\n const tupJson = SmoTuplet.defaults;\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, jsonObj.tuplets[j], tupJson);\r\n const noteAr = noteSum.filter((nn: any) =>\r\n nn.isTuplet && nn.tuplet.id === tupJson.attrs!.id);\r\n\r\n // Bug fix: A tuplet with no notes may be been overwritten\r\n // in a copy/paste operation\r\n if (noteAr.length > 0) {\r\n tupJson.notes = noteAr;\r\n const tuplet = new SmoTuplet(tupJson);\r\n tuplets.push(tuplet);\r\n }\r\n }\r\n\r\n const modifiers: SmoMeasureModifierBase[] = [];\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const modifier: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modParams);\r\n modifiers.push(modifier);\r\n });\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, jsonObj, params);\r\n\r\n // explode column-mapped\r\n if (jsonObj.tempo) {\r\n params.tempo = SmoTempoText.deserialize(jsonObj.tempo);\r\n } else {\r\n params.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n\r\n // timeSignatureString is now part of timeSignature. upconvert old scores\r\n let timeSignatureString = '';\r\n const jsonLegacy = (jsonObj as any);\r\n if (typeof(jsonLegacy.timeSignatureString) === 'string' && jsonLegacy.timeSignatureString.length > 0) {\r\n timeSignatureString = jsonLegacy.timeSignatureString;\r\n }\r\n if (jsonObj.timeSignature) {\r\n if (timeSignatureString.length) {\r\n jsonObj.timeSignature.displayString = timeSignatureString; \r\n }\r\n params.timeSignature = TimeSignature.deserialize(jsonObj.timeSignature);\r\n } else {\r\n const tparams = TimeSignature.defaults;\r\n if (timeSignatureString.length) {\r\n tparams.displayString = timeSignatureString;\r\n }\r\n params.timeSignature = new TimeSignature(tparams);\r\n }\r\n params.keySignature = jsonObj.keySignature ?? 'C';\r\n params.voices = voices;\r\n params.tuplets = tuplets;\r\n params.modifiers = modifiers;\r\n const rv = new SmoMeasure(params);\r\n // Handle migration for measure-mapped parameters\r\n rv.modifiers.forEach((mod) => {\r\n if (mod.ctor === 'SmoTempoText') {\r\n rv.tempo = (mod as SmoTempoText);\r\n }\r\n });\r\n if (!rv.tempo) {\r\n rv.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the default pitch\r\n * for a clef (appears on 3rd line)\r\n */\r\n static get defaultPitchForClef(): Record {\r\n return {\r\n 'treble': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'bass': {\r\n letter: 'd',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'tenor': {\r\n letter: 'a',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'alto': {\r\n letter: 'c',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'percussion': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'mezzo-soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'baritone-c': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'baritone-f': {\r\n letter: 'e',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'subbass': {\r\n letter: 'd',\r\n accidental: '',\r\n octave: 2\r\n },\r\n 'french': {\r\n letter: 'b',\r\n accidental: '',\r\n octave: 4\r\n } // no idea\r\n };\r\n }\r\n static _emptyMeasureNoteType: NoteType = 'r';\r\n static set emptyMeasureNoteType(tt: NoteType) {\r\n SmoMeasure._emptyMeasureNoteType = tt;\r\n }\r\n static get emptyMeasureNoteType(): NoteType {\r\n return SmoMeasure._emptyMeasureNoteType;\r\n }\r\n static timeSignatureNotes(timeSignature: TimeSignature, clef: Clef) {\r\n const pitch = SmoMeasure.defaultPitchForClef[clef];\r\n const maxTicks = SmoMusic.timeSignatureToTicks(timeSignature.timeSignature);\r\n const noteTick = 8192 / (timeSignature.beatDuration / 2);\r\n let ticks = 0;\r\n const pnotes: SmoNote[] = [];\r\n while (ticks < maxTicks) {\r\n const nextNote = SmoNote.defaults;\r\n nextNote.pitches = [JSON.parse(JSON.stringify(pitch))];\r\n nextNote.noteType = 'r';\r\n nextNote.clef = clef;\r\n nextNote.ticks.numerator = noteTick;\r\n pnotes.push(new SmoNote(nextNote));\r\n ticks += noteTick;\r\n }\r\n if (timeSignature.beatDuration === 8 && (timeSignature.actualBeats % 3 === 0 || timeSignature.actualBeats % 2 !== 0)) {\r\n let ix = 0;\r\n pnotes.forEach((pnote) => {\r\n if ((ix + 1) % 3 === 0) {\r\n pnote.endBeam = true;\r\n }\r\n pnote.beamBeats = 2048 * 3;\r\n ix += 1;\r\n });\r\n }\r\n return pnotes;\r\n }\r\n /**\r\n * Get a measure full of default notes for a given timeSignature/clef.\r\n * returns 8th notes for triple-time meters, etc.\r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultNotes(params: SmoMeasureParams): SmoNote[] {\r\n return SmoMeasure.timeSignatureNotes(new TimeSignature(params.timeSignature), params.clef);\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * This version returns params with no notes, for callers that want to use their own notes.\r\n * If you want the default notes, see {@link getDefaultMeasureWithNotes}\r\n * \r\n * @param params\r\n * @returns \r\n */\r\n static getDefaultMeasure(params: SmoMeasureParams): SmoMeasure {\r\n const obj: any = {};\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, SmoMeasure.defaults, obj);\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, params, obj);\r\n // Don't copy column-formatting options to new measure in new column\r\n smoSerialize.serializedMerge(SmoMeasure.formattingOptions, SmoMeasure.defaults, obj);\r\n obj.timeSignature = new TimeSignature(params.timeSignature);\r\n // The measure expects to get concert KS in constructor and adjust for instrument. So do the\r\n // opposite.\r\n obj.keySignature = SmoMusic.vexKeySigWithOffset(obj.keySignature, -1 * obj.transposeIndex);\r\n // Don't redisplay tempo for a new measure\r\n const rv = new SmoMeasure(obj);\r\n if (rv.tempo && rv.tempo.display) {\r\n rv.tempo.display = false;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * \r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultMeasureWithNotes(params: SmoMeasureParams): SmoMeasure {\r\n var measure = SmoMeasure.getDefaultMeasure(params);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(params)\r\n });\r\n // fix a bug.\r\n // new measures only have 1 voice, make sure active voice is 0\r\n measure.activeVoice = 0;\r\n return measure;\r\n }\r\n /**\r\n * used by xml export \r\n * @internal\r\n * @param val \r\n */\r\n getForceSystemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n // @internal\r\n setDefaultBarlines() {\r\n if (!this.getStartBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n if (!this.getEndBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n }\r\n\r\n get containsSound(): boolean {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n let j = 0;\r\n const voice = this.voices[i];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n if (voice.notes[j].noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * The rendered width of the measure, or estimate of same\r\n */\r\n get staffWidth() {\r\n return this.svg.staffWidth;\r\n }\r\n\r\n /**\r\n * set the rendered width of the measure, or estimate of same\r\n */\r\n setWidth(width: number, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n this.svg.history.push('setWidth ' + this.staffWidth + '=> ' + width + ' ' + description);\r\n }\r\n if (isNaN(width)) {\r\n throw ('NAN in setWidth');\r\n }\r\n this.svg.staffWidth = width;\r\n }\r\n\r\n /**\r\n * Get rendered or estimated start x\r\n */\r\n get staffX(): number {\r\n return this.svg.staffX;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start x\r\n */\r\n setX(x: number, description: string) {\r\n if (isNaN(x)) {\r\n throw ('NAN in setX');\r\n }\r\n layoutDebug.measureHistory(this, 'staffX', x, description);\r\n this.svg.staffX = Math.round(x);\r\n }\r\n /**\r\n * A time signature has possibly changed. add/remove notes to\r\n * match the new length\r\n */\r\n alignNotesWithTimeSignature() {\r\n const tsTicks = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n if (tsTicks === this.getMaxTicksVoice()) {\r\n return;\r\n }\r\n const replaceNoteWithDuration = (target: number, ar: SmoNote[], note: SmoNote) => {\r\n const fitNote = new SmoNote(SmoNote.defaults);\r\n const duration = SmoMusic.closestDurationTickLtEq(target);\r\n if (duration > 128) {\r\n fitNote.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n fitNote.pitches = note.pitches;\r\n fitNote.noteType = note.noteType;\r\n fitNote.clef = note.clef;\r\n ar.push(fitNote);\r\n }\r\n }\r\n const voices: SmoVoice[] = [];\r\n const tuplets: SmoTuplet[] = [];\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n const newNotes: SmoNote[] = [];\r\n let voiceTicks = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n // if a tuplet, make sure the whole tuplet fits.\r\n if (note.isTuplet) {\r\n const tuplet = this.getTupletForNote(note);\r\n if (tuplet) {\r\n // remaining notes of an approved tuplet, just add them\r\n if (tuplet.startIndex !== j) {\r\n newNotes.push(note);\r\n continue;\r\n }\r\n else if (tuplet.tickCount + voiceTicks <= tsTicks) {\r\n // first note of the tuplet, it fits, add it\r\n voiceTicks += tuplet.tickCount;\r\n newNotes.push(note);\r\n tuplets.push(tuplet);\r\n } else {\r\n // tuplet will not fit. Make a note as close to remainder as possible and add it\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n } else { // missing tuplet, now what?\r\n console.warn('missing tuplet info');\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n }\r\n } else {\r\n if (note.tickCount + voiceTicks <= tsTicks) {\r\n newNotes.push(note);\r\n voiceTicks += note.tickCount;\r\n } else {\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n }\r\n }\r\n if (tsTicks - voiceTicks > 128) {\r\n const np = SmoNote.defaults;\r\n np.clef = this.clef;\r\n const nnote = new SmoNote(np);\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, nnote);\r\n }\r\n voices.push({ notes: newNotes });\r\n }\r\n this.voices = voices;\r\n this.tuplets = tuplets;\r\n }\r\n /**\r\n * Get rendered or estimated start y\r\n */\r\n get staffY(): number {\r\n return this.svg.staffY;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start y\r\n */\r\n setY(y: number, description: string) {\r\n if (isNaN(y)) {\r\n throw ('NAN in setY');\r\n }\r\n layoutDebug.measureHistory(this, 'staffY', y, description);\r\n this.svg.staffY = Math.round(y);\r\n }\r\n\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n get yTop(): number {\r\n return this.svg.yTop;\r\n }\r\n\r\n /**\r\n * WHen setting an instrument, offset the pitches to match the instrument key\r\n * @param offset \r\n * @param newClef \r\n */\r\n transposeToOffset(offset: number, targetKey: string, newClef?: Clef) {\r\n const diff = offset - this.transposeIndex;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n const pitches: number[] = [...Array(note.pitches.length).keys()];\r\n // when the note is a rest, preserve the rest but match the new clef.\r\n if (newClef && note.noteType === 'r') {\r\n const defp = JSON.parse(JSON.stringify(SmoMeasure.defaultPitchForClef[newClef]));\r\n note.pitches = [defp];\r\n } else {\r\n note.transpose(pitches, diff, this.keySignature, targetKey);\r\n note.getGraceNotes().forEach((gn) => {\r\n const gpitch: number[] = [...Array(gn.pitches.length).keys()];\r\n const xpose = SmoNote.transpose(gn, gpitch, diff, this.keySignature, targetKey);\r\n gn.pitches = xpose.pitches;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n setYTop(y: number, description: string) {\r\n layoutDebug.measureHistory(this, 'yTop', y, description);\r\n this.svg.yTop = y;\r\n }\r\n\r\n /**\r\n * Return actual or estimated bounding box\r\n */\r\n setBox(box: SvgBox, description: string) {\r\n layoutDebug.measureHistory(this, 'logicalBox', box, description);\r\n this.svg.logicalBox = SvgHelpers.smoBox(box);\r\n }\r\n /**\r\n * @returns the DOM identifier for this measure when rendered\r\n */\r\n getClassId() {\r\n return 'mm-' + this.measureNumber.staffId + '-' + this.measureNumber.measureIndex;\r\n }\r\n /**\r\n * \r\n * @param id \r\n * @returns \r\n */\r\n getRenderedNote(id: string) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const voice = this.voices[j];\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const note = voice.notes[i];\r\n if (note.renderId === id) {\r\n return {\r\n smoNote: note,\r\n voice: j,\r\n tick: i\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getNotes() {\r\n return this.voices[this.activeVoice].notes;\r\n }\r\n\r\n getActiveVoice() {\r\n return this.activeVoice;\r\n }\r\n\r\n setActiveVoice(vix: number) {\r\n if (vix >= 0 && vix < this.voices.length) {\r\n this.activeVoice = vix;\r\n }\r\n }\r\n\r\n tickmapForVoice(voiceIx: number) {\r\n return new TickMap(this, voiceIx);\r\n }\r\n\r\n // ### createMeasureTickmaps\r\n // A tickmap is a map of notes to ticks for the measure. It is speciifc per-voice\r\n // since each voice may have different numbers of ticks. The accidental map is\r\n // overall since accidentals in one voice apply to accidentals in the other\r\n // voices. So we return the tickmaps and the overall accidental map.\r\n createMeasureTickmaps(): MeasureTickmaps {\r\n let i = 0;\r\n const tickmapArray: TickMap[] = [];\r\n const accidentalMap: Record> =\r\n {} as Record>;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n tickmapArray.push(this.tickmapForVoice(i));\r\n }\r\n\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const tickmap: TickMap = tickmapArray[i];\r\n const durationKeys: string[] = Object.keys((tickmap.durationAccidentalMap));\r\n\r\n durationKeys.forEach((durationKey: string) => {\r\n if (!accidentalMap[durationKey]) {\r\n accidentalMap[durationKey] = tickmap.durationAccidentalMap[durationKey];\r\n } else {\r\n const amap = accidentalMap[durationKey];\r\n const tickable: Record = tickmap.durationAccidentalMap[durationKey];\r\n const letterKeys: PitchLetter[] = Object.keys(tickable) as Array;\r\n letterKeys.forEach((pitchKey) => {\r\n if (!amap[pitchKey]) {\r\n amap[pitchKey] = tickmap.durationAccidentalMap[durationKey][pitchKey];\r\n }\r\n });\r\n }\r\n });\r\n }\r\n // duration: duration, pitches: Record\r\n const accidentalArray: AccidentalArray[] = [];\r\n Object.keys(accidentalMap).forEach((durationKey) => {\r\n accidentalArray.push({ duration: durationKey, pitches: accidentalMap[durationKey] });\r\n });\r\n return {\r\n tickmaps: tickmapArray,\r\n accidentalMap,\r\n accidentalArray\r\n };\r\n }\r\n // ### createRestNoteWithDuration\r\n // pad some duration of music with rests.\r\n static createRestNoteWithDuration(duration: number, clef: Clef): SmoNote {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[clef]));\r\n const note = new SmoNote(SmoNote.defaults);\r\n note.pitches = [pitch];\r\n note.noteType = 'r';\r\n note.hidden = true;\r\n note.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n return note;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in each voice and return max\r\n * @returns \r\n */\r\n getMaxTicksVoice() {\r\n let i = 0;\r\n let max = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voiceTicks = this.getTicksFromVoice(i);\r\n max = Math.max(voiceTicks, max);\r\n }\r\n return max;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in a specific voice\r\n * @param voiceIndex \r\n * @returns \r\n */\r\n getTicksFromVoice(voiceIndex: number): number {\r\n let ticks = 0;\r\n this.voices[voiceIndex].notes.forEach((note) => {\r\n ticks += note.tickCount;\r\n });\r\n return ticks;\r\n }\r\n\r\n getClosestTickCountIndex(voiceIndex: number, tickCount: number): number {\r\n let i = 0;\r\n let rv = 0;\r\n for (i = 0; i < this.voices[voiceIndex].notes.length; ++i) {\r\n const note = this.voices[voiceIndex].notes[i];\r\n if (note.tickCount + rv > tickCount) {\r\n return rv;\r\n }\r\n rv += note.tickCount;\r\n }\r\n return rv;\r\n }\r\n\r\n isPickup(): boolean {\r\n const ticks = this.getTicksFromVoice(0);\r\n const goal = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n return (ticks < goal);\r\n }\r\n\r\n clearBeamGroups() {\r\n this.beamGroups = [];\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricFont(fontInfo);\r\n });\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setChordFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordFont(fontInfo);\r\n });\r\n });\r\n }\r\n\r\n // ### tuplet methods.\r\n //\r\n // #### tupletNotes\r\n tupletNotes(tuplet: SmoTuplet) {\r\n let j = 0;\r\n let i = 0;\r\n const tnotes = [];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const vnotes = this.voices[j].notes;\r\n for (i = 0; i < vnotes.length; ++i) {\r\n const note = vnotes[i] as SmoNote;\r\n if (note.tuplet && note.tuplet.id === tuplet.attrs.id) {\r\n tnotes.push(vnotes[i]);\r\n }\r\n }\r\n }\r\n return tnotes;\r\n }\r\n\r\n // #### tupletIndex\r\n // return the index of the given tuplet\r\n tupletIndex(tuplet: SmoTuplet) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const notes = this.voices[j].notes;\r\n for (i = 0; i < notes.length; ++i) {\r\n const note = notes[i] as SmoNote;\r\n if (note.tuplet && note.tuplet.id === tuplet.attrs.id) {\r\n return i;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n // #### getTupletForNote\r\n // Finds the tuplet for a given note, or null if there isn't one.\r\n getTupletForNote(note: SmoNote | null): SmoTuplet | null {\r\n let i = 0;\r\n if (!note) {\r\n return null;\r\n }\r\n if (!note.isTuplet) {\r\n return null;\r\n }\r\n for (i = 0; i < this.tuplets.length; ++i) {\r\n const tuplet = this.tuplets[i];\r\n if (note.tuplet !== null && tuplet.attrs.id === note.tuplet.id) {\r\n return tuplet;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n removeTupletForNote(note: SmoNote) {\r\n let i = 0;\r\n const tuplets = [];\r\n for (i = 0; i < this.tuplets.length; ++i) {\r\n const tuplet = this.tuplets[i];\r\n if (note.tuplet !== null && note.tuplet.id !== tuplet.attrs.id) {\r\n tuplets.push(tuplet);\r\n }\r\n }\r\n this.tuplets = tuplets;\r\n }\r\n setClef(clef: Clef) {\r\n const oldClef = this.clef;\r\n this.clef = clef;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.clef = clef;\r\n });\r\n });\r\n }\r\n\r\n isRest() {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n if (!voice.notes[j].isRest()) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n // ### populateVoice\r\n // Create a new voice in this measure, and populate it with the default note\r\n // for this measure/key/clef\r\n populateVoice(index: number) {\r\n if (index !== this.voices.length) {\r\n return;\r\n }\r\n this.voices.push({ notes: SmoMeasure.getDefaultNotes(this) });\r\n this.activeVoice = index;\r\n }\r\n private _removeSingletonModifier(name: string) {\r\n const ar = this.modifiers.filter(obj => obj.attrs.type !== name);\r\n this.modifiers = ar;\r\n }\r\n\r\n addRehearsalMark(parameters: SmoRehearsalMarkParams) {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n this.modifiers.push(new SmoRehearsalMark(parameters));\r\n }\r\n removeRehearsalMark() {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n }\r\n getRehearsalMark(): SmoMeasureModifierBase | undefined {\r\n return this.modifiers.find(obj => obj.attrs.type === 'SmoRehearsalMark');\r\n }\r\n getModifiersByType(type: string) {\r\n return this.modifiers.filter((mm) => type === mm.attrs.type);\r\n }\r\n\r\n setTempo(params: SmoTempoTextParams) {\r\n this.tempo = new SmoTempoText(params);\r\n }\r\n /**\r\n * Set measure tempo to the default {@link SmoTempoText}\r\n */\r\n resetTempo() {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n getTempo() {\r\n if (typeof (this.tempo) === 'undefined') {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return this.tempo;\r\n }\r\n /**\r\n * Measure text is deprecated, and may not be supported in the future.\r\n * Better to use SmoTextGroup and attach to the measure.\r\n * @param mod \r\n * @returns \r\n */\r\n addMeasureText(mod: SmoMeasureModifierBase) {\r\n var exist = this.modifiers.filter((mm) =>\r\n mm.attrs.id === mod.attrs.id\r\n );\r\n if (exist.length) {\r\n return;\r\n }\r\n this.modifiers.push(mod);\r\n }\r\n\r\n getMeasureText() {\r\n return this.modifiers.filter(obj => obj.ctor === 'SmoMeasureText');\r\n }\r\n\r\n removeMeasureText(id: string) {\r\n var ar = this.modifiers.filter(obj => obj.attrs.id !== id);\r\n this.modifiers = ar;\r\n }\r\n\r\n setRepeatSymbol(rs: SmoRepeatSymbol) {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n let toAdd = true;\r\n const exSymbol = this.getRepeatSymbol();\r\n if (exSymbol && exSymbol.symbol === rs.symbol) {\r\n toAdd = false;\r\n }\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n if (toAdd) {\r\n ar.push(rs);\r\n }\r\n }\r\n getRepeatSymbol(): SmoRepeatSymbol | null {\r\n const rv = this.modifiers.filter(obj => obj.ctor === 'SmoRepeatSymbol');\r\n if (rv.length > 0) {\r\n return rv[0] as SmoRepeatSymbol;\r\n }\r\n return null;\r\n }\r\n clearRepeatSymbols() {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n }\r\n\r\n setBarline(barline: SmoBarline) {\r\n var ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline') {\r\n const o = modifier as SmoBarline;\r\n if (o.position !== barline.position) {\r\n ar.push(o);\r\n }\r\n } else {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n ar.push(barline);\r\n }\r\n\r\n private _getBarline(pos: number): SmoBarline {\r\n let rv = null;\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === pos) {\r\n rv = modifier;\r\n }\r\n });\r\n if (rv === null) {\r\n return new SmoBarline(SmoBarline.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n getEndBarline(): SmoBarline { \r\n return this._getBarline(SmoBarline.positions.end);\r\n }\r\n getStartBarline(): SmoBarline {\r\n return this._getBarline(SmoBarline.positions.start);\r\n }\r\n\r\n addNthEnding(ending: SmoVolta) {\r\n const mods = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoVolta' || (modifier as SmoVolta).startBar !== ending.startBar ||\r\n (modifier as SmoVolta).endBar !== ending.endBar) {\r\n mods.push(modifier);\r\n }\r\n });\r\n mods.push(ending);\r\n this.modifiers = mods;\r\n }\r\n\r\n removeNthEnding(ending: SmoVolta) {\r\n const mods: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n const volta = modifier as SmoVolta;\r\n if (ending.startSelector === null || ending.endSelector === null || volta.startSelector === null || volta.endSelector === null) {\r\n return;\r\n }\r\n if (!SmoSelector.sameMeasure(ending.startSelector, volta.startSelector) || !SmoSelector.sameMeasure(ending.endSelector, volta.endSelector)\r\n && ending.number !== volta.number) {\r\n mods.push(modifier);\r\n }\r\n } else {\r\n mods.push(modifier);\r\n }\r\n });\r\n this.modifiers = mods;\r\n }\r\n\r\n getNthEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier: SmoMeasureModifierBase) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n getEndEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier: SmoMeasureModifierBase) => {\r\n if (modifier.ctor === 'SmoVolta' && (modifier as SmoVolta).endBar === this.measureNumber.systemIndex\r\n && (modifier as SmoVolta).startBar !== this.measureNumber.systemIndex) {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n getMidEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoVolta' && (modifier as SmoVolta).endBar > this.measureNumber.systemIndex\r\n && (modifier as SmoVolta).startBar < this.measureNumber.systemIndex) {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n setKeySignature(sig: string) {\r\n this.keySignature = sig;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.keySignature = sig;\r\n });\r\n });\r\n }\r\n setMeasureNumber(num: MeasureNumber) {\r\n this.measureNumber = num;\r\n }\r\n getBeamGroupForNote(note: SmoNote) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < this.beamGroups.length; ++i) {\r\n const bg = this.beamGroups[i];\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n if (bg.notes[j].attrs.id === note.attrs.id) {\r\n return bg;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /smo/data/measureModifiers\r\n * **/\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport { SmoAttrs, MeasureNumber, SmoObjectParams, SvgBox, SmoModifierBase, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * Measure modifiers are attached to the measure itself. Each instance has a\r\n * `serialize()` method and a `ctor` attribute for deserialization.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoMeasureModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\nexport type SmoMeasureFormatNumberAttributes = 'customStretch' | 'proportionality' | 'padLeft' | 'measureIndex';\r\nexport const SmoMeasureFormatNumberKeys: SmoMeasureFormatNumberAttributes[] =\r\n ['customStretch', 'proportionality', 'padLeft', 'measureIndex'];\r\nexport type SmoMeasueFormatBooleanAttributes = 'autoJustify' | 'systemBreak' | 'skipMeasureCount' | 'pageBreak' | 'padAllInSystem' | 'restBreak' | 'forceRest';\r\nexport const SmoMeasureFormatBooleanKeys: SmoMeasueFormatBooleanAttributes[] = ['autoJustify','skipMeasureCount', 'systemBreak', 'pageBreak', 'padAllInSystem', 'restBreak', 'forceRest'];\r\n\r\n/**\r\n * Constructor parameter for measure formatting object\r\n */\r\nexport interface SmoMeasureFormatParams {\r\n /**\r\n * additional pixels to a measure (plus or minus)\r\n */\r\n customStretch: number | null,\r\n /**\r\n * softmax factor, controls how tightly rhythms are formatted\r\n */\r\n proportionality: number | null,\r\n /**\r\n * break justification for this column\r\n */\r\n autoJustify: boolean | null,\r\n /**\r\n * create a new system before this measure\r\n */\r\n systemBreak: boolean | null,\r\n /**\r\n * create a new system before this page\r\n */\r\n pageBreak: boolean | null,\r\n /**\r\n * force a break in multi-measure rest\r\n */\r\n restBreak: boolean | null,\r\n /**\r\n * treat this measure like a whole rest\r\n */\r\n forceRest: boolean | null,\r\n /**\r\n * if score is grouping measures per system, skip this measure in the count\r\n * (used for short measures, or pickups)\r\n */\r\n skipMeasureCount: boolean | null,\r\n /**\r\n * pad left, e.g. for the first stave in a system\r\n */\r\n padLeft: number | null,\r\n /**\r\n * if padding left, pad all the measures in the column\r\n */\r\n padAllInSystem: boolean | null,\r\n /**\r\n * renumber measures\r\n */\r\n measureIndex: number | null,\r\n}\r\n/**\r\n * Serialization for measure formatting customization, like system break\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureFormatParamsSer extends SmoMeasureFormatParams{\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string\r\n }\r\n function isSmoMeasureParamsSer(params: Partial):params is SmoMeasureFormatParamsSer {\r\n return typeof(params.ctor) === 'string';\r\n }\r\n/**\r\n * ISmoMeasureFormatMgr is the DI interface to the\r\n * format manager. Measure formats are often the same to multiple measures\r\n * so we don't serialize each one - instead we map them with this interface\r\n */\r\nexport interface ISmoMeasureFormatMgr {\r\n format: SmoMeasureFormatParams,\r\n measureNumber: MeasureNumber\r\n}\r\n/**\r\n * Measure format holds parameters about the automatic formatting of the measure itself, such as the witch and\r\n * how the durations are proportioned. Note that measure formatting is also controlled by the justification\r\n * between voices and staves. For instance, 2 measures in different staves will have to have the same width\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureFormat extends SmoMeasureModifierBase implements SmoMeasureFormatParams {\r\n static get attributes() {\r\n return ['customStretch', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', \r\n 'padLeft', 'measureIndex', 'padAllInSystem', 'skipMeasureCount', 'restBreak', 'forceRest'];\r\n }\r\n static get formatAttributes() {\r\n return ['customStretch', 'skipMeasureCount', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', 'padLeft'];\r\n }\r\n static get defaultProportionality() {\r\n return 0;\r\n }\r\n static get legacyProportionality() {\r\n return 0;\r\n }\r\n static fromLegacyMeasure(measure: any) {\r\n const o: any = {};\r\n SmoMeasureFormat.formatAttributes.forEach((attr: string | number) => {\r\n if (typeof (measure[attr]) !== 'undefined') {\r\n o[attr] = measure[attr];\r\n } else {\r\n const rhs = (SmoMeasureFormat.defaults as any)[attr];\r\n o[attr] = rhs;\r\n }\r\n o.measureIndex = measure.measureNumber.measureIndex;\r\n });\r\n return new SmoMeasureFormat(o);\r\n }\r\n static get defaults(): SmoMeasureFormatParams {\r\n return JSON.parse(JSON.stringify({\r\n customStretch: 0,\r\n proportionality: SmoMeasureFormat.defaultProportionality,\r\n systemBreak: false,\r\n pageBreak: false,\r\n restBreak: false,\r\n forceRest: false,\r\n padLeft: 0,\r\n padAllInSystem: true,\r\n skipMeasureCount: false,\r\n autoJustify: true,\r\n measureIndex: 0,\r\n }));\r\n }\r\n customStretch: number = SmoMeasureFormat.defaultProportionality;\r\n proportionality: number = 0;\r\n systemBreak: boolean = false;\r\n pageBreak: boolean = false;\r\n restBreak: boolean = false;\r\n skipMeasureCount: boolean = false;\r\n forceRest: boolean = false;\r\n padLeft: number = 0;\r\n padAllInSystem: boolean = true;\r\n autoJustify: boolean = true;\r\n measureIndex: number = 0;\r\n eq(o: SmoMeasureFormatParams) {\r\n let rv = true;\r\n SmoMeasureFormatBooleanKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr]) {\r\n rv = false;\r\n }\r\n });\r\n SmoMeasureFormatNumberKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr] && attr !== 'measureIndex') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n get isDefault() {\r\n return this.eq(SmoMeasureFormat.defaults);\r\n }\r\n constructor(parameters: SmoMeasureFormatParams) {\r\n super('SmoMeasureFormat');\r\n const def = SmoMeasureFormat.defaults;\r\n SmoMeasureFormatNumberKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n SmoMeasureFormatBooleanKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n }\r\n formatMeasure(mm: ISmoMeasureFormatMgr) {\r\n mm.format = new SmoMeasureFormat(this);\r\n mm.format.measureIndex = mm.measureNumber.measureIndex;\r\n }\r\n serialize(): SmoMeasureFormatParamsSer {\r\n const params: Partial = { ctor: 'SmoMeasureFormat' };\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureFormat.defaults, SmoMeasureFormat.attributes, this, params);\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw('bad type SmoMeasureFormatParamsSer');\r\n }\r\n return params;\r\n }\r\n}\r\n/**\r\n * Used to create a {@link SmoBarline}\r\n */\r\nexport interface SmoBarlineParams {\r\n position: number | null,\r\n barline: number | null\r\n}\r\n\r\nexport interface SmoBarlineParamsSer extends SmoBarlineParams {\r\n ctor: string,\r\n position: number | null,\r\n barline: number | null\r\n}\r\n/**\r\n * Barline is just that, there is a start and end in each measure, which defaults to 'single'.\r\n * @category SmoModifier\r\n */\r\nexport class SmoBarline extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n };\r\n\r\n static readonly barlines: Record = {\r\n singleBar: 0,\r\n doubleBar: 1,\r\n endBar: 2,\r\n startRepeat: 3,\r\n endRepeat: 4,\r\n noBar: 5\r\n }\r\n\r\n static get _barlineToString() {\r\n return ['singleBar', 'doubleBar', 'endBar', 'startRepeat', 'endRepeat', 'noBar'];\r\n }\r\n static barlineString(inst: SmoBarline) {\r\n return SmoBarline._barlineToString[inst.barline];\r\n }\r\n\r\n static get defaults(): SmoBarlineParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n\r\n static get attributes() {\r\n return ['position', 'barline'];\r\n }\r\n serialize(): SmoBarlineParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoBarline.defaults, SmoBarline.attributes, this, params);\r\n params.ctor = 'SmoBarline';\r\n return params;\r\n }\r\n\r\n constructor(parameters: SmoBarlineParams | null) {\r\n super('SmoBarline');\r\n let ops = parameters as any;\r\n if (typeof (parameters) === 'undefined' || parameters === null) {\r\n ops = {};\r\n }\r\n smoSerialize.serializedMerge(SmoBarline.attributes, SmoBarline.defaults, this);\r\n smoSerialize.serializedMerge(SmoBarline.attributes, ops, this);\r\n }\r\n barline: number = SmoBarline.barlines.singleBar;\r\n position: number = SmoBarline.positions.start;\r\n}\r\n\r\n/**\r\n * Constructor for SmoRepeatSymbol\r\n */\r\nexport interface SmoRepeatSymbolParams {\r\n /**\r\n * The symbol enumeration\r\n */\r\n symbol: number,\r\n /**\r\n * x offset for DC, sign etc.\r\n */\r\n xOffset: number,\r\n /**\r\n * y offset for DC, sign etc.\r\n */\r\n yOffset: number,\r\n /**\r\n * position, above or below\r\n */\r\n position: number\r\n}\r\n\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoRepeatSymbolParamsSer extends SmoRepeatSymbolParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\nfunction isSmoRepeatSymbolParamsSer(params: Partial):params is SmoRepeatSymbolParamsSer {\r\n return typeof(params.ctor) === 'string' && params.ctor === 'SmoRepeatSymbol';\r\n }\r\n/**\r\n * Repeat symbols like DC, Fine etc. Note: voltas are their own thing,\r\n * and repeats are types of barlines.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRepeatSymbol extends SmoMeasureModifierBase {\r\n static readonly symbols: Record = {\r\n None: 0,\r\n Coda: 1,\r\n Segno: 2,\r\n Dc: 3,\r\n ToCoda: 1,\r\n DcAlCoda: 4,\r\n DcAlFine: 5,\r\n Ds: 6,\r\n DsAlCoda: 7,\r\n DsAlFine: 8,\r\n Fine: 9\r\n }\r\n\r\n static readonly defaultXOffset: number[] = [0, 0, 0, -20, -60, -60, -50, -60, -50, -40]\r\n\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n }\r\n static get defaults(): SmoRepeatSymbolParams {\r\n return JSON.parse(JSON.stringify({\r\n symbol: SmoRepeatSymbol.symbols.Coda,\r\n xOffset: 0,\r\n yOffset: 30,\r\n position: SmoRepeatSymbol.positions.end\r\n }));\r\n }\r\n static get attributes() {\r\n return ['symbol', 'xOffset', 'yOffset', 'position'];\r\n }\r\n symbol: number = SmoRepeatSymbol.symbols.Coda;\r\n xOffset: number = 0;\r\n yOffset: number = 30;\r\n position: number = SmoRepeatSymbol.positions.end;\r\n\r\n serialize(): SmoRepeatSymbolParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRepeatSymbol.defaults, SmoRepeatSymbol.attributes, this, params);\r\n params.ctor = 'SmoRepeatSymbol';\r\n if (!isSmoRepeatSymbolParamsSer(params)) {\r\n throw 'bad type SmoRepeatSymbolParamsSer';\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoRepeatSymbolParams) {\r\n super('SmoRepeatSymbol');\r\n if (!parameters.symbol) {\r\n parameters.symbol = SmoRepeatSymbol.symbols.Coda;\r\n }\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, SmoRepeatSymbol.defaults, this);\r\n this.xOffset = SmoRepeatSymbol.defaultXOffset[parameters.symbol];\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, parameters, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoVolta} (2nd ending)\r\n * @category SmoParameters\r\n */\r\nexport interface SmoVoltaParams {\r\n /**\r\n * start bar of ending\r\n */\r\n startBar: number,\r\n /**\r\n * end bar (how long it stretches)\r\n */\r\n endBar: number,\r\n /**\r\n * xoffset for start, for collisions\r\n */\r\n xOffsetStart: number,\r\n /**\r\n * xoffset for end, for collisions\r\n */\r\n xOffsetEnd: number,\r\n /**\r\n * yOffset, for collisions\r\n */\r\n yOffset: number,\r\n /**\r\n * 2nd ending, 3rd etc.\r\n */\r\n number: number\r\n}\r\n/**\r\n * serializable bits of volta/endings\r\n * @category serialization\r\n */\r\nexport interface SmoVoltaParamsSer extends SmoVoltaParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Voltas (2nd endings) behave more like staff modifiers, but they are associated with the measure\r\n * since each measure has it's own rules for displaying part of the volta.\r\n * @category SmoModifier\r\n */\r\nexport class SmoVolta extends SmoMeasureModifierBase {\r\n startBar: number = 1;\r\n endBar: number = 1;\r\n xOffsetStart: number = 0;\r\n xOffsetEnd: number = 0;\r\n yOffset: number = 20;\r\n number: number = 1;\r\n endingId: string | null = null;\r\n startSelector: SmoSelector | null = null;\r\n endSelector: SmoSelector | null = null;\r\n elements: SVGSVGElement[] = [];\r\n constructor(parameters: SmoVoltaParams) {\r\n super('SmoVolta');\r\n smoSerialize.serializedMerge(SmoVolta.attributes, SmoVolta.defaults, this);\r\n smoSerialize.serializedMerge(SmoVolta.attributes, parameters, this);\r\n }\r\n get id() {\r\n return this.attrs.id;\r\n }\r\n get type() {\r\n return this.attrs.type;\r\n }\r\n static get attributes() {\r\n return ['startBar', 'endBar', 'endingId', 'startSelector', 'endSelector', 'xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n static get editableAttributes() {\r\n return ['xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n\r\n serialize(): SmoVoltaParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoVolta.defaults, SmoVolta.attributes, this, params);\r\n params.ctor = 'SmoVolta';\r\n return params;\r\n }\r\n\r\n static get defaults(): SmoVoltaParams {\r\n return JSON.parse(JSON.stringify({\r\n startBar: 1,\r\n endBar: 1,\r\n xOffsetStart: 0,\r\n xOffsetEnd: 0,\r\n yOffset: 20,\r\n number: 1\r\n }));\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMeasureText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureTextParams {\r\n position: number,\r\n fontInfo: FontInfo,\r\n text: string,\r\n adjustX: number,\r\n adjustY: number,\r\n justification: number\r\n}\r\n/**\r\n * Serialized fields of SmoMeasureTextParams\r\n */\r\nexport interface SmoMeasureTextParamsSer extends SmoMeasureTextParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\n/**\r\n * Measure text is just that. Now that score text can be associated with musical elements, this\r\n * class has falled into disrepair. It may be used for part notations in the score later.\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureText extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3, none: 4\r\n }\r\n\r\n static readonly justifications: Record = {\r\n left: 0, right: 1, center: 2\r\n }\r\n\r\n static readonly _positionToString: string[] = ['above', 'below', 'left', 'right']\r\n\r\n static get attributes() {\r\n return ['position', 'fontInfo', 'text', 'adjustX', 'adjustY', 'justification'];\r\n }\r\n\r\n static readonly defaults: SmoMeasureTextParams = {\r\n position: SmoMeasureText.positions.above,\r\n fontInfo: {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n text: 'Smo',\r\n adjustX: 0,\r\n adjustY: 0,\r\n justification: SmoMeasureText.justifications.center\r\n }\r\n justification: number = SmoMeasureText.justifications.center;\r\n position: number = SmoMeasureText.positions.above;\r\n text: string = '';\r\n adjustX: number = 0;\r\n adjustY: number = 0;\r\n fontInfo: FontInfo = {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n serialize(): SmoMeasureTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureText.defaults, SmoMeasureText.attributes, this, params);\r\n params.ctor = 'SmoMeasureText';\r\n return params as SmoMeasureTextParamsSer; // trivial class, no 'is'\r\n }\r\n\r\n constructor(parameters: SmoMeasureTextParams | null) {\r\n super('SmoMeasureText');\r\n let pobj = parameters as any;\r\n if (pobj === null) {\r\n pobj = SmoMeasureText.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, SmoMeasureText.defaults, this);\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, pobj, this);\r\n\r\n // right-justify left text and left-justify right text by default\r\n if (!pobj.justification) {\r\n // eslint-disable-next-line\r\n this.justification = (this.position === SmoMeasureText.positions.left) ? SmoMeasureText.justifications.right :\r\n (this.position === SmoMeasureText.positions.right ? SmoMeasureText.justifications.left : this.justification);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Used to construct {@link SmoRehearsalMark}\r\n * @category SmoParams\r\n * */\r\nexport interface SmoRehearsalMarkParams {\r\n /**\r\n * cardinal position\r\n */\r\n position: number,\r\n /**\r\n * Symbol. by default, letters that auto-increment\r\n */\r\n symbol: string,\r\n /**\r\n * future, define how increment works\r\n */\r\n cardinality: string,\r\n /**\r\n * disable to make your own symbols for each new one.\r\n */\r\n increment: boolean\r\n}\r\n\r\n/**\r\n * Serialized fields for rehearsal mark\r\n * @category serialization\r\n */\r\nexport interface SmoRehearsalMarkParamsSer extends SmoRehearsalMarkParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Rehearsal marks are some type of auto-incrementing markers on a measure index.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRehearsalMark extends SmoMeasureModifierBase {\r\n static readonly cardinalities: Record = {\r\n capitals: 'capitals', lowerCase: 'lowerCase', numbers: 'numbers'\r\n }\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3\r\n }\r\n\r\n static get _positionToString(): string[] {\r\n return ['above', 'below', 'left', 'right'];\r\n }\r\n\r\n // TODO: positions don't work.\r\n static get defaults(): SmoRehearsalMarkParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoRehearsalMark.positions.above,\r\n cardinality: SmoRehearsalMark.cardinalities.capitals,\r\n symbol: 'A',\r\n increment: true\r\n }));\r\n }\r\n static get attributes() {\r\n return ['cardinality', 'symbol', 'position', 'increment'];\r\n }\r\n position: number = SmoRehearsalMark.positions.above;\r\n cardinality: string = SmoRehearsalMark.cardinalities.capitals;\r\n symbol: string = 'A';\r\n increment: boolean = true;\r\n\r\n getIncrement() {\r\n if (this.cardinality !== 'number') {\r\n const code = this.symbol.charCodeAt(0) + 1;\r\n const symbol = String.fromCharCode(code);\r\n return symbol;\r\n } else {\r\n return (parseInt(this.symbol, 10) + 1).toString();\r\n }\r\n }\r\n getInitial() {\r\n // eslint-disable-next-line\r\n return this.cardinality === SmoRehearsalMark.cardinalities.capitals ? 'A' :\r\n (this.cardinality === SmoRehearsalMark.cardinalities.lowerCase ? 'a' : '1');\r\n }\r\n serialize(): SmoRehearsalMarkParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRehearsalMark.defaults, SmoRehearsalMark.attributes, this, params);\r\n params.ctor = 'SmoRehearsalMark';\r\n return params as SmoRehearsalMarkParamsSer;\r\n }\r\n constructor(parameters: SmoRehearsalMarkParams) {\r\n super('SmoRehearsalMark');\r\n let pobj = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = SmoRehearsalMark.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, SmoRehearsalMark.defaults, this);\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, pobj, this);\r\n if (!pobj.symbol) {\r\n this.symbol = this.getInitial();\r\n }\r\n }\r\n}\r\n\r\nexport type SmoTempoNumberAttribute = 'bpm' | 'beatDuration' | 'yOffset';\r\nexport type SmoTempoStringAttribute = 'tempoMode' | 'tempoText' | 'customText';\r\nexport type SmoTempoBooleanAttribute = 'display';\r\n\r\nexport type SmoTempoMode = 'duration' | 'text' | 'custom';\r\n/**\r\n * constructor parameters for {@link SmoTempoText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTempoTextParams {\r\n /**\r\n * text (e.g. Allegro) or bpm\r\n */\r\n tempoMode: string,\r\n /**\r\n * playback bpm\r\n */\r\n bpm: number,\r\n /**\r\n * note type for a metronome beat\r\n */\r\n beatDuration: number,\r\n /**\r\n * if text mode, the text\r\n */\r\n tempoText: string,\r\n /**\r\n * move the text to keep it from colliding with other things\r\n */\r\n yOffset: number,\r\n /**\r\n * indicate if we are displaying, false if only affects playback\r\n */\r\n display: boolean,\r\n /**\r\n * text taht is not a standards notation\r\n */\r\n customText: string\r\n}\r\n/**\r\n * serialized tempo parameters\r\n * @category serialization\r\n */\r\nexport interface SmoTempoTextParamsSer extends SmoTempoTextParams {\r\n ctor: string;\r\n}\r\nexport interface VexTempoTextParams {\r\n duration?: string, dots?: number, bpm?: number, name?: string \r\n}\r\n\r\n/**\r\n * Information about both playback tempo and how the tempo is notated.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTempoText extends SmoMeasureModifierBase implements SmoTempoTextParams {\r\n static get tempoModes(): Record {\r\n return {\r\n durationMode: 'duration',\r\n textMode: 'text',\r\n customMode: 'custom'\r\n };\r\n }\r\n static get tempoTexts(): Record {\r\n return {\r\n larghissimo: 'Larghissimo',\r\n grave: 'Grave',\r\n lento: 'Lento',\r\n largo: 'Largo',\r\n larghetto: 'Larghetto',\r\n adagio: 'Adagio',\r\n adagietto: 'Adagietto',\r\n andante_moderato: 'Andante moderato',\r\n andante: 'Andante',\r\n andantino: 'Andantino',\r\n moderator: 'Moderato',\r\n allegretto: 'Allegretto',\r\n allegro: 'Allegro',\r\n vivace: 'Vivace',\r\n presto: 'Presto',\r\n prestissimo: 'Prestissimo'\r\n };\r\n }\r\n\r\n /**\r\n * create defaults for tempo initialization\r\n */\r\n static get defaults(): SmoTempoTextParams {\r\n return JSON.parse(JSON.stringify({\r\n tempoMode: SmoTempoText.tempoModes.durationMode,\r\n bpm: 120,\r\n beatDuration: 4096,\r\n tempoText: SmoTempoText.tempoTexts.allegro,\r\n yOffset: 0,\r\n display: false,\r\n customText: ''\r\n }));\r\n }\r\n static get attributes() {\r\n return ['tempoMode', 'bpm', 'display', 'beatDuration', 'tempoText', 'yOffset', 'customText'];\r\n }\r\n tempoMode: SmoTempoMode = SmoTempoText.tempoModes.durationMode\r\n bpm: number = 120;\r\n beatDuration: number = 4096;\r\n tempoText: string = 'Allegro';\r\n yOffset: number = 0;\r\n display: boolean = false;\r\n customText: string = '';\r\n\r\n _toVexTextTempo(): VexTempoTextParams {\r\n return { name: this.tempoText };\r\n }\r\n\r\n /**\r\n * Return equality wrt the tempo marking, e.g. 2 allegro in textMode will be equal but\r\n * an allegro and duration 120bpm will not.\r\n * @param t1 \r\n * @param t2 \r\n * @returns \r\n */\r\n static eq(t1: SmoTempoText, t2: SmoTempoText) {\r\n if (t1.tempoMode !== t2.tempoMode) {\r\n return false;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n return t1.tempoText === t2.tempoText;\r\n } else {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration &&\r\n t1.tempoText === t2.tempoText;\r\n }\r\n }\r\n\r\n static get bpmFromText(): Record {\r\n const rv: any = {};\r\n rv[SmoTempoText.tempoTexts.larghissimo] = 24;\r\n rv[SmoTempoText.tempoTexts.grave] = 40;\r\n rv[SmoTempoText.tempoTexts.lento] = 45;\r\n rv[SmoTempoText.tempoTexts.largo] = 40;\r\n rv[SmoTempoText.tempoTexts.larghetto] = 60;\r\n rv[SmoTempoText.tempoTexts.adagio] = 72;\r\n rv[SmoTempoText.tempoTexts.adagietto] = 72;\r\n rv[SmoTempoText.tempoTexts.andante_moderato] = 72;\r\n rv[SmoTempoText.tempoTexts.andante] = 84;\r\n rv[SmoTempoText.tempoTexts.andantino] = 92;\r\n rv[SmoTempoText.tempoTexts.moderator] = 96;\r\n rv[SmoTempoText.tempoTexts.allegretto] = 96;\r\n rv[SmoTempoText.tempoTexts.allegro] = 120;\r\n rv[SmoTempoText.tempoTexts.vivace] = 144;\r\n rv[SmoTempoText.tempoTexts.presto] = 168;\r\n rv[SmoTempoText.tempoTexts.prestissimo] = 240;\r\n\r\n return rv as Record;\r\n }\r\n\r\n _toVexDurationTempo(): VexTempoTextParams {\r\n var vd = SmoMusic.ticksToDuration[this.beatDuration];\r\n var dots = (vd.match(/d/g) || []).length;\r\n vd = vd.replace(/d/g, '');\r\n const rv: any = { duration: vd, dots, bpm: this.bpm };\r\n if (this.customText.length) {\r\n rv.name = this.customText;\r\n }\r\n return rv;\r\n }\r\n toVexTempo(): VexTempoTextParams {\r\n if (this.tempoMode === SmoTempoText.tempoModes.durationMode ||\r\n this.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n return this._toVexDurationTempo();\r\n }\r\n return this._toVexTextTempo();\r\n }\r\n serialize(): SmoTempoTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTempoText.defaults, SmoTempoText.attributes, this, params);\r\n params.ctor = 'SmoTempoText';\r\n return params as SmoTempoTextParamsSer;\r\n }\r\n constructor(parameters: SmoTempoTextParams | null) {\r\n super('SmoTempoText');\r\n let pobj: any = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = {};\r\n }\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, SmoTempoText.defaults, this);\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, pobj, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for a time signature\r\n * @category SmoParameters\r\n */\r\nexport interface TimeSignatureParameters {\r\n /**\r\n * numerator\r\n */\r\n actualBeats: number,\r\n /**\r\n * denominator, always power of 2\r\n */\r\n beatDuration: number,\r\n /**\r\n * indicates cut time/common time\r\n */\r\n useSymbol: boolean,\r\n /**\r\n * display, else just affects measure lengths.\r\n */\r\n display: boolean,\r\n /**\r\n * for pickups, display the non-pickup value\r\n */\r\n displayString: string\r\n}\r\n\r\n/**\r\n * serialized time signature\r\n * @category serialization\r\n */\r\nexport interface TimeSignatureParametersSer extends TimeSignatureParameters {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Time signatures contain duration information for a measure, and information\r\n * about the display of the time signature.\r\n * @category SmoModifier\r\n */\r\nexport class TimeSignature extends SmoMeasureModifierBase {\r\n static get defaults(): TimeSignatureParameters {\r\n return {\r\n actualBeats: 4,\r\n beatDuration: 4,\r\n useSymbol: false,\r\n display: true,\r\n displayString: ''\r\n };\r\n }\r\n static equal(ts1: TimeSignature, ts2: TimeSignature): boolean {\r\n return (ts1.actualBeats === ts2.actualBeats && ts1.beatDuration === ts2.beatDuration);\r\n }\r\n static createFromPartial(value: Partial) {\r\n const params = TimeSignature.defaults;\r\n smoSerialize.serializedMerge(TimeSignature.parameters, value, params);\r\n return new TimeSignature(params);\r\n }\r\n // timeSignature: string = '4/4';\r\n actualBeats: number = 4;\r\n beatDuration: number = 4;\r\n useSymbol: boolean = false;\r\n display: boolean = true;\r\n displayString: string = '';\r\n get timeSignature() {\r\n return this.actualBeats.toString() + '/' + this.beatDuration.toString();\r\n }\r\n static get parameters() {\r\n return ['actualBeats', 'beatDuration', 'useSymbol', 'display', 'displayString'];\r\n }\r\n static get boolParameters() {\r\n return [];\r\n }\r\n set timeSignature(value: string) {\r\n const ar = value.split('/');\r\n this.actualBeats = parseInt(ar[0], 10);\r\n this.beatDuration = parseInt(ar[1], 10);\r\n }\r\n serialize(): TimeSignatureParametersSer {\r\n const rv: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(TimeSignature.defaults, TimeSignature.parameters, this, rv);\r\n rv.ctor = 'TimeSignature';\r\n return rv as TimeSignatureParametersSer;\r\n }\r\n constructor(params: TimeSignatureParameters) {\r\n super('TimeSignature');\r\n this.actualBeats = params.actualBeats;\r\n this.beatDuration = params.beatDuration;\r\n this.useSymbol = params.useSymbol;\r\n this.display = params.display;\r\n this.displayString = params.displayString;\r\n }\r\n}\r\n","/**\r\n * shared music theory and audio frequency routines, helper functions etc.\r\n * @module /smo/data/music\r\n */\r\n\r\n// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote } from './note';\r\nimport { Pitch, PitchKey, Clef, PitchLetter, TickAccidental, \r\n AccidentalArray, AccidentalDisplay } from './common';\r\nimport { SmoMicrotone } from './noteModifiers';\r\nimport { VexFlow, pitchToLedgerLine, vexCanonicalNotes } from '../../common/vex';\r\n\r\n/**\r\n * Used for xml clef conversion\r\n */\r\nexport interface ClefSign {\r\n sign: string,\r\n line?: number,\r\n octave?: number\r\n}\r\n\r\n/**\r\n * calculate the pitch frequency, just temperment a=440, etc.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoAudioPitch {\r\n // ### _frequencies\r\n // Compute the equal-temperment frequencies of the notes.\r\n static _computeFrequencies() {\r\n const map: Record = {};\r\n let lix = 0;\r\n const octaves = [1, 2, 3, 4, 5, 6, 7];\r\n const letters = ['cn', 'c#', 'dn', 'd#', 'en', 'fn', 'f#', 'gn', 'g#', 'an', 'a#', 'bn'];\r\n\r\n const just = Math.pow(2, (1.0 / 12));\r\n const baseFrequency = (440 / 16) * Math.pow(just, 3);\r\n\r\n octaves.forEach((octave) => {\r\n const base = baseFrequency * Math.pow(2, octave - 1);\r\n lix = 0;\r\n letters.forEach((letter) => {\r\n const freq = base * Math.pow(just, lix);\r\n var enharmonics = SmoMusic.getEnharmonics(letter);\r\n enharmonics.forEach((en) => {\r\n // Adjust for B4 higher than C4\r\n const adjOctave = (letter[0] === 'b' && en[0] === 'c') ?\r\n octave + 1 : octave;\r\n map[en + adjOctave.toString()] = freq;\r\n });\r\n lix += 1;\r\n });\r\n });\r\n\r\n return map;\r\n }\r\n static frequencies: Record | null = null;\r\n\r\n static get pitchFrequencyMap() {\r\n if (!SmoAudioPitch.frequencies) {\r\n SmoAudioPitch.frequencies = SmoAudioPitch._computeFrequencies();\r\n }\r\n\r\n return SmoAudioPitch.frequencies;\r\n }\r\n\r\n static _rawPitchToFrequency(smoPitch: Pitch, offset: number): number {\r\n const npitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch) + offset);\r\n const vx = npitch.letter.toLowerCase() + npitch.accidental + npitch.octave.toString();\r\n return SmoAudioPitch.pitchFrequencyMap[vx];\r\n }\r\n /**\r\n * \r\n * @param smoPitch - pitch from the SMO object\r\n * @param offset - transpose 1/2 steps, 0 means no transpose\r\n * @param tone - optional transpose microtone\r\n * @returns \r\n */\r\n static smoPitchToFrequency(smoPitch: Pitch, offset: number, tone: SmoMicrotone | null) {\r\n let pitchInt = 0;\r\n let rv = SmoAudioPitch._rawPitchToFrequency(smoPitch, offset);\r\n if (tone) {\r\n const coeff = tone.toPitchCoeff;\r\n pitchInt = SmoMusic.smoPitchToInt(smoPitch);\r\n pitchInt += (coeff > 0) ? 1 : -1;\r\n const otherSmo = SmoMusic.smoIntToPitch(pitchInt);\r\n const otherPitch = SmoAudioPitch._rawPitchToFrequency(otherSmo, offset);\r\n rv += Math.abs(rv - otherPitch) * coeff;\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * interface for valid non-tuplet duration value (all the\r\n * base note lengths + dots)\r\n */\r\nexport interface SimpleDuration {\r\n index: number, \r\n ticks: number,\r\n baseTicks: number,\r\n dots: number\r\n}\r\n/**\r\n * description of a scale entry, from vex theory routines\r\n */\r\nexport interface VexNoteValue {\r\n root_index: number,\r\n int_val: number\r\n};\r\n/**\r\n * Describe the music theory role of an accidental vs. the key signature. \r\n * Used to determine default enharmonic spelling.\r\n * @category SmoUtilities\r\n */\r\nexport interface KeySignatureRole {\r\n letter: PitchLetter,\r\n accidental: string,\r\n role: string\r\n};\r\n\r\n/**\r\n * Helper functions that build on the VX music theory routines, and other\r\n * utilities I wish were in VF.Music but aren't\r\n * ## Note on pitch and duration format\r\n * We use some VEX music theory routines and frequently need to convert\r\n * formats from SMO format. We also use the same 'ticks' abstraction for\r\n * durations.\r\n * \r\n * `Smo` uses pitch JSON:\r\n * ```javascript\r\n * {note:'c',accidental:'#',octave:4}\r\n * ```\r\n * \r\n * `Vex` usually uses a canonical string:\r\n * \r\n * `'c#/4'`\r\n * \r\n * Depending on the operation, the octave might be omitted\r\n * \r\n * `Smo` uses a JSON for duration always:\r\n * ```javascript\r\n * {numerator:4096,denominator:1,remainder:0}\r\n * ```\r\n * `Vex` uses a letter duration (`'4'` or `'q'`for 1/4 note) and `'d'` for dot.\r\n * \r\n * I try to indicate whether I am using vex or smo notation in the function name.\r\n * Duration methods start around line 1100\r\n * @category SmoUtilities\r\n */\r\nexport class SmoMusic {\r\n /**\r\n * Ported from vex, used to convert pitches to numerical values\r\n * */\r\n static get noteValues(): Record {\r\n return {\r\n c: { root_index: 0, int_val: 0 },\r\n cn: { root_index: 0, int_val: 0 },\r\n 'c#': { root_index: 0, int_val: 1 },\r\n 'c##': { root_index: 0, int_val: 2 },\r\n cb: { root_index: 0, int_val: 11 },\r\n cbb: { root_index: 0, int_val: 10 },\r\n d: { root_index: 1, int_val: 2 },\r\n dn: { root_index: 1, int_val: 2 },\r\n 'd#': { root_index: 1, int_val: 3 },\r\n 'd##': { root_index: 1, int_val: 4 },\r\n db: { root_index: 1, int_val: 1 },\r\n dbb: { root_index: 1, int_val: 0 },\r\n e: { root_index: 2, int_val: 4 },\r\n en: { root_index: 2, int_val: 4 },\r\n 'e#': { root_index: 2, int_val: 5 },\r\n 'e##': { root_index: 2, int_val: 6 },\r\n eb: { root_index: 2, int_val: 3 },\r\n ebb: { root_index: 2, int_val: 2 },\r\n f: { root_index: 3, int_val: 5 },\r\n fn: { root_index: 3, int_val: 5 },\r\n 'f#': { root_index: 3, int_val: 6 },\r\n 'f##': { root_index: 3, int_val: 7 },\r\n fb: { root_index: 3, int_val: 4 },\r\n fbb: { root_index: 3, int_val: 3 },\r\n g: { root_index: 4, int_val: 7 },\r\n gn: { root_index: 4, int_val: 7 },\r\n 'g#': { root_index: 4, int_val: 8 },\r\n 'g##': { root_index: 4, int_val: 9 },\r\n gb: { root_index: 4, int_val: 6 },\r\n gbb: { root_index: 4, int_val: 5 },\r\n a: { root_index: 5, int_val: 9 },\r\n an: { root_index: 5, int_val: 9 },\r\n 'a#': { root_index: 5, int_val: 10 },\r\n 'a##': { root_index: 5, int_val: 11 },\r\n ab: { root_index: 5, int_val: 8 },\r\n abb: { root_index: 5, int_val: 7 },\r\n b: { root_index: 6, int_val: 11 },\r\n bn: { root_index: 6, int_val: 11 },\r\n 'b#': { root_index: 6, int_val: 0 },\r\n 'b##': { root_index: 6, int_val: 1 },\r\n bb: { root_index: 6, int_val: 10 },\r\n bbb: { root_index: 6, int_val: 9 },\r\n };\r\n }\r\n static accidentalDisplay(pitch: Pitch, keySignature: string, duration: number, accArray: AccidentalArray[]):\r\n AccidentalDisplay | null {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, keySignature);\r\n const pitchOctave = pitch.letter + '-' + pitch.octave;\r\n const accidentals = accArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitchOctave]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitchOctave].pitch.accidental : keyAccidental;\r\n if ((declared !== pitch.accidental\r\n || pitch.cautionary)) { \r\n const rv: AccidentalDisplay = {\r\n symbol: pitch.accidental,\r\n courtesy: pitch.cautionary ?? false,\r\n forced: pitch.forced ?? false\r\n }\r\n return rv;\r\n }\r\n return null;\r\n }\r\n /**\r\n * return Vex canonical note enharmonic - e.g. Bb to A#\r\n * */\r\n static vexToCannonical(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n return vexCanonicalNotes()[SmoMusic.noteValues[vexKey].int_val];\r\n }\r\n\r\n /**\r\n * A note array (sans octave) in key-signature order\r\n */\r\n static get circleOfFifths(): PitchKey[] {\r\n return [{\r\n letter: 'c',\r\n accidental: 'n'\r\n }, {\r\n letter: 'g',\r\n accidental: 'n'\r\n }, {\r\n letter: 'd',\r\n accidental: 'n'\r\n }, {\r\n letter: 'a',\r\n accidental: 'n'\r\n }, {\r\n letter: 'e',\r\n accidental: 'n'\r\n }, {\r\n letter: 'b',\r\n accidental: 'n'\r\n }, {\r\n letter: 'f',\r\n accidental: '#'\r\n }, {\r\n letter: 'c',\r\n accidental: '#'\r\n }, {\r\n letter: 'a',\r\n accidental: 'b'\r\n }, {\r\n letter: 'e',\r\n accidental: 'b'\r\n }, {\r\n letter: 'b',\r\n accidental: 'b'\r\n }, {\r\n letter: 'f',\r\n accidental: 'n'\r\n }\r\n ];\r\n }\r\n /**\r\n * Return the number of lines above first ledger line below the staff.\r\n * e.g. middle c in treble clef returns 0. Top line f in treble returns 5.\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the first ledger line below\r\n */\r\n static pitchToStaffLine(clef: string, smoPitch: Pitch): number {\r\n const octave = smoPitch.octave * 7 - 4 * 7;\r\n const keyTable = smoPitch.letter + smoPitch.accidental;\r\n let line = (SmoMusic.noteValues[keyTable].root_index + octave) / 2;\r\n line += SmoMusic.clefLedgerShift[clef]\r\n return line;\r\n }\r\n /**\r\n * gives the index into circle-of-fifths array for a pitch, considering enharmonics.\r\n * */\r\n static circleOfFifthsIndex(smoPitch: Pitch) {\r\n const en1 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch)));\r\n const en2 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch))));\r\n const ix = SmoMusic.circleOfFifths.findIndex((el) =>\r\n (el.letter === smoPitch.letter && el.accidental === smoPitch.accidental) ||\r\n (el.letter === en1.letter && el.accidental === en1.accidental) ||\r\n (el.letter === en2.letter && el.accidental === en2.accidental)\r\n );\r\n return ix;\r\n }\r\n\r\n /**\r\n * Get pitch to the right in circle of fifths\r\n * */\r\n static addSharp(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n (SmoMusic.circleOfFifthsIndex(smoPitch) + 1) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Get pitch to the left in circle of fifths\r\n */\r\n static addFlat(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n ((SmoMusic.circleOfFifths.length - 1) + SmoMusic.circleOfFifthsIndex(smoPitch)) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Add @param {number} - sharps\r\n */\r\n static addSharps(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addSharp(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addSharp(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Add *distance* sharps/flats to given key\r\n */\r\n static addFlats(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addFlat(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addFlat(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert array of smo pitches to vex keys, with adjustment for transpose and notehead\r\n * @param pitchAr\r\n * @param keyOffset\r\n * @param noteHead\r\n * @returns {string[]} - array of vex keyx\r\n */\r\n static smoPitchesToVexKeys(pitchAr: Pitch[], keyOffset: number, noteHead: string | null): string[] {\r\n const noopFunc = keyOffset > 0 ? 'addSharps' : 'addFlats';\r\n\r\n const rv: string[] = [];\r\n pitchAr.forEach((pitch) => {\r\n rv.push(SmoMusic.pitchToVexKey(SmoMusic[noopFunc](pitch, keyOffset), noteHead));\r\n });\r\n return rv;\r\n }\r\n\r\n static get scaleIntervals(): Record {\r\n return {\r\n up: [2, 2, 1, 2, 2, 2, 1],\r\n down: [1, 2, 2, 2, 1, 2, 2]\r\n };\r\n }\r\n\r\n /**\r\n * return true if the pitches match, except for octave.\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'a', accidental: '#'}` returns true\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'b', accidental: 'b'}` returns false\r\n * */\r\n static smoScalePitchMatch(p1: Pitch, p2: Pitch): boolean {\r\n const pp1 = JSON.parse(JSON.stringify(p1));\r\n const pp2 = JSON.parse(JSON.stringify(p2));\r\n pp1.octave = 0;\r\n pp2.octave = 0;\r\n\r\n return SmoMusic.smoPitchToInt(pp1) === SmoMusic.smoPitchToInt(pp2);\r\n }\r\n\r\n /**\r\n * Return the number of ledger lines, or 0 if none. positive if\r\n * below the staff, negative if above\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the top staff line\r\n */\r\n static pitchToLedgerLine(clef: Clef, pitch: Pitch): number {\r\n // return the distance from the top ledger line, as 0.5 per line/space\r\n const line = SmoMusic.pitchToStaffLine(clef, pitch);\r\n if (line > 5) {\r\n return -1 * (line - 5);\r\n }\r\n if (line <= 0) {\r\n return -1 * (line - 1);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * return flag state (up === 1 or down === 2) based on pitch and clef if auto\r\n * */\r\n static flagStateFromNote(clef: Clef, note: SmoNote) {\r\n let fs = note.flagState;\r\n if (fs === SmoNote.flagStates.auto) {\r\n fs = SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n return fs;\r\n }\r\n\r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefSigns: Record = {\r\n 'treble': { sign: 'G', line: 2 },\r\n 'bass': { sign: 'F', line: 4 },\r\n 'tenor': { sign: 'C', line: 4 },\r\n 'alto': { sign: 'C', line: 3 },\r\n 'soprano': { sign: 'C', line: 1 },\r\n 'percussion': { sign: 'percussion' },\r\n 'mezzo-soprano': { sign: 'C', line: 2 },\r\n 'baritone-c': { sign: 'C', line: 5 },\r\n 'baritone-f': { sign: 'F', line: 3 },\r\n 'subbass': { sign: 'F', line: 3, octave: -1 },\r\n 'french': { sign: 'G', line: 1 },\r\n 'vocal-tenor': { sign: 'G', line: 2, octave: -1 }\r\n }\r\n \r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefLedgerShift: Record = {\r\n 'treble': 0,\r\n 'bass': 6,\r\n 'tenor': 4,\r\n 'alto': 3,\r\n 'soprano': 1,\r\n 'percussion': 0,\r\n 'mezzo-soprano': 2,\r\n 'baritone-c': 5,\r\n 'baritone-f': 5,\r\n 'subbass': 7,\r\n 'french': -1\r\n }\r\n static scaleTones: string[] = ['tonic', '2', '3', '4', '5', '6', '7'];\r\n static getScaleTonesForKey(keySignature: string): Record {\r\n const key = SmoMusic.enharmonicRoles[keySignature];\r\n const rv: Record = {};\r\n key.forEach((role) => {\r\n if (SmoMusic.scaleTones.indexOf(role.role) >= 0) {\r\n rv[role.letter] = role.letter + role.accidental;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * The purpose of this table is to keep consistent enharmonic spelling when transposing \r\n * instruments in different keys. It is not theoritically complete, e.g.\r\n * there is no reason to distinguish between #5 used as a leading tone for vi- or\r\n * as an augmented chord, the spelling is the same. It does not show a preference\r\n * for notes that don't have an obvious purpose in the key, e.g. it does not try to compute the\r\n * equivalent to 'e#' in the key of 'c'. The computation of the 'intended key area' is\r\n * beyond the scope of a music program to interpret.\r\n */\r\n static get enharmonicRoles(): Record {\r\n const tbl: Record =\r\n { 'c' : [\r\n { letter: 'c', accidental: 'n', role: 'tonic' },\r\n { letter: 'c', accidental: '#', role: '7/2' },\r\n { letter: 'd', accidental: 'b', role: 'b9' },\r\n { letter: 'd', accidental: 'n', role: '2' },\r\n { letter: 'd', accidental: '#', role: '7/3'},\r\n { letter: 'e', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: 'n', role: '3'},\r\n { letter: 'f', accidental: 'n', role: '4'},\r\n { letter: 'f', accidental: '#', role: '#11'},\r\n { letter: 'g', accidental: 'b', role: 'b5'},\r\n { letter: 'g', accidental: 'n', role: '5'},\r\n { letter: 'g', accidental: '#', role: '7/6'},\r\n { letter: 'a', accidental: 'b', role: 'b6'},\r\n { letter: 'a', accidental: 'n', role: '6'},\r\n { letter: 'a', accidental: '#', role: '7/7'},\r\n { letter: 'b', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: 'n', role: '7'}\r\n ], 'c#': [\r\n { letter: 'c', accidental: '#', role: 'tonic' },\r\n { letter: 'c', accidental: '##', role: '7/2' },\r\n { letter: 'd', accidental: 'n', role: 'b9' },\r\n { letter: 'd', accidental: '#', role: '2' },\r\n { letter: 'd', accidental: '##', role: '#2'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: '#', role: '3'},\r\n { letter: 'f', accidental: '#', role: '4'},\r\n { letter: 'f', accidental: '##', role: '#11'},\r\n { letter: 'g', accidental: 'n', role: 'b5'},\r\n { letter: 'g', accidental: '#', role: '5'},\r\n { letter: 'g', accidental: '##', role: '7/6'},\r\n { letter: 'a', accidental: 'n', role: 'b6'},\r\n { letter: 'a', accidental: '#', role: '6'},\r\n { letter: 'a', accidental: '##', role: '7/7'},\r\n { letter: 'b', accidental: 'n', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'db': [\r\n { letter: 'd', accidental: 'b', role: 'tonic' },\r\n { letter: 'd', accidental: 'n', role: '7/2' },\r\n { letter: 'e', accidental: 'bb', role: 'b9' },\r\n { letter: 'e', accidental: 'b', role: '2' },\r\n { letter: 'e', accidental: 'n', role: '7/3'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'f', accidental: 'n', role: '3'},\r\n { letter: 'g', accidental: 'b', role: '4'},\r\n { letter: 'g', accidental: 'n', role: '#11'},\r\n { letter: 'a', accidental: 'bb', role: 'b5'},\r\n { letter: 'a', accidental: 'b', role: '5'},\r\n { letter: 'a', accidental: 'n', role: '7/6'},\r\n { letter: 'b', accidental: 'bb', role: 'b6'},\r\n { letter: 'b', accidental: 'b', role: '6'},\r\n { letter: 'b', accidental: 'n', role: '7/7'},\r\n { letter: 'c', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'd': [\r\n { letter: 'd', accidental: 'n', role: 'tonic' },\r\n { letter: 'd', accidental: '#', role: '7/2' },\r\n { letter: 'e', accidental: 'b', role: 'b9' },\r\n { letter: 'e', accidental: 'n', role: '2' },\r\n { letter: 'e', accidental: '#', role: '7/3'},\r\n { letter: 'f', accidental: 'n', role: 'b3'},\r\n { letter: 'f', accidental: '#', role: '3'},\r\n { letter: 'g', accidental: 'n', role: '4'},\r\n { letter: 'g', accidental: '#', role: '#11'},\r\n { letter: 'a', accidental: 'b', role: 'b5'},\r\n { letter: 'a', accidental: 'n', role: '5'},\r\n { letter: 'a', accidental: '#', role: '7/6'},\r\n { letter: 'b', accidental: 'b', role: 'b6'},\r\n { letter: 'b', accidental: 'n', role: '6'},\r\n { letter: 'b', accidental: '#', role: '7/7'},\r\n { letter: 'c', accidental: 'n', role: 'b7'},\r\n { letter: 'c', accidental: '#', role: '7'}\r\n ], 'eb': [\r\n { letter: 'e', accidental: 'b', role: 'tonic' },\r\n { letter: 'e', accidental: 'n', role: '7/2' },\r\n { letter: 'f', accidental: 'b', role: 'b9' },\r\n { letter: 'f', accidental: 'n', role: '2' },\r\n { letter: 'f', accidental: '#', role: '7/3'},\r\n { letter: 'g', accidental: 'b', role: 'b3'},\r\n { letter: 'g', accidental: 'n', role: '3'},\r\n { letter: 'a', accidental: 'b', role: '4'},\r\n { letter: 'a', accidental: 'n', role: '#11'},\r\n { letter: 'b', accidental: 'bb', role: 'b5'},\r\n { letter: 'b', accidental: 'b', role: '5'},\r\n { letter: 'b', accidental: 'n', role: '7/6'},\r\n { letter: 'c', accidental: 'b', role: '6'},\r\n { letter: 'c', accidental: 'n', role: '6'},\r\n { letter: 'c', accidental: '#', role: '7/7'},\r\n { letter: 'd', accidental: 'b', role: 'b7'},\r\n { letter: 'd', accidental: 'n', role: '7'}\r\n ], 'e': [\r\n { letter: 'e', accidental: 'n', role: 'tonic' },\r\n { letter: 'e', accidental: '#', role: '7/2' },\r\n { letter: 'f', accidental: 'n', role: 'b9' },\r\n { letter: 'f', accidental: '#', role: '2' },\r\n { letter: 'f', accidental: '##', role: '7/3'},\r\n { letter: 'g', accidental: 'n', role: 'b3'},\r\n { letter: 'g', accidental: '#', role: '3'},\r\n { letter: 'a', accidental: 'n', role: '4'},\r\n { letter: 'a', accidental: '#', role: '#11'},\r\n { letter: 'b', accidental: 'b', role: 'b5'},\r\n { letter: 'b', accidental: 'n', role: '5'},\r\n { letter: 'b', accidental: '#', role: '7/6'},\r\n { letter: 'c', accidental: 'n', role: 'b6'},\r\n { letter: 'c', accidental: '#', role: '6'},\r\n { letter: 'c', accidental: '##', role: '7/7'},\r\n { letter: 'd', accidental: 'n', role: 'b7'},\r\n { letter: 'd', accidental: '#', role: '7'}\r\n ], 'f': [\r\n { letter: 'f', accidental: 'n', role: 'tonic' },\r\n { letter: 'f', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'g', accidental: 'n', role: '2' },\r\n { letter: 'g', accidental: '#', role: '7/3'},\r\n { letter: 'a', accidental: 'b', role: 'b3'},\r\n { letter: 'a', accidental: 'n', role: '3'},\r\n { letter: 'b', accidental: 'b', role: '4'},\r\n { letter: 'b', accidental: 'n', role: '#11'},\r\n { letter: 'c', accidental: 'b', role: 'b5'},\r\n { letter: 'c', accidental: 'n', role: '5'},\r\n { letter: 'c', accidental: '#', role: '7/6'},\r\n { letter: 'd', accidental: 'b', role: 'b6'},\r\n { letter: 'd', accidental: 'n', role: '6'},\r\n { letter: 'd', accidental: '#', role: '7/7'},\r\n { letter: 'e', accidental: 'b', role: 'b7'},\r\n { letter: 'e', accidental: 'n', role: '7'}\r\n ], 'f#': [\r\n { letter: 'f', accidental: '#', role: 'tonic' },\r\n { letter: 'f', accidental: '##', role: '7/2' },\r\n { letter: 'g', accidental: 'n', role: 'b9' },\r\n { letter: 'g', accidental: '#', role: '2' },\r\n { letter: 'g', accidental: '##', role: '#2'},\r\n { letter: 'a', accidental: 'n', role: 'b3'},\r\n { letter: 'a', accidental: '#', role: '3'},\r\n { letter: 'b', accidental: 'n', role: '4'},\r\n { letter: 'b', accidental: '#', role: '#11'},\r\n { letter: 'c', accidental: 'n', role: 'b5'},\r\n { letter: 'c', accidental: '#', role: '5'},\r\n { letter: 'c', accidental: '##', role: '7/6'},\r\n { letter: 'd', accidental: 'n', role: 'b6'},\r\n { letter: 'd', accidental: '#', role: '6'},\r\n { letter: 'd', accidental: '##', role: '7/7'},\r\n { letter: 'e', accidental: 'n', role: 'b7'},\r\n { letter: 'e', accidental: '#', role: '7'}\r\n ], 'gb': [\r\n { letter: 'g', accidental: 'b', role: 'tonic' },\r\n { letter: 'g', accidental: 'n', role: '7/2' },\r\n { letter: 'a', accidental: 'bb', role: 'b9' },\r\n { letter: 'a', accidental: 'b', role: '2' },\r\n { letter: 'a', accidental: 'n', role: '7/3'},\r\n { letter: 'a', accidental: 'bb', role: 'b3'},\r\n { letter: 'b', accidental: 'b', role: '3'},\r\n { letter: 'c', accidental: 'b', role: '4'},\r\n { letter: 'c', accidental: 'n', role: '#11'},\r\n { letter: 'd', accidental: 'bb', role: 'b5'},\r\n { letter: 'd', accidental: 'b', role: '5'},\r\n { letter: 'd', accidental: 'n', role: '7/6'},\r\n { letter: 'e', accidental: 'bb', role: 'b6'},\r\n { letter: 'e', accidental: 'b', role: '6'},\r\n { letter: 'e', accidental: 'n', role: '7/7'},\r\n { letter: 'f', accidental: 'b', role: 'b7'},\r\n { letter: 'f', accidental: 'n', role: '7'}\r\n ], 'g': [\r\n { letter: 'g', accidental: 'n', role: 'tonic' },\r\n { letter: 'g', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'a', accidental: 'n', role: '2' },\r\n { letter: 'a', accidental: '#', role: '7/3'},\r\n { letter: 'b', accidental: 'b', role: 'b3'},\r\n { letter: 'b', accidental: 'n', role: '3'},\r\n { letter: 'c', accidental: 'n', role: '4'},\r\n { letter: 'c', accidental: '#', role: '#11'},\r\n { letter: 'd', accidental: 'b', role: 'b5'},\r\n { letter: 'd', accidental: 'n', role: '5'},\r\n { letter: 'd', accidental: '#', role: '7/6'},\r\n { letter: 'e', accidental: 'b', role: 'b6'},\r\n { letter: 'e', accidental: 'n', role: '6'},\r\n { letter: 'e', accidental: '#', role: '7/7'},\r\n { letter: 'f', accidental: 'n', role: 'b7'},\r\n { letter: 'f', accidental: '#', role: '7'}\r\n ],'ab': [\r\n { letter: 'a', accidental: 'b', role: 'tonic' },\r\n { letter: 'a', accidental: 'n', role: '7/2' },\r\n { letter: 'b', accidental: 'bb', role: 'b9' },\r\n { letter: 'b', accidental: 'b', role: '2' },\r\n { letter: 'b', accidental: 'n', role: '7/3' },\r\n { letter: 'b', accidental: 'bb', role: 'b3' },\r\n { letter: 'c', accidental: 'n', role: '3' },\r\n { letter: 'd', accidental: 'b', role: '4' },\r\n { letter: 'd', accidental: 'n', role: '#11' },\r\n { letter: 'e', accidental: 'bb', role: 'b5' },\r\n { letter: 'e', accidental: 'b', role: '5' },\r\n { letter: 'e', accidental: 'n', role: '7/6' },\r\n { letter: 'f', accidental: 'b', role: 'b6' },\r\n { letter: 'f', accidental: 'n', role: '6' },\r\n { letter: 'f', accidental: '#', role: '7/7' },\r\n { letter: 'g', accidental: 'b', role: 'b7' },\r\n { letter: 'g', accidental: 'n', role: '7' }\r\n ], 'a': [\r\n { letter: 'a', accidental: 'n', role: 'tonic' },\r\n { letter: 'a', accidental: '#', role: '7/2' },\r\n { letter: 'b', accidental: 'b', role: 'b9' },\r\n { letter: 'b', accidental: 'n', role: '2' },\r\n { letter: 'b', accidental: '#', role: '7/3'},\r\n { letter: 'c', accidental: 'n', role: 'b3'},\r\n { letter: 'c', accidental: '#', role: '3'},\r\n { letter: 'd', accidental: 'n', role: '4'},\r\n { letter: 'd', accidental: '#', role: '#11'},\r\n { letter: 'e', accidental: 'b', role: 'b5'},\r\n { letter: 'e', accidental: 'n', role: '5'},\r\n { letter: 'e', accidental: '#', role: '7/6'},\r\n { letter: 'f', accidental: 'n', role: 'b6'},\r\n { letter: 'f', accidental: '#', role: '6'},\r\n { letter: 'f', accidental: '##', role: '7/7'},\r\n { letter: 'g', accidental: 'n', role: 'b7'},\r\n { letter: 'g', accidental: '#', role: '7'}\r\n ], 'bb': [\r\n { letter: 'b', accidental: 'b', role: 'tonic' },\r\n { letter: 'b', accidental: 'n', role: '7/2' },\r\n { letter: 'c', accidental: 'b', role: 'b9' },\r\n { letter: 'c', accidental: 'n', role: '2' },\r\n { letter: 'c', accidental: '#', role: '7/3'},\r\n { letter: 'd', accidental: 'b', role: 'b3'},\r\n { letter: 'd', accidental: 'n', role: '3'},\r\n { letter: 'e', accidental: 'b', role: '4'},\r\n { letter: 'e', accidental: 'n', role: '#11'},\r\n { letter: 'f', accidental: 'b', role: 'b5'},\r\n { letter: 'f', accidental: 'n', role: '5'},\r\n { letter: 'f', accidental: '#', role: '7/6'},\r\n { letter: 'g', accidental: 'b', role: 'b6'},\r\n { letter: 'g', accidental: 'n', role: '6'},\r\n { letter: 'g', accidental: '#', role: '7/7'},\r\n { letter: 'a', accidental: 'b', role: 'b7'},\r\n { letter: 'a', accidental: 'n', role: '7'}\r\n ], 'b': [\r\n { letter: 'b', accidental: 'n', role: 'tonic' },\r\n { letter: 'b', accidental: '#', role: '7/2' },\r\n { letter: 'c', accidental: 'n', role: 'b9' },\r\n { letter: 'c', accidental: '#', role: '2' },\r\n { letter: 'c', accidental: '##', role: '7/3'},\r\n { letter: 'd', accidental: 'n', role: 'b3'},\r\n { letter: 'd', accidental: '#', role: '3'},\r\n { letter: 'e', accidental: 'n', role: '4'},\r\n { letter: 'e', accidental: '#', role: '#11'},\r\n { letter: 'f', accidental: 'n', role: 'b5'},\r\n { letter: 'f', accidental: '#', role: '5'},\r\n { letter: 'f', accidental: '##', role: '7/6'},\r\n { letter: 'g', accidental: 'n', role: 'b6'},\r\n { letter: 'g', accidental: '#', role: '6'},\r\n { letter: 'g', accidental: '##', role: '7/7'},\r\n { letter: 'a', accidental: 'n', role: 'b7'},\r\n { letter: 'a', accidental: '#', role: '7'}\r\n ]};\r\n return tbl;\r\n }\r\n /**\r\n * Find the harmonic role for the given pitch\r\n * @param smoPitch \r\n * @param keySignature \r\n * @returns \r\n */\r\n static findRoleOfPitch(smoPitch: Pitch, keySignature: string) {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return '';\r\n }\r\n const keyRole = keyRoles.find((x) => x.letter === smoPitch.letter.toLocaleLowerCase() && x.accidental === smoPitch.accidental.toLowerCase());\r\n if (!keyRole) {\r\n return '';\r\n }\r\n return keyRole.role;\r\n }\r\n /**\r\n * Given a harmonic role, find the pitch that matches it. If there is no one, just\r\n * return the raw transposition\r\n * @param role \r\n * @param keySignature \r\n * @param transposedPitch \r\n * @returns \r\n */\r\n static findPitchForRole(role: string, keySignature: string, transposedPitch: Pitch): Pitch {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n const keyRole = keyRoles.find((x) => x.role === role);\r\n if (!keyRole) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n let octave = transposedPitch.octave;\r\n if ((transposedPitch.letter === 'a' || transposedPitch.letter === 'b') && keyRole.letter === 'c') {\r\n octave += 1;\r\n }\r\n return { letter: keyRole.letter, accidental: keyRole.accidental, octave };\r\n }\r\n static rawTranspose(pitch: Pitch, offset: number) {\r\n return SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset);\r\n }\r\n static transposePitchForKey(pitch: Pitch, originalKey: string, destinationKey: string, offset: number): Pitch {\r\n const transposedPitch = SmoMusic.getEnharmonicInKey(SmoMusic.rawTranspose(pitch, offset), destinationKey);\r\n const role = SmoMusic.findRoleOfPitch(pitch, originalKey);\r\n if (role.length) {\r\n return SmoMusic.findPitchForRole(role, destinationKey, transposedPitch);\r\n }\r\n return transposedPitch;\r\n }\r\n\r\n /**\r\n * convert from SMO to VEX format so we can use the VexFlow tables and methods\r\n * example:\r\n * `{letter,octave,accidental}` object to vexKey string `'f#'`\r\n * */\r\n static _pitchToVexKey(smoPitch: Pitch): string {\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n if (smoPitch.accidental.length === 0) {\r\n vexKey = vexKey + 'n';\r\n } else {\r\n vexKey = vexKey + smoPitch.accidental;\r\n }\r\n if (smoPitch.octave) {\r\n vexKey = vexKey + '/' + smoPitch.octave;\r\n }\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * convert smo pitch to easy score (vex) format. Mostly used\r\n * for debugging and generating Vex test cases\r\n * @param smoPitch\r\n * @returns - a string that can be converted to a VEX routine, with some difficulty\r\n */\r\n static pitchToEasyScore(smoPitch: Pitch): string {\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n vexKey = vexKey + smoPitch.accidental;\r\n return vexKey + smoPitch.octave;\r\n }\r\n /**\r\n * convert a pitch to a format expected by the MIDI writer\r\n * @param smoPitch pitch to convert\r\n * @returns pitch in MIDI string format.\r\n */\r\n static smoPitchToMidiString(smoPitch: Pitch): string {\r\n const midiPitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch));\r\n let rv = midiPitch.letter.toUpperCase();\r\n if (midiPitch.accidental !== 'n') {\r\n rv += midiPitch.accidental;\r\n }\r\n rv += midiPitch.octave;\r\n return rv;\r\n }\r\n static smoPitchesToMidiStrings(smoPitches: Pitch[]): string[] {\r\n const rv: string[] = [];\r\n smoPitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToMidiString(pitch));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * filled in from the midi routines borrowed from \r\n * // https://github.com/grimmdude/MidiWriterJS\r\n * @param midiPitch pitch from MIDIwrite\r\n * @returns SMO pitch\r\n */\r\n static midiPitchToSmoPitch(midiPitch: string): Pitch {\r\n const smoPitch: Pitch = {} as Pitch;\r\n smoPitch.letter = midiPitch[0].toLowerCase() as PitchLetter;\r\n if (isNaN(parseInt(midiPitch[1], 10))) {\r\n smoPitch.accidental = midiPitch[1];\r\n smoPitch.octave = parseInt(midiPitch[2], 10);\r\n } else {\r\n smoPitch.accidental = 'n';\r\n smoPitch.octave = parseInt(midiPitch[1], 10);\r\n }\r\n return smoPitch;\r\n }\r\n static midiPitchToMidiNumber(midiPitch: string): number {\r\n return SmoMusic.smoPitchToInt(SmoMusic.midiPitchToSmoPitch(midiPitch)) + 12;\r\n }\r\n\r\n static pitchToVexKey(smoPitch: Pitch, head: string | null = null): string {\r\n if (!head) {\r\n return SmoMusic._pitchToVexKey(smoPitch);\r\n }\r\n return SmoMusic._pitchToVexKey(smoPitch) + '/' + head;\r\n }\r\n\r\n /**\r\n * Turns vex pitch string into smo pitch, e.g.\r\n * `cn/4 => {'c','n',4}`\r\n * @param vexPitch\r\n * @returns SmoPitch\r\n * */\r\n static vexToSmoPitch(vexPitch: string): Pitch {\r\n let octave = 0;\r\n const po = vexPitch.split('/');\r\n const rv = SmoMusic.vexToSmoKey(po[0]);\r\n if (po.length > 1) {\r\n octave = parseInt(po[1], 10);\r\n octave = isNaN(octave) ? 4 : octave;\r\n } else {\r\n octave = 4;\r\n }\r\n (rv as Pitch).octave = octave;\r\n return rv as Pitch;\r\n }\r\n\r\n /**\r\n * Convert to smo pitch, without octave\r\n * ``['f#'] => [{letter:'f',accidental:'#'}]``\r\n * */\r\n static vexToSmoKey(vexPitch: string): PitchKey {\r\n const accidental = vexPitch.length < 2 ? 'n' : vexPitch.substring(1, vexPitch.length);\r\n const pp = vexPitch.split('/')[0];\r\n return {\r\n letter: pp[0].toLowerCase() as PitchLetter,\r\n accidental\r\n };\r\n }\r\n\r\n // {letter:'f',accidental:'#'} => [f#/\r\n static smoPitchesToVex(pitchAr: Pitch[]): string[] {\r\n var rv: string[] = [];\r\n pitchAr.forEach((p) => {\r\n rv.push(SmoMusic.pitchToVexKey(p));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param vexKey - pitch in vex format\r\n * @returns pitch in vex format, sans octave\r\n */\r\n static stripVexOctave(vexKey: string): string {\r\n if (vexKey.indexOf('/') > 0) {\r\n vexKey = vexKey.substring(0, vexKey.indexOf('/'));\r\n }\r\n return vexKey;\r\n }\r\n /**\r\n * compare pitches for frequency match\r\n */\r\n static pitchArraysMatch(ar1: Pitch[], ar2: Pitch[]): boolean {\r\n let matches = 0;\r\n const ir1 = SmoMusic.smoPitchesToIntArray(ar1);\r\n const ir2 = SmoMusic.smoPitchesToIntArray(ar2);\r\n if (ir1.length !== ir2.length) {\r\n return false;\r\n }\r\n ir1.forEach((num) => {\r\n if (ir2.indexOf(num) >= 0) {\r\n matches += 1;\r\n }\r\n });\r\n return matches === ir1.length;\r\n }\r\n /**\r\n * convert pitches to integer pitch representations\r\n * by calling smoPitchToInt\r\n * @param pitches Smo pitches\r\n * @returns \r\n */\r\n static smoPitchesToIntArray(pitches: Pitch[]): number[] {\r\n const rv: number[] = [];\r\n pitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToInt(pitch));\r\n });\r\n return rv.sort();\r\n }\r\n\r\n /**\r\n * convert a pitch to an integer value, used for transpositions, intervals, etc.\r\n * @param pitch \r\n * @returns \r\n */\r\n static smoPitchToInt(pitch: Pitch): number {\r\n if (typeof (pitch.octave) === 'undefined') {\r\n pitch.octave = 0;\r\n }\r\n const intVal = SmoMusic.noteValues[\r\n SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch))].int_val;\r\n const octave = (pitch.letter === 'c' && pitch.accidental === 'b' && pitch.octave > 0) ?\r\n pitch.octave - 1 : pitch.octave;\r\n return octave * 12 + intVal;\r\n }\r\n\r\n /**\r\n * Convert a number to a SMO pitch\r\n * @param intValue - number of 1/2 steps from `c0`\r\n * @returns \r\n */\r\n static smoIntToPitch(intValue: number): Pitch {\r\n let octave = 0;\r\n let accidental = '';\r\n let noteKey: PitchLetter | null = null;\r\n const letterInt = intValue >= 0 ? intValue % 12 :\r\n 12 - (Math.abs(intValue) % 12);\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 1\r\n )) as PitchLetter | null;\r\n if (!noteKey) {\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 2\r\n )) as PitchLetter;\r\n }\r\n octave = Math.floor(intValue / 12);\r\n octave = octave >= 0 ? octave : 0;\r\n accidental = noteKey.substring(1, noteKey.length);\r\n // eslint-disable-next-line\r\n accidental = accidental ? accidental : 'n';\r\n return {\r\n letter: noteKey[0] as PitchLetter,\r\n accidental,\r\n octave\r\n };\r\n }\r\n static pitchKeyToPitch(pk: PitchKey): Pitch {\r\n return { letter: pk.letter, accidental: pk.accidental, octave: 1 };\r\n }\r\n\r\n /**\r\n * Consider instrument transpose when setting key -\r\n * e.g. Eb for Bb instruments is F. Note: return value is not\r\n * a valid VEX key signature. Use vexKeySignatureTranspose for that.\r\n */\r\n static vexKeySigWithOffset(vexKey: string, offset: number): string {\r\n const pk: PitchKey = SmoMusic.vexToSmoKey(vexKey);\r\n const pi: number = SmoMusic.smoPitchToInt(SmoMusic.pitchKeyToPitch(pk)) + offset;\r\n let newKey: string = SmoMusic.toValidKeySignature(SmoMusic.pitchToVexKey(SmoMusic.smoIntToPitch(pi)));\r\n // handle equivalent ks\r\n if (newKey === 'c#' && vexKey.indexOf('b') >= 0) {\r\n newKey = 'db';\r\n }\r\n return newKey;\r\n }\r\n static _enharmonics: Record | null = null;\r\n /**\r\n * return a map of enharmonics for choosing or cycling. notes are in vexKey form.\r\n */\r\n static get enharmonics(): Record {\r\n let i = 0;\r\n if (SmoMusic._enharmonics !== null) {\r\n return SmoMusic._enharmonics;\r\n }\r\n const rv: Record = {};\r\n const keys = Object.keys(SmoMusic.noteValues);\r\n for (i = 0; i < keys.length; ++i) {\r\n const key = keys[i];\r\n const int_val: number = SmoMusic.noteValues[key].int_val;\r\n if (typeof (rv[int_val.toString()]) === 'undefined') {\r\n rv[int_val.toString()] = [];\r\n }\r\n // only consider natural note 1 time. It is in the list twice for some reason.\r\n if (key.indexOf('n') === -1) {\r\n rv[int_val.toString()].push(key);\r\n }\r\n }\r\n SmoMusic._enharmonics = rv;\r\n return rv;\r\n }\r\n /**\r\n * Get enharmonic equivalent of given notes for cycle/choose\r\n * @param vexKey\r\n * @returns\r\n */\r\n static getEnharmonics(vexKey: string): string[] {\r\n const proto = SmoMusic.stripVexOctave(vexKey);\r\n const rv: string[] = [];\r\n let ne = SmoMusic.getEnharmonic(vexKey);\r\n rv.push(proto);\r\n while (ne[0] !== proto[0]) {\r\n rv.push(ne);\r\n ne = SmoMusic.getEnharmonic(ne);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * return the next note from the cycle in `getEnharmonics`\r\n */\r\n static getEnharmonic(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n const intVal = SmoMusic.noteValues[vexKey.toLowerCase()].int_val;\r\n const ar = SmoMusic.enharmonics[intVal.toString()];\r\n const len = ar.length;\r\n // 'n' for natural in key but not in value\r\n vexKey = vexKey.length > 1 && vexKey[1] === 'n' ? vexKey[0] : vexKey;\r\n const ix = ar.indexOf(vexKey);\r\n vexKey = ar[(ix + 1) % len];\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * Return a pitch a diatonic step away from SmoPitch in vexKey\r\n * @param smoPitch\r\n * @param vexKey\r\n * @param direction\r\n * @returns\r\n */\r\n static closestTonic(smoPitch: Pitch, vexKey: string, direction: number): Pitch {\r\n direction = Math.sign(direction) < 0 ? -1 : 1;\r\n const tonic = SmoMusic.vexToSmoKey(vexKey);\r\n const rv = SmoMusic.pitchKeyToPitch(tonic);\r\n rv.octave = smoPitch.octave;\r\n const iix = SmoMusic.smoPitchToInt(smoPitch);\r\n const smint = SmoMusic.smoPitchToInt(rv);\r\n if (Math.sign(smint - iix) !== direction) {\r\n rv.octave += direction;\r\n }\r\n return rv;\r\n }\r\n\r\n // ### toValidKeySignature\r\n // When transposing, make sure key signature is valid, e.g. g# should be\r\n // Ab\r\n static toValidKeySignature(vexKey: string): string {\r\n let strlen = 0;\r\n const map: Record = { 'a#': 'bb', 'g#': 'ab', 'cb': 'b', 'd#': 'eb' };\r\n strlen = (vexKey.length > 2 ? 2 : vexKey.length);\r\n // Vex doesn't like 'n' in key signatures.\r\n if (strlen === 2 && vexKey[1].toLowerCase() === 'n') {\r\n strlen = 1;\r\n }\r\n const rv = vexKey.substr(0, strlen);\r\n if (map[rv.toLowerCase()]) {\r\n return map[rv.toLowerCase()];\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When transposing, get the enharmonic that most closely fits the key\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n * @param smoPitch\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getEnharmonicInKey(smoPitch: Pitch, keySignature: string): Pitch {\r\n let match = false;\r\n let rv = '';\r\n if (typeof (smoPitch.octave) === 'undefined') {\r\n smoPitch.octave = 1;\r\n }\r\n const sharpKey = keySignature.indexOf('#') >= 0;\r\n const flatKey = keySignature.indexOf('b') >= 0;\r\n const ar = SmoMusic.getEnharmonics(SmoMusic.pitchToVexKey(smoPitch));\r\n rv = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(smoPitch));\r\n const scaleMap: Record = SmoMusic.getScaleTonesForKey(keySignature);\r\n // new VF.Music().createScaleMap(keySignature);\r\n ar.forEach((vexKey) => {\r\n if (vexKey.length === 1) {\r\n vexKey += 'n';\r\n }\r\n if (vexKey === scaleMap[vexKey[0]]) {\r\n rv = vexKey;\r\n match = true;\r\n } else if (!match) {\r\n // In the absence of a match of a key tone, we bias towards more\r\n // 'common', like Bb is more common than A#, esp. as a chord. This maybe\r\n // just be my horn player bias towards flat keys\r\n if (vexKey === 'a#' && !sharpKey) {\r\n rv = 'bb';\r\n } else if (vexKey === 'g#' && !sharpKey) {\r\n rv = 'ab';\r\n } else if (vexKey === 'c#' && !sharpKey) {\r\n rv = 'db';\r\n } else if (vexKey === 'd#' && !sharpKey) {\r\n rv = 'eb';\r\n } else if (vexKey === 'f#' && flatKey) {\r\n rv = 'gb';\r\n }\r\n }\r\n });\r\n const smoRv: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(rv));\r\n smoRv.octave = smoPitch.octave;\r\n const rvi = SmoMusic.smoPitchToInt(smoRv);\r\n const ori = SmoMusic.smoPitchToInt(smoPitch);\r\n // handle the case of c0 < b0, pitch-wise\r\n smoRv.octave += Math.sign(ori - rvi);\r\n return smoRv;\r\n }\r\n /**\r\n * fix the enharmonic to match the key, if possible\r\n * @example\r\n * `getKeyFriendlyEnharmonic('b','eb'); => returns 'bb'\r\n * return vex string\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n */\r\n static getKeyFriendlyEnharmonic(letter: string, keySignature: string): string {\r\n let rv: string = letter;\r\n let i = 0;\r\n const scale: string[] = Object.values(SmoMusic.getScaleTonesForKey(keySignature));\r\n let prop: string = SmoMusic.getEnharmonic(letter.toLowerCase());\r\n while (prop.toLowerCase() !== letter.toLowerCase()) {\r\n for (i = 0; i < scale.length; ++i) {\r\n const skey: string = scale[i];\r\n if ((skey[0] === prop && skey[1] === 'n') ||\r\n (skey.toLowerCase() === prop.toLowerCase())) {\r\n rv = skey;\r\n break;\r\n }\r\n }\r\n prop = (prop[1] === 'n' ? prop[0] : prop);\r\n prop = SmoMusic.getEnharmonic(prop);\r\n }\r\n return rv;\r\n }\r\n /**\r\n // given a letter pitch (a,b,c etc.), and a key signature, return the actual note\r\n // that you get without accidentals\r\n // `SmoMusic.getKeySignatureKey('F','G'); // returns f#`\r\n * @param letter\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getKeySignatureKey(letter: PitchLetter, keySignature: string): string {\r\n const scaleMap = SmoMusic.getScaleTonesForKey(keySignature);\r\n return scaleMap[letter];\r\n }\r\n\r\n static getAccidentalForKeySignature(smoPitch: Pitch, keySignature: string): string {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return vexKey.length === 1 ? 'n' : vexKey.substr(1, vexKey.length - 1);\r\n }\r\n\r\n // ### isPitchInKeySignature\r\n // Return true if the pitch is not an accidental in the give key, e.g.\r\n // f# in 'g' or c in 'Bb'\r\n static isPitchInKeySignature(smoPitch: Pitch, keySignature: string): boolean {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return (vexKey.length === 1 && smoPitch.accidental === 'n' ||\r\n (vexKey[1] === smoPitch.accidental));\r\n }\r\n\r\n // ### getIntervalInKey\r\n // give a pitch and a key signature, return another pitch at the given\r\n // diatonic interval. Similar to getKeyOffset but diatonic.\r\n static getIntervalInKey(pitch: Pitch, keySignature: string, interval: number): Pitch {\r\n let scaleIx = 0;\r\n let diatonicIx = 0;\r\n if (interval === 0) {\r\n return JSON.parse(JSON.stringify(pitch));\r\n }\r\n\r\n const delta = interval > 0 ? 1 : -1;\r\n const inv = -1 * delta;\r\n const tonic = SmoMusic.closestTonic(pitch, keySignature, inv);\r\n const intervals = delta > 0 ? SmoMusic.scaleIntervals.up : SmoMusic.scaleIntervals.down;\r\n const pitchInt = SmoMusic.smoPitchToInt(pitch);\r\n let nkey = tonic;\r\n let nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n while (Math.sign(nkeyInt - pitchInt) !== delta && Math.sign(nkeyInt - pitchInt) !== 0) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n }\r\n while (diatonicIx !== interval) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n diatonicIx += delta;\r\n }\r\n return SmoMusic.getEnharmonicInKey(nkey, keySignature);\r\n }\r\n\r\n static getLetterNotePitch(prevPitch: Pitch, letter: PitchLetter, key: string): Pitch {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(prevPitch));\r\n pitch.letter = letter;\r\n\r\n // Make the key 'a' make 'Ab' in the key of Eb, for instance\r\n const vexKsKey = SmoMusic.getKeySignatureKey(letter, key);\r\n if (vexKsKey.length > 1) {\r\n pitch.accidental = vexKsKey[1];\r\n } else {\r\n pitch.accidental = 'n';\r\n }\r\n\r\n // make the octave of the new note as close to previous (or next) note as possible.\r\n const upv = ['bc', 'ac', 'bd', 'da', 'be', 'gc'];\r\n const downv = ['cb', 'ca', 'db', 'da', 'eb', 'cg'];\r\n const delta = prevPitch.letter + pitch.letter;\r\n if (upv.indexOf(delta) >= 0) {\r\n pitch.octave += 1;\r\n }\r\n if (downv.indexOf(delta) >= 0) {\r\n pitch.octave -= 1;\r\n }\r\n return pitch;\r\n }\r\n\r\n /**\r\n * return the key signature, transposed a number of 1/2 steps in Vex key format\r\n * @param key start key\r\n * @param transposeIndex number of 1/2 steps\r\n * @returns {string} - vex key\r\n */\r\n static vexKeySignatureTranspose(key: string, transposeIndex: number): string {\r\n let rv = key;\r\n if (key.length < 1) {\r\n return key;\r\n }\r\n rv = this.vexKeySigWithOffset(key, transposeIndex);\r\n if (rv.length === 1) {\r\n return rv[0].toUpperCase();\r\n }\r\n return rv[0].toUpperCase() + rv.substring(1);\r\n /* const pitch: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(key));\r\n key = SmoMusic.smoPitchesToVexKeys([pitch], transposeIndex, null)[0];\r\n key = SmoMusic.stripVexOctave(key);\r\n key = key[0].toUpperCase() + key.substring(1, key.length);\r\n if (key.length > 1 && key[1] === 'n') {\r\n key = key[0];\r\n }\r\n return key; */\r\n }\r\n static get frequencyMap() {\r\n return SmoAudioPitch.pitchFrequencyMap;\r\n }\r\n\r\n // ### get letterPitchIndex\r\n // Used to adjust octave when transposing.\r\n // Pitches are measured from c, so that b0 is higher than c0, c1 is 1 note higher etc.\r\n static get letterPitchIndex(): Record {\r\n return {\r\n 'c': 0,\r\n 'd': 1,\r\n 'e': 2,\r\n 'f': 3,\r\n 'g': 4,\r\n 'a': 5,\r\n 'b': 6\r\n };\r\n }\r\n\r\n /**\r\n * Indicate if a change from letter note 'one' to 'two' needs us to adjust the\r\n * octave due to the `SmoMusic.letterPitchIndex` (b0 is higher than c0)\r\n * */\r\n static letterChangedOctave(one: PitchLetter, two: PitchLetter): number {\r\n const p1 = SmoMusic.letterPitchIndex[one];\r\n const p2 = SmoMusic.letterPitchIndex[two];\r\n if (p1 < p2 && p2 - p1 > 2) {\r\n return -1;\r\n }\r\n if (p1 > p2 && p1 - p2 > 2) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Transpose a `Pitch` `offset` 1/2 steps\r\n * @param pitch\r\n * @param offset\r\n * @returns\r\n */\r\n static getKeyOffset(pitch: Pitch, offset: number): Pitch {\r\n const canon = vexCanonicalNotes();\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = SmoMusic.pitchToVexKey(pitch);\r\n vexKey = SmoMusic.vexToCannonical(vexKey);\r\n const rootIndex = canon.indexOf(vexKey);\r\n let octave = pitch.octave;\r\n if (Math.abs(offset) >= 12) {\r\n const octaveOffset = Math.sign(offset) * Math.floor(Math.abs(offset) / 12);\r\n octave += octaveOffset;\r\n offset = offset - (12 * octaveOffset);\r\n if (offset < 0) {\r\n offset = 12 + offset;\r\n }\r\n }\r\n if (rootIndex + offset >= canon.length) {\r\n octave += 1;\r\n }\r\n if (rootIndex + offset < 0) {\r\n octave -= 1;\r\n }\r\n const rv = JSON.parse(JSON.stringify(pitch));\r\n const index = (rootIndex + canon.length + offset) % canon.length;\r\n vexKey = canon[index];\r\n if (vexKey.length > 1) {\r\n rv.accidental = vexKey.substring(1);\r\n vexKey = vexKey[0];\r\n } else {\r\n rv.accidental = '';\r\n }\r\n rv.letter = vexKey;\r\n rv.octave = octave;\r\n return rv;\r\n }\r\n\r\n // ### keySignatureLength\r\n // return the number of sharp/flat in a key signature for sizing guess.\r\n static get keySignatureLength(): Record {\r\n return {\r\n 'C': 0,\r\n 'B': 5,\r\n 'A': 3,\r\n 'F#': 6,\r\n 'Bb': 2,\r\n 'Ab': 4,\r\n 'Gg': 6,\r\n 'G': 1,\r\n 'F': 1,\r\n 'Eb': 3,\r\n 'Db': 5,\r\n 'Cb': 7,\r\n 'C#': 7,\r\n 'E': 4,\r\n 'D': 2\r\n };\r\n }\r\n\r\n static getSharpsInKeySignature(key: string): number {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n if (sharpKeys.indexOf(key.toUpperCase()) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[key.toUpperCase()];\r\n }\r\n\r\n static getFlatsInKeySignature(key: string): number {\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n let caseKey = key[0].toUpperCase();\r\n if (key.length > 0) {\r\n caseKey += key.substr(1, key.length);\r\n }\r\n if (flatKeys.indexOf(caseKey) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[caseKey];\r\n }\r\n static midiKeyToVexKey(midiKey: number): string {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n if (midiKey === 0) {\r\n return 'C';\r\n }\r\n const flat = midiKey < 0;\r\n let ix = Math.abs(midiKey) - 1;\r\n if (ix > 6) {\r\n return 'C';\r\n }\r\n if (flat) {\r\n return flatKeys[ix];\r\n } else {\r\n return sharpKeys[ix];\r\n }\r\n }\r\n static highestDuration = 32768;\r\n static lowestDuration = 32768 / 256;\r\n static durationsDescending = [\r\n SmoMusic.highestDuration, // breve?\r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 4, // 1/2\r\n SmoMusic.highestDuration / 8, // 1/4 \r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 64, // 32nd\r\n SmoMusic.highestDuration / 128 // 64th \r\n ];\r\n static durationsAscending = [\r\n SmoMusic.highestDuration / 256, // 128th\r\n SmoMusic.highestDuration / 128, // 64th\r\n SmoMusic.highestDuration / 64, // 32nd \r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 8, // 1/4\r\n SmoMusic.highestDuration / 4, // 1/2 \r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 1 // breve\r\n ];\r\n static ticksFromSmoDuration(duration: SimpleDuration): number {\r\n let rv = duration.baseTicks;\r\n let dotValue = duration.baseTicks / 2;\r\n for (var i = 0; i < duration.dots && i < 4; ++i) {\r\n rv += dotValue;\r\n dotValue = dotValue / 2; \r\n }\r\n return rv;\r\n }\r\n static _validDurations: Record | null = null;\r\n static _validDurationKeys: number[] = [];\r\n static get validDurations():Record {\r\n const computeDots = (tt: number, dots: number) => {\r\n let dottedValue = tt;\r\n let dotValue = tt / 2;\r\n let minDot = 0;\r\n for (var xxx = 0; xxx < dots; ++xxx) {\r\n dottedValue += dotValue;\r\n minDot = dotValue;\r\n dotValue = dotValue / 2;\r\n }\r\n return { dottedValue, minDot };\r\n }\r\n if (SmoMusic._validDurations === null) {\r\n SmoMusic._validDurations = {};\r\n let index = 0;\r\n for (var i = 0; i < SmoMusic.durationsDescending.length; ++i) {\r\n const baseTicks = SmoMusic.durationsDescending[i];\r\n for (var j = 3; j >= 1; --j) {\r\n const { dottedValue, minDot } = computeDots(baseTicks, j);\r\n if (dottedValue < SmoMusic.highestDuration && minDot > SmoMusic.lowestDuration) {\r\n SmoMusic._validDurations[dottedValue] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: dottedValue,\r\n baseTicks,\r\n dots: j\r\n }\r\n SmoMusic._validDurationKeys.push(dottedValue);\r\n }\r\n }\r\n SmoMusic._validDurations[baseTicks] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: baseTicks,\r\n baseTicks,\r\n dots: 0\r\n };\r\n SmoMusic._validDurationKeys.push(baseTicks);\r\n }\r\n }\r\n return SmoMusic._validDurations;\r\n }\r\n /**\r\n * Get the closest duration from ticks\r\n * @param ticks \r\n * @returns \r\n */\r\n static closestSmoDurationFromTicks(ticks: number): SimpleDuration | null {\r\n if (SmoMusic.validDurations[ticks]) {\r\n return SmoMusic.validDurations[ticks];\r\n }\r\n for (var i = 0; i < SmoMusic._validDurationKeys.length; ++i) {\r\n if (SmoMusic._validDurationKeys[i] < ticks) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[i]];\r\n }\r\n }\r\n return null;\r\n }\r\n static _ticksToDuration: Record = {};\r\n\r\n // ### ticksToDuration\r\n // Frequently we double/halve a note duration, and we want to find the vex tick duration that goes with that.\r\n static get ticksToDuration(): Record {\r\n let i = 0;\r\n const durations = ['1/2', '1', '2', '4', '8', '16', '32', '64', '128', '256'];\r\n const _ticksToDurationsF = () => {\r\n for (i = 0; i < SmoMusic.durationsDescending.length - 1; ++i) {\r\n let j = 0;\r\n let dots = '';\r\n let ticks = 0;\r\n\r\n // We support up to 4 'dots'\r\n for (j = 0; j <= 4 && j + i < SmoMusic.durationsDescending.length; ++j) {\r\n ticks += SmoMusic.durationsDescending[i + j];\r\n SmoMusic._ticksToDuration[ticks.toString()] = durations[i] + dots;\r\n dots += 'd';\r\n }\r\n }\r\n };\r\n if (Object.keys(SmoMusic._ticksToDuration).length < 1) {\r\n _ticksToDurationsF();\r\n }\r\n return SmoMusic._ticksToDuration;\r\n } \r\n // static closestSmoDuration(ticks: number): SmoDuration {\r\n // if ()\r\n // }\r\n static timeSignatureToTicks(timeSignature: string): number {\r\n const nd = timeSignature.split('/');\r\n const num = parseInt(nd[0], 10);\r\n const den = parseInt(nd[1], 10);\r\n const base = 2048 * (8 / den);\r\n return base * num;\r\n }\r\n static smoTicksToVexDots(ticks: number) {\r\n const vd = SmoMusic.ticksToDuration[ticks];\r\n if (!vd) {\r\n return 0;\r\n }\r\n const dots = (vd.match(/d/g) || []).length;\r\n return dots;\r\n }\r\n static midiTicksForQuantizeTo(ticks: number) {\r\n const oneDot = ticks * 2;\r\n const twoDots = ticks * 4;\r\n const threeDots = ticks * 8;\r\n const dCount = (str: string) => {\r\n const re = /d/g\r\n return ((str || '').match(re) || []).length\r\n }\r\n return Object.keys(SmoMusic.ticksToDuration).filter((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt < ticks) {\r\n return false;\r\n }\r\n const dots = dCount(SmoMusic.ticksToDuration[key]);\r\n if (dots > 0 && keyInt < oneDot) {\r\n return false;\r\n }\r\n if (dots > 1 && keyInt < twoDots) {\r\n return false;\r\n }\r\n if (dots > 2 && keyInt < threeDots) {\r\n return false;\r\n }\r\n if (dots > 3) {\r\n return false;\r\n }\r\n return true;\r\n })\r\n .map((key) => parseInt(key, 10));\r\n // return Object.keys(SmoMusic.ticksToDuration).map((key) => parseInt(key, 10)); \r\n }\r\n static get midiTicksForQuantizeMap(): Record {\r\n return {\r\n 512: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 1024: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 2048: SmoMusic.midiTicksForQuantizeTo(2048)\r\n };\r\n }\r\n static midiTicksForQuantize(ticks: number) {\r\n return SmoMusic.midiTicksForQuantizeMap[ticks];\r\n }\r\n static binarySearch(target: number, ix: number, partition: number, input: number[]) {\r\n const test = input[ix];\r\n const cost = Math.abs(target - test);\r\n if (cost < 1) {\r\n return ({ cost, result: test, newIx: ix, oldIx: ix, partition: 0, input })\r\n }\r\n partition = Math.round(partition / 2) + 1;\r\n const step = Math.round(partition / 2);\r\n if (input[ix] > target) {\r\n return ({ cost, result: input[ix], newIx: ix - step, partition, input });\r\n } else {\r\n return ({ cost, result: input[ix], newIx: ix + step, partition, input });\r\n }\r\n }\r\n static midiTickSearch(target: number, quantize: number) {\r\n const tickSet = SmoMusic.midiTicksForQuantize(quantize);\r\n let partition = Math.round(tickSet.length / 2);\r\n let ix = partition;\r\n let best = { cost: Math.abs(tickSet[ix] - target), result: tickSet[ix], ix };\r\n let result = SmoMusic.binarySearch(target, ix, partition, tickSet);\r\n while (best.cost > 1) {\r\n if (best.cost > result.cost) {\r\n best.cost = result.cost;\r\n best.result = result.result;\r\n best.ix = ix;\r\n }\r\n ix = result.newIx;\r\n if (result.partition <= 3) {\r\n break;\r\n }\r\n result = SmoMusic.binarySearch(target, result.newIx, result.partition, tickSet);\r\n }\r\n if (result.cost > 1 && result.partition > 0) {\r\n let i = 0;\r\n const ix = best.ix;\r\n const step = best.result > target ? -1 : 1;\r\n for (i = 0; i < (result.partition + 2) && (i * step) + ix < tickSet.length && (i * step) + ix >= 0; ++i) {\r\n const newIx = (i * step) + ix;\r\n const cost = Math.abs(target - tickSet[newIx]);\r\n if (best.cost > cost) {\r\n best.cost = cost;\r\n best.ix = (i * step) + ix;\r\n best.result = tickSet[(i * step) + ix];\r\n }\r\n }\r\n }\r\n return { cost: best.cost, result: best.result };\r\n }\r\n // ## closestVexDuration\r\n // ## Description:\r\n // return the closest vex duration >= to the actual number of ticks. Used in beaming\r\n // triplets which have fewer ticks then their stem would normally indicate.\r\n static closestVexDuration(ticks: number): string {\r\n let stemTicks = SmoMusic.highestDuration;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (ticks <= stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n stemTicks = stemTicks * 2;\r\n return SmoMusic.ticksToDuration[stemTicks];\r\n }\r\n\r\n // ### closestDurationTickLtEq\r\n // Price is right style, closest tick value without going over. Used to pad\r\n // rests when reading musicXML.\r\n static closestDurationTickLtEq(ticks: number): number {\r\n const sorted = Object.keys(SmoMusic.ticksToDuration)\r\n .map((key) => parseInt(key, 10))\r\n .filter((key) => key <= ticks);\r\n return sorted[sorted.length - 1];\r\n }\r\n /**\r\n * Return array of valid note-lengths from an odd number of ticks,\r\n * so we can come as close as possible to representing the ticks with notes\r\n * @param ticks\r\n * @returns\r\n */\r\n static splitIntoValidDurations(ticks: number): number[] {\r\n const rv = [];\r\n let closest = 0;\r\n while (ticks > 128) {\r\n closest = SmoMusic.closestDurationTickLtEq(ticks);\r\n ticks -= closest;\r\n rv.push(closest);\r\n }\r\n return rv;\r\n }\r\n // ### vexStemType\r\n // return the vex stem type (no dots)\r\n static vexStemType(ticks: number): string {\r\n const str = SmoMusic.ticksToDuration[SmoMusic.splitIntoValidDurations(ticks)[0]];\r\n if (str.indexOf('d') >= 0) {\r\n return str.substr(0, str.indexOf('d'));\r\n }\r\n return str;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with an added dot. Return\r\n // identity if that is not a supported value.\r\n static getNextDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index > 0) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index - 1]].ticks;\r\n }\r\n return ticks;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with one fewer dot. Return\r\n // identity if that is not a supported value.\r\n static getPreviousDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index < SmoMusic._validDurationKeys.length + 1) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index + 1]].ticks;\r\n }\r\n return ticks;\r\n }\r\n\r\n /**\r\n * break the duration up into an array of durations, to split a long\r\n * note up between bars when pasting.\r\n * @param duration\r\n * @returns\r\n */\r\n static gcdMap(duration: number): number[] {\r\n let k = 0;\r\n const keys = Object.keys(SmoMusic.ticksToDuration).map((x) => parseInt(x, 10));\r\n const dar = [];\r\n const gcd = (td: number) => {\r\n let rv = keys[0];\r\n for (k = 1; k < keys.length; ++k) {\r\n if (td % keys[k] === 0) {\r\n rv = keys[k];\r\n }\r\n }\r\n return rv;\r\n };\r\n while (duration > 0 && !SmoMusic.ticksToDuration[duration]) {\r\n const div = gcd(duration);\r\n duration = duration - div;\r\n dar.push(div);\r\n }\r\n if (duration > 0) {\r\n dar.push(duration);\r\n }\r\n return dar.sort((a, b) => a > b ? -1 : 1);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoNote}. Notes have pitches and a duration, and other\r\n * modifiers that can affect display or playback.\r\n * @module /smo/data/note\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNoteModifierBase, SmoArticulation, SmoLyric, SmoGraceNote, SmoMicrotone, SmoOrnament, SmoDynamicText, SmoArpeggio, SmoArticulationParametersSer, GraceNoteParamsSer, SmoOrnamentParamsSer, SmoMicrotoneParamsSer } from './noteModifiers';\r\nimport { SmoMusic } from './music';\r\nimport { Ticks, Pitch, SmoAttrs, Transposable, PitchLetter, SvgBox, getId } from './common';\r\nimport { FontInfo, vexCanonicalNotes } from '../../common/vex';\r\nimport { SmoTupletParamsSer } from './tuplet';\r\n\r\nexport interface TupletInfo {\r\n id: string;\r\n}\r\n// @internal\r\nexport type NoteType = 'n' | 'r' | '/';\r\n// @internal\r\nexport type NoteStringParam = 'noteHead' | 'clef';\r\n// @internal\r\nexport const NoteStringParams: NoteStringParam[] = ['noteHead', 'clef'];\r\n// @internal\r\nexport type NoteNumberParam = 'beamBeats' | 'flagState';\r\n// @internal\r\nexport const NoteNumberParams: NoteNumberParam[] = ['beamBeats', 'flagState'];\r\n// @internal\r\nexport type NoteBooleanParam = 'hidden' | 'endBeam' | 'isCue';\r\n// @internal\r\nexport const NoteBooleanParams: NoteBooleanParam[] = ['hidden', 'endBeam', 'isCue'];\r\n/**\r\n * Constructor parameters for a note. Usually you will call\r\n * {@link SmoNote.defaults}, and modify the parameters you need to change.\r\n * @param noteType\r\n * @param noteHead is non-empty, a Vex notehead code TODO make a record<>\r\n * @param clef determines how the pitch is placed on the staff\r\n * @param textModifiers are lyrics, chords, dynamics\r\n * @param articulations\r\n * @param graceNotes\r\n * @param ornaments\r\n * @param tones\r\n * @param tuplet tuplet info, if the note is part of a tuplet\r\n * @param endBeam true if this is the last note in a beam\r\n * @param fillStyle for special effects, for instance to highlight active voice\r\n * @param hidden indicates the note (usually a rest) is invisible (transparent)\r\n * @param beamBeats how many ticks to use before beaming a group\r\n * @param flagState up down auto\r\n * @param ticks duration\r\n * @param pitches SmoPitch array\r\n * @param isCue tiny notes\r\n * @category SmoParameters\r\n */\r\nexport interface SmoNoteParams {\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteModifierBase[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulation[],\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: SmoGraceNote[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnament[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotone[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArpeggio,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tuplet: TupletInfo | undefined,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote: string | null\r\n}\r\n\r\n/**\r\n * The serializable bits of a Note. Notes will always \r\n * have a type, and if a sounded note, can contain pitches. It will always\r\n * contains ticks.\r\n * @category serialization\r\n */\r\nexport interface SmoNoteParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /** attributes for identity */\r\n attrs: SmoAttrs;\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteModifierBase[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulationParametersSer,\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: GraceNoteParamsSer[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnamentParamsSer[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotoneParamsSer[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArticulationParametersSer,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tuplet: SmoTupletParamsSer | undefined,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote: string | null \r\n}\r\nfunction isSmoNoteParamsSer(params: Partial): params is SmoNoteParamsSer {\r\n if (params.ctor && params.ctor === 'SmoNote') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * SmoNote contains the pitch and duration of a note or chord.\r\n * It can also contain arrays of modifiers like lyrics, articulations etc.\r\n * Also information about the beaming, flag etc.\r\n * @category SmoObject\r\n * */\r\nexport class SmoNote implements Transposable {\r\n constructor(params: SmoNoteParams) {\r\n const defs = SmoNote.defaults;\r\n NoteStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n this.noteType = params.noteType ? params.noteType : defs.noteType;\r\n NoteNumberParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n NoteBooleanParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n this.clefNote = params.clefNote;\r\n const ticks = params.ticks ? params.ticks : defs.ticks;\r\n const pitches = params.pitches ? params.pitches : defs.pitches;\r\n this.ticks = JSON.parse(JSON.stringify(ticks));\r\n this.pitches = JSON.parse(JSON.stringify(pitches));\r\n this.clef = params.clef ? params.clef : defs.clef;\r\n this.fillStyle = params.fillStyle ? params.fillStyle : '';\r\n if (params.tuplet) {\r\n this.tuplet = params.tuplet;\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n }; // else inherit\r\n }\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n // Note type and ID\r\n attrs: SmoAttrs;\r\n flagState: number = SmoNote.flagStates.auto;\r\n textModifiers: SmoNoteModifierBase[] = [];\r\n articulations: SmoArticulation[] = [];\r\n ornaments: SmoOrnament[] = [];\r\n pitches: Pitch[] = [];\r\n noteHead: string = '';\r\n arpeggio?: SmoArpeggio;\r\n clef: string = 'treble';\r\n clefNote: string | null = null;\r\n graceNotes: SmoGraceNote[] = [];\r\n noteType: NoteType = 'n';\r\n fillStyle: string = '';\r\n hidden: boolean = false;\r\n tuplet: TupletInfo | null = null;\r\n tones: SmoMicrotone[] = [];\r\n endBeam: boolean = false;\r\n ticks: Ticks = { numerator: 4096, denominator: 1, remainder: 0 };\r\n beamBeats: number = 4096;\r\n beam_group: SmoAttrs | null = null;\r\n renderId: string | null = null;\r\n keySignature: string = 'c';\r\n logicalBox: SvgBox | null = null;\r\n isCue: boolean = false;\r\n accidentalsRendered: string[] = [];// set by renderer if accidental is to display\r\n /**\r\n * used in serialization\r\n * @internal\r\n */\r\n static get parameterArray() {\r\n return ['ticks', 'pitches', 'noteType', 'tuplet', 'clef', 'isCue',\r\n 'endBeam', 'beamBeats', 'flagState', 'noteHead', 'fillStyle', 'hidden', 'arpeggio', 'clefNote'];\r\n }\r\n /**\r\n * Default constructor parameters. We always return a copy so the caller can modify it\r\n */\r\n static get defaults(): SmoNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n noteType: 'n',\r\n noteHead: 'n',\r\n clef: 'treble',\r\n textModifiers: [],\r\n articulations: [],\r\n graceNotes: [],\r\n ornaments: [],\r\n tones: [],\r\n endBeam: false,\r\n fillStyle: '',\r\n hidden: false,\r\n beamBeats: 4096,\r\n isCue: false,\r\n flagState: SmoNote.flagStates.auto,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: 'n'\r\n }],\r\n }));\r\n }\r\n /**\r\n * Up, down auto (tri-state)\r\n */\r\n toggleFlagState() {\r\n this.flagState = (this.flagState + 1) % 3;\r\n }\r\n\r\n get dots() {\r\n if (this.isTuplet) {\r\n return 0;\r\n }\r\n const vexDuration = SmoMusic.closestSmoDurationFromTicks(this.tickCount);\r\n if (!vexDuration) {\r\n return 0;\r\n }\r\n return vexDuration.dots;\r\n }\r\n\r\n private _addModifier(dynamic: SmoDynamicText, toAdd: boolean) {\r\n var tms = [];\r\n this.textModifiers.forEach((tm) => {\r\n if (tm.attrs.type !== dynamic.attrs.type) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(dynamic);\r\n }\r\n this.textModifiers = tms;\r\n }\r\n\r\n private _addArticulation(articulation: SmoArticulation, toAdd: boolean) {\r\n var tms = [];\r\n this.articulations.forEach((tm) => {\r\n if (tm.articulation !== articulation.articulation) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(articulation);\r\n }\r\n this.articulations = tms;\r\n }\r\n\r\n /**\r\n * Add a new dynamic to thisnote\r\n * @param dynamic\r\n */\r\n addDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, true);\r\n }\r\n /**\r\n * Remove the dynamic from this note.\r\n * @param dynamic \r\n */\r\n removeDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, false);\r\n }\r\n /**\r\n * Get all note modifiers of a type, either a lyric or a dynamic\r\n * @param type ctor\r\n * @returns \r\n */\r\n getModifiers(type: string) {\r\n var ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === type\r\n );\r\n return ms;\r\n }\r\n setArpeggio(arp: SmoArpeggio) {\r\n this.arpeggio = arp;\r\n }\r\n /**\r\n * \r\n * @returns the longest lyric, used for formatting\r\n */\r\n longestLyric(): SmoLyric | null {\r\n const tms: SmoNoteModifierBase[] = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric\r\n );\r\n if (!tms.length) {\r\n return null;\r\n }\r\n return tms.reduce((m1, m2) =>\r\n (m1 as SmoLyric).getText().length > (m2 as SmoLyric).getText().length ? m1 : m2\r\n ) as SmoLyric;\r\n }\r\n /** Add a lyric to this note, replacing another in the same verse */\r\n addLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).parser !== lyric.parser ||\r\n (mod as SmoLyric).verse !== lyric.verse\r\n );\r\n tms.push(lyric);\r\n this.textModifiers = tms;\r\n }\r\n\r\n /**\r\n * @returns array of lyrics that are lyrics\r\n */\r\n getTrueLyrics(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric);\r\n ms.sort((a, b) => (a as SmoLyric).verse - (b as SmoLyric).verse);\r\n return (ms as SmoLyric[]);\r\n }\r\n /**\r\n * \r\n * @returns array of SmoLyric whose parsers are chord\r\n */\r\n getChords(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.chord\r\n );\r\n return ms as SmoLyric[];\r\n }\r\n /**\r\n * \r\n * @param lyric lyric to remove, find the best match if there are multiples\r\n */\r\n removeLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).verse !== lyric.verse || (mod as SmoLyric).parser !== lyric.parser\r\n );\r\n this.textModifiers = tms;\r\n }\r\n /**\r\n * \r\n * @param verse \r\n * @param parser \r\n * @returns \r\n */\r\n getLyricForVerse(verse: number, parser: number) {\r\n return this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === parser && (mod as SmoLyric).verse === verse\r\n );\r\n }\r\n\r\n /**\r\n * \r\n * @param fontInfo\r\n */\r\n setLyricFont(fontInfo: FontInfo) {\r\n const lyrics = this.getTrueLyrics();\r\n\r\n lyrics.forEach((lyric) => {\r\n lyric.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n /**\r\n * @param adjustNoteWidth if true, vex will consider the lyric width when formatting the measure\r\n */\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n const lyrics = this.getTrueLyrics();\r\n lyrics.forEach((lyric) => {\r\n lyric.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n getOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz() === false);\r\n }\r\n\r\n getJazzOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz());\r\n }\r\n\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param ornament\r\n */\r\n toggleOrnament(ornament: SmoOrnament) {\r\n const aix = this.ornaments.filter((a) =>\r\n a.attrs.type === 'SmoOrnament' && a.ornament === ornament.ornament\r\n );\r\n if (!aix.length) {\r\n this.ornaments.push(ornament);\r\n } else {\r\n this.ornaments = [];\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param articulation\r\n */\r\n toggleArticulation(articulation: SmoArticulation) {\r\n var aix = this.articulations.findIndex((a) =>\r\n a.articulation === articulation.articulation\r\n );\r\n if (aix >= 0) {\r\n const cur = this.articulations[aix];\r\n if (cur.position === SmoArticulation.positions.above) {\r\n cur.position = SmoArticulation.positions.below;\r\n return;\r\n } else {\r\n this._addArticulation(articulation, false);\r\n return;\r\n }\r\n }\r\n this._addArticulation(articulation, true);\r\n }\r\n\r\n /**\r\n * Sort pitches in pitch order, Vex likes to receive pitches in order\r\n * @param note \r\n */\r\n static sortPitches(note: Transposable) {\r\n const canon = vexCanonicalNotes();\r\n const keyIndex = ((pitch: Pitch) =>\r\n canon.indexOf(pitch.letter) + pitch.octave * 12\r\n );\r\n note.pitches.sort((a, b) => keyIndex(a) - keyIndex(b));\r\n }\r\n setNoteHead(noteHead: string) {\r\n if (this.noteHead === noteHead) {\r\n this.noteHead = '';\r\n } else {\r\n this.noteHead = noteHead;\r\n }\r\n }\r\n /**\r\n * \r\n * @param graceNote\r\n * @param offset the index from the first grace note\r\n */\r\n addGraceNote(graceNote: SmoGraceNote, offset: number) {\r\n if (typeof(offset) === 'undefined') {\r\n offset = 0;\r\n }\r\n graceNote.clef = this.clef;\r\n this.graceNotes.push(graceNote);\r\n }\r\n removeGraceNote(offset: number) {\r\n if (offset >= this.graceNotes.length) {\r\n return;\r\n }\r\n this.graceNotes.splice(offset, 1);\r\n }\r\n getGraceNotes() {\r\n return this.graceNotes;\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param note\r\n * @param offset\r\n */\r\n static addPitchOffset(note: Transposable, offset: number): void {\r\n if (note.pitches.length === 0) {\r\n return;\r\n }\r\n note.noteType = 'n';\r\n const pitch = note.pitches[0];\r\n note.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(note);\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param offset\r\n * @returns \r\n */\r\n addPitchOffset(offset: number) {\r\n if (this.pitches.length === 0) {\r\n return;\r\n }\r\n this.noteType = 'n';\r\n const pitch = this.pitches[0];\r\n this.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(this);\r\n }\r\n toggleRest() {\r\n this.noteType = (this.noteType === 'r' ? 'n' : 'r');\r\n }\r\n toggleSlash() {\r\n this.noteType = (this.noteType === '/' ? 'n' : '/');\r\n }\r\n makeSlash() {\r\n this.noteType = '/';\r\n }\r\n makeRest() {\r\n this.noteType = 'r';\r\n }\r\n isRest() {\r\n return this.noteType === 'r';\r\n }\r\n isSlash() {\r\n return this.noteType === '/';\r\n }\r\n isHidden() {\r\n return this.hidden;\r\n }\r\n\r\n makeNote() {\r\n this.noteType = 'n';\r\n // clear fill style if we were hiding rests\r\n this.fillStyle = '';\r\n this.hidden = false;\r\n }\r\n /**\r\n * set note opacity on/off\r\n * @param val\r\n */\r\n makeHidden(val: boolean) {\r\n this.hidden = val;\r\n this.fillStyle = val ? '#aaaaaa7f' : '';\r\n }\r\n\r\n /**\r\n * Return true if this note is part of a tuplet\r\n */\r\n get isTuplet(): boolean {\r\n return this.tuplet !== null && typeof(this.tuplet.id) !== 'undefined';\r\n }\r\n\r\n addMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn: SmoMicrotone) => tn.pitchIndex !== tone.pitchIndex);\r\n ar.push(tone);\r\n this.tones = ar;\r\n }\r\n removeMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn) => tn.pitchIndex !== tone.pitchIndex\r\n && tn.pitchIndex <= this.pitches.length // also remove tones for removed pitches\r\n && tone.tone !== tn.tone);\r\n this.tones = ar;\r\n }\r\n getMicrotone(toneIndex: number) {\r\n return this.tones.find((tn) => tn.pitchIndex === toneIndex);\r\n }\r\n\r\n getMicrotones() {\r\n return this.tones;\r\n }\r\n /**\r\n * cycle through the list of enharmonics for this note.\r\n * @param pitch\r\n * @returns \r\n */\r\n static toggleEnharmonic(pitch: Pitch) {\r\n const lastLetter = pitch.letter;\r\n let vexPitch = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch));\r\n vexPitch = SmoMusic.getEnharmonic(vexPitch);\r\n\r\n pitch.letter = vexPitch[0] as PitchLetter;\r\n pitch.accidental = vexPitch.length > 1 ?\r\n vexPitch.substring(1, vexPitch.length) : 'n';\r\n pitch.octave += SmoMusic.letterChangedOctave(lastLetter, pitch.letter);\r\n return pitch;\r\n }\r\n /**\r\n * transpose a note or grace note to a key-friendly enharmonic\r\n * @param pitchArray\r\n * @param offset\r\n * @param originalKey - keySignature from original note\r\n * @param destinationKey - keySignature we are transposing into\r\n * @returns \r\n */\r\n transpose(pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n return SmoNote.transpose(this, pitchArray, offset, originalKey, destinationKey);\r\n }\r\n /**\r\n * used to add chord and pitch by piano widget\r\n * @param pitch\r\n */\r\n toggleAddPitch(pitch: Pitch) {\r\n const pitches: Pitch[] = [];\r\n let exists = false;\r\n this.pitches.forEach((o) => {\r\n if (o.letter !== pitch.letter ||\r\n o.octave !== pitch.octave ||\r\n o.accidental !== pitch.accidental) {\r\n pitches.push(o);\r\n } else {\r\n exists = true;\r\n }\r\n });\r\n this.pitches = pitches;\r\n if (!exists) {\r\n this.pitches.push(JSON.parse(JSON.stringify(pitch)));\r\n this.noteType = 'n';\r\n }\r\n SmoNote.sortPitches(this);\r\n }\r\n /**\r\n * @param note note to transpose\r\n * @param pitchArray an array of indices (not pitches) that indicate which pitches get altered if a chord\r\n * @param offset in 1/2 step\r\n * @param originalKey original key for enharmonic-friendly key\r\n * @param destinationKey destination key signature\r\n * @returns \r\n */\r\n static transpose(note: Transposable, pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n let index: number = 0;\r\n let j: number = 0;\r\n if (offset === 0 && originalKey === destinationKey) {\r\n return note;\r\n }\r\n // If no specific pitch, use all the pitches\r\n if (pitchArray.length === 0) {\r\n pitchArray = Array.from(note.pitches.keys());\r\n }\r\n for (j = 0; j < pitchArray.length; ++j) {\r\n index = pitchArray[j];\r\n if (index + 1 > note.pitches.length) {\r\n SmoNote.addPitchOffset(note, offset);\r\n } else {\r\n const original = JSON.parse(JSON.stringify(note.pitches[index]));\r\n const pitch = SmoMusic.transposePitchForKey(original, originalKey, destinationKey, offset);\r\n note.pitches[index] = pitch;\r\n }\r\n }\r\n SmoNote.sortPitches(note);\r\n return note;\r\n }\r\n get tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n /**\r\n * Copy the note, give it unique id\r\n * @param note\r\n * @returns \r\n */\r\n static clone(note: SmoNote) {\r\n var rv = SmoNote.deserialize(note.serialize());\r\n\r\n // make sure id is unique\r\n rv.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n };\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param note\r\n * @param ticks\r\n * @returns A note identical to `note` but with different duration\r\n */\r\n static cloneWithDuration(note: SmoNote, ticks: Ticks | number) {\r\n if (typeof(ticks) === 'number') {\r\n ticks = { numerator: ticks, denominator: 1, remainder: 0 };\r\n }\r\n const rv = SmoNote.clone(note);\r\n rv.ticks = ticks;\r\n return rv;\r\n }\r\n static serializeModifier(modifiers: SmoNoteModifierBase[]) : object[] {\r\n const rv: object[] = [];\r\n modifiers.forEach((modifier: SmoNoteModifierBase) => {\r\n rv.push(modifier.serialize());\r\n });\r\n return rv;\r\n }\r\n\r\n private _serializeModifiers(params: any) {\r\n params.textModifiers = SmoNote.serializeModifier(this.textModifiers);\r\n params.graceNotes = SmoNote.serializeModifier(this.graceNotes);\r\n params.articulations = SmoNote.serializeModifier(this.articulations);\r\n params.ornaments = SmoNote.serializeModifier(this.ornaments);\r\n params.tones = SmoNote.serializeModifier(this.tones);\r\n if (this.arpeggio) {\r\n params.arpeggio = this.arpeggio.serialize();\r\n }\r\n }\r\n /**\r\n * @returns a JSON object that can be used to create this note\r\n */\r\n serialize(): SmoNoteParamsSer {\r\n var params: Partial = { ctor: 'SmoNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoNote.defaults, SmoNote.parameterArray, this, params);\r\n if (params.ticks) {\r\n params.ticks = JSON.parse(JSON.stringify(params.ticks));\r\n }\r\n this._serializeModifiers(params);\r\n if (!isSmoNoteParamsSer(params)) {\r\n throw 'bad note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n /**\r\n * restore note modifiers and create a SmoNote object\r\n * @param jsonObj\r\n * @returns \r\n */\r\n static deserialize(jsonObj: any) {\r\n var note = new SmoNote(jsonObj);\r\n if (jsonObj.textModifiers) {\r\n jsonObj.textModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.graceNotes) {\r\n jsonObj.graceNotes.forEach((mod: any) => {\r\n note.graceNotes.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.ornaments) {\r\n jsonObj.ornaments.forEach((mod: any) => {\r\n note.ornaments.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.articulations) {\r\n jsonObj.articulations.forEach((mod: any) => {\r\n note.articulations.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.tones) {\r\n jsonObj.tones.forEach((mod: any) => {\r\n note.tones.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n // Due to a bug, text modifiers were serialized into noteModifiers array\r\n if (jsonObj.noteModifiers) {\r\n jsonObj.noteModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.arpeggio) {\r\n note.arpeggio = SmoNoteModifierBase.deserialize(jsonObj.arpeggio);\r\n }\r\n return note;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * @module /smo/data/noteModifiers\r\n */\r\nimport { SmoAttrs, Ticks, Pitch, getId, SmoObjectParams, Transposable, SvgBox, SmoModifierBase } from './common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoMusic } from './music';\r\nimport { defaultNoteScale, FontInfo, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n// const Smo = eval('globalThis.Smo');\r\n\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * All note modifiers have a serialize method and a 'ctor' parameter or deserialization\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoNoteModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n this.ctor = ctor;\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n // Handle backwards-compatibility thing\r\n if (jsonObj.ctor === 'SmoMicrotone' && typeof ((jsonObj as any).pitch) === 'number') {\r\n (jsonObj as any).pitchIndex = (jsonObj as any).pitch;\r\n }\r\n if (jsonObj.ctor === 'SmoLyric') {\r\n if (typeof((jsonObj as any)._text) === 'string') {\r\n (jsonObj as any).text = (jsonObj as any)._text;\r\n }\r\n }\r\n if (typeof (ctor) === 'undefined') {\r\n console.log('ouch bad ctor for ' + jsonObj.ctor);\r\n }\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\n/**\r\n * used to construct {@link SmoGraceNote}\r\n * beam group.\r\n * @category SmoParameters\r\n */\r\nexport interface GraceNoteParams extends SmoModifierBase {\r\n /**\r\n * up, down, or auto\r\n */\r\n flagState: number,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n noteType: string,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n beamBeats: number,\r\n /**\r\n * same as for {@link SmoNote}. Indicates break in beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * should be same as note?\r\n */\r\n clef: string,\r\n /**\r\n * there's probably a name for this...\r\n */\r\n slash: boolean,\r\n /**\r\n * only used for beaming\r\n */\r\n ticks: Ticks,\r\n /**\r\n * Pitch, same as for {@link SmoNote}\r\n */\r\n pitches: Pitch[],\r\n}\r\n\r\n/**\r\n * serialized grace note\r\n * @category serialization\r\n */\r\nexport interface GraceNoteParamsSer extends GraceNoteParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs;\r\n}\r\n\r\nfunction isGraceNoteParamsSer(params: Partial): params is GraceNoteParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoGraceNote') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A grace notes has many of the things an 'actual' note can have, but it doesn't take up\r\n * time against the time signature\r\n * @category SmoModifier\r\n */\r\nexport class SmoGraceNote extends SmoNoteModifierBase implements Transposable {\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n static get defaults(): GraceNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n flagState: SmoGraceNote.flagStates.auto,\r\n noteType: 'n',\r\n beamBeats: 4096,\r\n endBeam: false,\r\n clef: 'treble',\r\n slash: false,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: ''\r\n }]\r\n }));\r\n }\r\n // TODO: Matches SmoNote - move to SmoMusic?\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoGraceNote.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n ticks: Ticks = SmoGraceNote.defaults.ticks;\r\n pitches: Pitch[] = [];\r\n slash: boolean = false;\r\n clef: string = 'treble';\r\n noteType: string = 'n';\r\n renderId: string | null = null;\r\n\r\n tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n toVexGraceNote() {\r\n const p = SmoMusic.smoPitchesToVex(this.pitches);\r\n const rv = { duration: SmoMusic.closestVexDuration(this.tickCount()), keys: p, slash: this.slash };\r\n return rv;\r\n }\r\n\r\n serialize(): GraceNoteParamsSer {\r\n const params: Partial = { ctor: 'SmoGraceNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoGraceNote.defaults,\r\n SmoGraceNote.parameterArray, this, params);\r\n if (!isGraceNoteParamsSer(params)) {\r\n throw 'bad grace note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n\r\n constructor(parameters: Partial) {\r\n super('SmoGraceNote');\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, SmoGraceNote.defaults, this);\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, parameters, this);\r\n }\r\n}\r\nexport type SmoArpeggioType = 'directionless' | 'rasquedo_up' | 'rasquedo_down' \r\n | 'roll_up' | 'roll_down' | 'brush_up' | 'brush_down' | 'none';\r\nexport const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n\r\n /**\r\n * @category SmoParameters\r\n */\r\nexport interface SmoArpeggioParams {\r\n type: SmoArpeggioType\r\n}\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoArpeggioParamsSer {\r\n ctor: string;\r\n /**\r\n * stringified arpeggion enumeration\r\n */\r\n type: string;\r\n}\r\nfunction isSmoArpeggionParamsSer(params: Partial): params is SmoArpeggioParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArpeggio') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport function isArpeggioType(tp: SmoArpeggioType | string): tp is SmoArpeggioType {\r\n return SmoArpeggioTypes.indexOf(tp) >= 0;\r\n}\r\n/**\r\n * A 'splatter' symbol next to a chord.\r\n */\r\nexport class SmoArpeggio extends SmoNoteModifierBase {\r\n static _types: Record = {};\r\n static get types() {\r\n if (typeof(SmoArpeggio._types['directionless']) === 'undefined') {\r\n SmoArpeggio._types['directionless'] = 7;\r\n SmoArpeggio._types['rasquedo_up'] = 6;\r\n SmoArpeggio._types['rasquedo_down'] = 5;\r\n SmoArpeggio._types['roll_up'] = 4;\r\n SmoArpeggio._types['roll_down'] = 3;\r\n SmoArpeggio._types['brush_up'] = 2;\r\n SmoArpeggio._types['brush_down'] = 1;\r\n SmoArpeggio._types['none'] = 0;\r\n }\r\n return SmoArpeggio._types;\r\n } \r\n typeCode: number;\r\n constructor(params: SmoArpeggioParams) {\r\n super('SmoArpeggio');\r\n this.typeCode = SmoArpeggio.types[params.type];\r\n }\r\n get typeString(): SmoArpeggioType {\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n const type = str ? str : 'none';\r\n return type as SmoArpeggioType;\r\n }\r\n serialize(): SmoArpeggioParamsSer {\r\n const rv: Partial = { ctor: 'SmoArpeggio' }\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n rv.type = str ? str : 'none';\r\n if (!isSmoArpeggionParamsSer(rv)) {\r\n throw 'bad arpeggio ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMicrotone}\r\n * @category SmoParams\r\n */\r\nexport interface SmoMicrotoneParams extends SmoObjectParams {\r\n /**\r\n * indicates which modifier to alter the tone (e.g. 1/4 sharp)\r\n */\r\n tone: string,\r\n /**\r\n * the index of the pitch to alter\r\n */\r\n pitch: number\r\n}\r\n/**\r\n * serialized microtones.\r\n * @category serialization\r\n */\r\nexport interface SmoMicrotoneParamsSer extends SmoMicrotoneParams {\r\n ctor: string,\r\n attrs: SmoAttrs\r\n}\r\nfunction isSmoMicrotoneParamsSer(params: Partial): params is SmoMicrotoneParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoMicrotone') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Microtones are treated similarly to ornaments. There are not\r\n * rules for persisting throughout a measure, cancel etc.\r\n * @category SmoModifier\r\n*/\r\nexport class SmoMicrotone extends SmoNoteModifierBase {\r\n tone: string;\r\n pitchIndex: number = 0;\r\n\r\n // This is how VexFlow notates them\r\n static readonly smoToVex: Record = {\r\n flat75sz: 'db',\r\n flat25sz: 'd',\r\n flat25ar: 'bs',\r\n flat125ar: 'afhf',\r\n sharp75: '++',\r\n sharp125: 'ashs',\r\n sharp25: '+',\r\n sori: 'o',\r\n koron: 'k'\r\n }\r\n\r\n // The audio frequency offsets\r\n static readonly pitchCoeff: Record = {\r\n flat75sz: -1.5,\r\n flat25sz: -0.5,\r\n flat25ar: -0.5,\r\n flat125ar: -2.5,\r\n sharp75: 1.5,\r\n sharp125: 2.5,\r\n sharp25: 0.5,\r\n sori: 0.5,\r\n koron: -0.5\r\n }\r\n\r\n get toPitchCoeff(): number {\r\n return SmoMicrotone.pitchCoeff[this.tone];\r\n }\r\n\r\n get toVex(): string {\r\n return SmoMicrotone.smoToVex[this.tone];\r\n }\r\n static readonly defaults: SmoMicrotoneParams = {\r\n ctor: 'SmoMicrotone',\r\n tone: 'flat25sz',\r\n pitch: 0\r\n }\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoMicrotone.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoMicrotoneParamsSer {\r\n const params: Partial = { ctor: 'SmoMicrotone' };\r\n smoSerialize.serializedMergeNonDefault(SmoMicrotone.defaults,\r\n SmoMicrotone.parameterArray, this, params);\r\n if (!isSmoMicrotoneParamsSer(params)) {\r\n throw 'bad microtone ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoMicrotoneParams) {\r\n super(parameters.ctor);\r\n this.pitchIndex = parameters.pitch;\r\n this.tone = parameters.tone;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor for {@link SmoOrnament}\r\n * @category SmoParams\r\n */\r\nexport interface SmoOrnamentParams {\r\n /**\r\n * postition, above or below\r\n */\r\n position?: string,\r\n /**\r\n * horizontal offset from note head\r\n */ \r\n offset?: string,\r\n /**\r\n * code for the ornament\r\n */\r\n ornament: string,\r\n}\r\n/**\r\n * serializable ornament\r\n * @category serialization\r\n */\r\nexport interface SmoOrnamentParamsSer extends SmoOrnamentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoOrnamentParamsSer(params: Partial): params is SmoOrnamentParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoOrnament') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Ornaments map to vex ornaments. articulations vs. ornaments\r\n * is kind of arbitrary\r\n * @category SmoModifier\r\n */\r\nexport class SmoOrnament extends SmoNoteModifierBase {\r\n static readonly ornaments: Record = {\r\n mordent: 'mordent',\r\n mordentInverted: 'mordent_inverted',\r\n turn: 'turn',\r\n turnInverted: 'turn_inverted',\r\n trill: 'tr',\r\n upprall: 'upprall',\r\n prallup: 'prallup',\r\n pralldown: 'pralldown',\r\n upmordent: 'upmordent',\r\n downmordent: 'downmordent',\r\n lineprall: 'lineprall',\r\n prallprall: 'prallprall',\r\n scoop: 'scoop',\r\n fall_short: 'fall',\r\n dropLong: 'fallLong',\r\n doit: 'doit',\r\n doitLong: 'doitLong',\r\n flip: 'flip',\r\n smear: 'smear'\r\n }\r\n\r\n static readonly xmlOrnaments: Record = {\r\n mordent: 'mordent',\r\n mordent_inverted: 'inverted-mordent',\r\n turn: 'turn',\r\n turn_inverted: 'inverted-turn',\r\n upmordent: 'mordent',\r\n downmordent: 'mordent',\r\n lineprall: 'schleifer',\r\n prallprall: 'schleifer',\r\n prallup: 'schleifer',\r\n tr: 'trill-mark'\r\n }\r\n // jazz ornaments in vex are articulations in music xml\r\n static readonly xmlJazz: Record = {\r\n doit: 'doit',\r\n scoop: 'scoop',\r\n dropLong: 'falloff',\r\n drop: 'plop'\r\n }\r\n static get jazzOrnaments(): string[] {\r\n return ['SCOOP', 'FALL_SHORT', 'FALL_LONG', 'DOIT', 'LIFT', 'FLIP', 'SMEAR'];\r\n }\r\n toVex() {\r\n return SmoOrnament.ornaments[this.ornament.toLowerCase()];\r\n }\r\n\r\n isJazz() {\r\n return SmoOrnament.jazzOrnaments.indexOf(this.ornament) >= 0;\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: string = 'on';\r\n ornament: string = SmoOrnament.ornaments.mordent;\r\n\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoOrnament.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below'\r\n };\r\n }\r\n static get offsets() {\r\n return {\r\n on: 'on',\r\n after: 'after'\r\n };\r\n }\r\n static get defaults(): SmoOrnamentParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoOrnament',\r\n ornament: SmoOrnament.ornaments.mordent,\r\n position: SmoOrnament.positions.above,\r\n offset: SmoOrnament.offsets.on\r\n }));\r\n }\r\n serialize(): SmoOrnamentParamsSer {\r\n var params: Partial = { ctor: 'SmoOrnament' };\r\n smoSerialize.serializedMergeNonDefault(SmoOrnament.defaults,\r\n SmoOrnament.parameterArray, this, params);\r\n if (!isSmoOrnamentParamsSer(params)) {\r\n throw 'bad ornament ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoOrnamentParams) {\r\n super('SmoOrnament');\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, SmoOrnament.defaults, this);\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoArticulation}\r\n * @category SmoParams\r\n */\r\nexport interface SmoArticulationParameters {\r\n /**\r\n * position, above or below\r\n */\r\n position?: string,\r\n /**\r\n * x offset\r\n */\r\n offset?: number,\r\n /**\r\n * articulation code\r\n */\r\n articulation: string\r\n}\r\n/**\r\n * \r\n */\r\nexport interface SmoArticulationParametersSer extends SmoArticulationParameters {\r\n ctor: string;\r\n}\r\nfunction isSmoArticulationParametersSer(params: Partial): params is SmoArticulationParametersSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArticulation') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Articulations map to notes, can be placed above/below\r\n * @category SmoModifier\r\n */\r\nexport class SmoArticulation extends SmoNoteModifierBase {\r\n static get articulations() {\r\n return {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n marcato: 'marcato',\r\n tenuto: 'tenuto',\r\n upStroke: 'upStroke',\r\n downStroke: 'downStroke',\r\n pizzicato: 'pizzicato',\r\n fermata: 'fermata'\r\n };\r\n }\r\n static readonly xmlArticulations: Record = {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n tenuto: 'tenuto',\r\n marcato: 'strong-accent'\r\n }\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below'\r\n };\r\n }\r\n static get articulationToVex(): Record {\r\n return {\r\n accent: 'a>',\r\n staccato: 'a.',\r\n marcato: 'a^',\r\n tenuto: 'a-',\r\n upStroke: 'a|',\r\n downStroke: 'am',\r\n pizzicato: 'ao',\r\n fermata: 'a@a'\r\n };\r\n }\r\n\r\n static get vexToArticulation(): Record {\r\n return {\r\n 'a>': 'accent',\r\n 'a.': 'staccato',\r\n 'a^': 'marcato',\r\n 'a-': 'tenuto',\r\n 'a|': 'upStroke',\r\n 'am': 'downStroke',\r\n 'ao': 'pizzicato',\r\n 'a@a': 'fermata'\r\n };\r\n }\r\n static get parameterArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoArticulation.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positionToVex(): Record {\r\n return {\r\n 'above': 3,\r\n 'below': 4\r\n };\r\n }\r\n static get defaults(): SmoArticulationParameters {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoArticulation',\r\n position: SmoArticulation.positions.above,\r\n articulation: SmoArticulation.articulations.accent\r\n }));\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: number = 0;\r\n articulation: string = SmoArticulation.articulations.accent;\r\n adjX: number = 0;\r\n\r\n serialize(): SmoArticulationParametersSer {\r\n var params: Partial = { ctor: 'SmoArticulation'};\r\n smoSerialize.serializedMergeNonDefault(SmoArticulation.defaults,\r\n SmoArticulation.parameterArray, this, params);\r\n if (!isSmoArticulationParametersSer(params)) {\r\n throw 'bad articulation ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoArticulationParameters) {\r\n super('SmoArticulation');\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, SmoArticulation.defaults, this);\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\nexport interface VexAnnotationParams {\r\n glyph?: string,\r\n symbolModifier?: number,\r\n text?: string\r\n}\r\n\r\n/**\r\n * The persist-y parts of {@link SmoLyricParams}. We don't persist the selector\r\n * since that can change based on the position of the parent note\r\n * @category serialization\r\n */\r\nexport interface SmoLyricPersist extends SmoObjectParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\nfunction isSmoLyricPersist(params: Partial): params is SmoLyricPersist {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoLyric') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Used to construct a {@link SmoLyric} for both chords and lyrics\r\n * @category SmoParameters\r\n */\r\nexport interface SmoLyricParams {\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\n/**\r\n * SmoLyric covers both chords and lyrics. The parser tells you which\r\n * one you get.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLyric extends SmoNoteModifierBase {\r\n static readonly parsers: Record = {\r\n lyric: 0, anaylysis: 1, chord: 2\r\n }\r\n static get defaults(): SmoLyricParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoLyric',\r\n text: '\\xa0',\r\n endChar: '',\r\n verse: 0,\r\n fontInfo: {\r\n size: 12,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n translateX: 0,\r\n translateY: 0,\r\n adjustNoteWidthLyric: true,\r\n adjustNoteWidthChord: false,\r\n parser: SmoLyric.parsers.lyric\r\n }));\r\n }\r\n static get symbolPosition() {\r\n return {\r\n SUPERSCRIPT: 1,\r\n SUBSCRIPT: 2,\r\n NORMAL: 3\r\n };\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoLyric.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoLyric.persistArray;\r\n rv.push('selector', 'text');\r\n return rv;\r\n }\r\n\r\n ctor: string = 'SmoLyric';\r\n text: string = '';\r\n fontInfo: FontInfo = {\r\n size: 12,\r\n family: 'Merriweather',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n parser: number = SmoLyric.parsers.lyric;\r\n selector: string | null = null; // used by UI\r\n adjustNoteWidthLyric: boolean = true;\r\n adjustNoteWidthChord: boolean = false;\r\n verse: number = 0;\r\n skipRender: boolean = false;\r\n fill: string = '';\r\n translateX: number = 0;\r\n translateY: number = 0;\r\n classes: string = '';\r\n // used by the renderer to calculate offsets for aligning lyrics\r\n adjX: number = 0;\r\n adjY: number = 0;\r\n // used by the renderer to calculate the y offset for music that goes below the staff\r\n musicYOffset: number = 0;\r\n hyphenX: number = 0;\r\n deleted: boolean = false;\r\n\r\n serialize(): SmoLyricPersist {\r\n var params: Partial = { ctor: 'SmoLyric' };\r\n smoSerialize.serializedMergeNonDefault(SmoLyric.defaults,\r\n SmoLyric.persistArray, this, params);\r\n if (!isSmoLyricPersist(params)) {\r\n throw 'bad lyric ' + JSON.stringify('params');\r\n }\r\n return params;\r\n }\r\n\r\n // For lyrics, we default to adjust note width on lyric size. For chords, this is almost never what\r\n // you want, so it is off by default.\r\n get adjustNoteWidth() {\r\n return (this.parser === SmoLyric.parsers.lyric) ? this.adjustNoteWidthLyric : this.adjustNoteWidthChord;\r\n }\r\n set adjustNoteWidth(val) {\r\n if (this.parser === SmoLyric.parsers.lyric) {\r\n this.adjustNoteWidthLyric = val;\r\n } else {\r\n this.adjustNoteWidthChord = val;\r\n }\r\n }\r\n\r\n // ### getClassSelector\r\n // returns a selector used to find this text block within a note.\r\n getClassSelector(): string {\r\n var parser = (this.parser === SmoLyric.parsers.lyric ? 'lyric' : 'chord');\r\n return 'g.' + parser + '-' + this.verse;\r\n }\r\n\r\n setText(text: string) {\r\n // For chords, trim all whitespace\r\n if (this.parser !== SmoLyric.parsers.lyric) {\r\n if (text.trim().length) {\r\n text.replace(/\\s/g, '');\r\n }\r\n }\r\n this.text = text;\r\n }\r\n\r\n isHyphenated() {\r\n const text = this.text.trim();\r\n return this.parser === SmoLyric.parsers.lyric &&\r\n text.length &&\r\n text[text.length - 1] === '-';\r\n }\r\n\r\n getText() {\r\n const text = this.text.trim();\r\n if (this.isHyphenated()) {\r\n return smoSerialize.tryParseUnicode(text.substr(0, text.length - 1)).trim();\r\n }\r\n return smoSerialize.tryParseUnicode(text);\r\n }\r\n\r\n isDash() {\r\n return this.getText().length === 0 && this.isHyphenated();\r\n }\r\n\r\n static _chordGlyphFromCode(code: string) {\r\n return getChordSymbolGlyphFromCode(code);\r\n }\r\n static _tokenizeChordString(str: string) {\r\n // var str = this._text;\r\n const reg = /^([A-Z|a-z|0-9|]+)/g;\r\n let mmm = str.match(reg);\r\n let tokeType = '';\r\n let toke = '';\r\n const tokens = [];\r\n while (str.length) {\r\n if (!mmm) {\r\n tokeType = str[0];\r\n tokens.push(tokeType);\r\n str = str.slice(1, str.length);\r\n } else {\r\n toke = mmm[0].substr(0, mmm[0].length);\r\n str = str.slice(toke.length, str.length);\r\n tokens.push(toke);\r\n tokeType = '';\r\n toke = '';\r\n }\r\n mmm = str.match(reg);\r\n }\r\n return tokens;\r\n }\r\n\r\n\r\n\r\n constructor(parameters: SmoLyricParams) {\r\n super('SmoLyric');\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, SmoLyric.defaults, this);\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, parameters, this);\r\n // backwards-compatibility for lyric text\r\n if (parameters.text) {\r\n this.text = parameters.text;\r\n }\r\n\r\n // calculated adjustments for alignment purposes\r\n this.adjY = 0;\r\n this.adjX = 0;\r\n // this.verse = parseInt(this.verse, 10);\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoLyric'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The persisted bits of {@link SmoDynamicTextParams}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextPersist extends SmoObjectParams {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoDynamicText}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextParams extends SmoDynamicTextPersist {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string,\r\n selector: SmoSelector\r\n}\r\n\r\n/**\r\n * Dynamic text tells you how loud not to play.\r\n * @category SmoModifier\r\n */\r\nexport class SmoDynamicText extends SmoNoteModifierBase {\r\n static get dynamics(): Record {\r\n // matches VF.modifier\r\n return {\r\n PP: 'pp',\r\n P: 'p',\r\n MP: 'mp',\r\n MF: 'mf',\r\n F: 'f',\r\n FF: 'ff',\r\n SFZ: 'sfz'\r\n };\r\n }\r\n static get defaults(): SmoDynamicTextParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoDynamicText',\r\n xOffset: 0,\r\n fontSize: defaultNoteScale,\r\n yOffsetLine: 11,\r\n yOffsetPixels: 0,\r\n text: SmoDynamicText.dynamics.MP,\r\n }));\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoDynamicText.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoDynamicText.persistArray;\r\n rv.push('selector');\r\n return rv;\r\n }\r\n selector: SmoSelector;\r\n text: string = '';\r\n yOffsetLine: number = 11;\r\n yOffsetPixels: number = 0;\r\n xOffset: number = 0;\r\n fontSize: number = defaultNoteScale;\r\n serialize(): object {\r\n var params = {};\r\n smoSerialize.serializedMergeNonDefault(SmoDynamicText.defaults,\r\n SmoDynamicText.persistArray, this, params);\r\n return params;\r\n }\r\n constructor(parameters: SmoDynamicTextParams) {\r\n super('SmoDynamicText');\r\n smoSerialize.vexMerge(this, SmoDynamicText.defaults);\r\n smoSerialize.filteredMerge(SmoDynamicText.parameterArray, parameters, this);\r\n this.selector = parameters.selector;\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoDynamicText'\r\n };\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support partsInfo class, for part extraction. \r\n * Parts is parts.\r\n * @module /smo/data/partInfo\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoObjectParams } from './common';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer, SmoMeasureModifierBase } from './measureModifiers';\r\nimport { SmoLayoutManager, SmoLayoutManagerParamsSer, SmoLayoutManagerParams, SmoPageLayout } from './scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParamsSer } from './scoreText';\r\nimport { StaffModifierBase } from './staffModifiers';\r\n\r\nexport type SmoPartInfoStringType = 'partName' | 'partAbbreviation';\r\nexport const SmoPartInfoStringTypes: SmoPartInfoStringType[] = ['partName', 'partAbbreviation'];\r\nexport type SmoPartInfoNumType = 'stavesAfter' | 'stavesBefore';\r\nexport const SmoPartInfoNumTypes: SmoPartInfoNumType[] = ['stavesAfter', 'stavesBefore'];\r\nexport type SmoPartInfoBooleanType = 'preserveTextGroups' | 'cueInScore' | 'expandMultimeasureRests';\r\nexport const SmoPartInfoBooleanTypes: SmoPartInfoBooleanType[] = ['preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\n\r\nexport const SmoPartAttributesBasic = ['partName', 'partAbbreviation', 'stavesAfter', 'stavesBefore', 'preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\nexport interface SmoMidiInstrument {\r\n channel: number,\r\n program: number,\r\n volume: number,\r\n pan: number\r\n}\r\n/**\r\n * Data contained in a part. A part has its own text, measure formatting and page layouts,\r\n * and contains the notes from the score. It can be comprised of 1 or 2 adjacent staves.\r\n * Usually you will call\r\n * {@link SmoPartInfo.defaults}, and modify the parameters you need to change.\r\n * @param partName \r\n * @param partAbbreviation\r\n * @param stavesAfter for multi-stave parts (e.g. piano), indicates the relative position in the full score.\r\n * @param stavesBefore\r\n * @param layoutManager page/layout settings for the part\r\n * @param measureFormatting a map of measure format to measures for the part\r\n * @param textGroups if preserveTextGroups is true, the part has its own text.\r\n * @param preseverTextGroups if false, we use the full score text\r\n * @param cueInScore indicates tiny notes, like for piano accompaniment\r\n * @category SmoParameters\r\n */\r\nexport interface SmoPartInfoParams {\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\n\r\n/**\r\n * Serialized part information\r\n * @category serialization\r\n */\r\nexport interface SmoPartInfoParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\nfunction isSmoPartInfoParamsSer(params: Partial): params is SmoPartInfoParamsSer {\r\n if (params.ctor && params.ctor === 'SmoPartInfo') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Part info contains information that group 1 or 2 adjacent staves.\r\n * Parts can have formatting that is indepenedent of the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoPartInfo extends StaffModifierBase {\r\n partName: string = '';\r\n partAbbreviation: string = '';\r\n layoutManager: SmoLayoutManager;\r\n measureFormatting: Record = {};\r\n textGroups: SmoTextGroup[] = [];\r\n stavesAfter: number = 0;\r\n stavesBefore: number = 0;\r\n preserveTextGroups: boolean = false;\r\n cueInScore: boolean = false;\r\n displayCues: boolean = false;\r\n expandMultimeasureRests: boolean = false;\r\n midiInstrument: SmoMidiInstrument| null;\r\n midiDevice: string | null;\r\n static get defaults(): SmoPartInfoParams {\r\n return JSON.parse(JSON.stringify({\r\n partName: 'Staff ',\r\n partAbbreviation: '',\r\n globalLayout: SmoLayoutManager.defaultLayout,\r\n textGroups: [],\r\n preserveTextGroups: false,\r\n pageLayoutMap: {},\r\n stavesAfter: 0,\r\n stavesBefore: 0,\r\n cueInScore: false,\r\n midiDevice: null,\r\n midiInstrument: null,\r\n expandMultimeasureRests: false\r\n }));\r\n }\r\n constructor(params: SmoPartInfoParams) {\r\n super('SmoPartInfo');\r\n if (!params.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n } else {\r\n this.layoutManager = new SmoLayoutManager(params.layoutManager);\r\n }\r\n if (typeof(params.measureFormatting) !== 'undefined') {\r\n const formatKeys = Object.keys(params.measureFormatting);\r\n formatKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n this.measureFormatting[numKey] = new SmoMeasureFormat(params.measureFormatting![numKey]);\r\n });\r\n }\r\n if (params.textGroups) {\r\n this.textGroups = params.textGroups;\r\n }\r\n SmoPartInfoStringTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoNumTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoBooleanTypes.forEach((st) => {\r\n this[st] = params[st] ?? false;\r\n });\r\n this.midiDevice = params.midiDevice;\r\n if (params.midiInstrument) {\r\n this.midiInstrument = JSON.parse(JSON.stringify(params.midiInstrument));\r\n } else {\r\n this.midiInstrument = null;\r\n }\r\n }\r\n static deserialize(jsonObj: SmoPartInfoParamsSer): SmoPartInfo {\r\n const params = SmoPartInfo.defaults;\r\n smoSerialize.serializedMerge(SmoPartAttributesBasic, jsonObj, params);\r\n params.midiInstrument = jsonObj.midiInstrument;\r\n params.midiDevice = jsonObj.midiDevice;\r\n params.measureFormatting = {};\r\n if (jsonObj.layoutManager) {\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n params.layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n }\r\n if (jsonObj.measureFormatting) {\r\n const mfkeys = Object.keys(jsonObj.measureFormatting);\r\n mfkeys.forEach((mfkey) => {\r\n const mfnum = parseInt(mfkey, 10);\r\n params.measureFormatting![mfnum] = SmoMeasureModifierBase.deserialize(jsonObj.measureFormatting![mfnum]);\r\n });\r\n }\r\n return new SmoPartInfo(params);\r\n \r\n }\r\n serialize(): SmoPartInfoParamsSer {\r\n const rv: Partial = { ctor: 'SmoPartInfo' };\r\n smoSerialize.serializedMergeNonDefault(SmoPartInfo.defaults, SmoPartAttributesBasic, this, rv);\r\n rv.layoutManager = this.layoutManager.serialize();\r\n rv.textGroups = [];\r\n this.textGroups.forEach((tg) => {\r\n rv.textGroups!.push(tg.serialize());\r\n });\r\n rv.measureFormatting = {};\r\n if (this.midiInstrument) {\r\n rv.midiInstrument = JSON.parse(JSON.stringify(this.midiInstrument));\r\n }\r\n if (this.midiDevice) {\r\n rv.midiDevice = this.midiDevice;\r\n }\r\n Object.keys(this.measureFormatting).forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n rv.measureFormatting![numKey] = this.measureFormatting[numKey];\r\n });\r\n if (!isSmoPartInfoParamsSer(rv)) {\r\n throw 'bad part info ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoScore}\r\n * @module /smo/data/score\r\n */\r\nimport { SmoMusic } from './music';\r\nimport { Clef, SvgDimensions } from './common';\r\nimport { SmoMeasure, SmoMeasureParams, ColumnMappedParams, SmoMeasureParamsSer } from './measure';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport { SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, TimeSignature, TimeSignatureParameters,\r\n SmoMeasureFormatParamsSer } from './measureModifiers';\r\nimport { StaffModifierBase, SmoInstrument } from './staffModifiers';\r\nimport { SmoSystemGroup, SmoSystemGroupParamsSer, SmoScoreModifierBase, SmoPageLayout, \r\n SmoFormattingManager, SmoAudioPlayerSettings, SmoAudioPlayerParameters, SmoLayoutManagerParamsSer,\r\n SmoLayoutManager, FontPurpose,\r\n SmoScoreInfo, SmoScoreInfoKeys, ScoreMetadataSer, SmoScorePreferences, SmoPageLayoutParams, \r\n SmoLayoutManagerParams, SmoFormattingManagerParams } from './scoreModifiers';\r\nimport { SmoTextGroup, SmoScoreText, SmoTextGroupParamsSer } from './scoreText';\r\nimport { SmoSystemStaff, SmoSystemStaffParams, SmoSystemStaffParamsSer } from './systemStaff';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * List of engraving fonts available in Smoosic\r\n */\r\nexport type engravingFontType = 'Bravura' | 'Gonville' | 'Petaluma' | 'Leland';\r\n/**\r\n * Arrary of engraving fonts available in Smoosic\r\n */\r\nexport const engravingFontTypes: engravingFontType[] = ['Bravura', 'Gonville', 'Petaluma', 'Leland'];\r\n\r\nexport function isEngravingFont(et: engravingFontType | string): et is engravingFontType {\r\n return (engravingFontTypes as any[]).indexOf(et) >= 0;\r\n}\r\n\r\n/**\r\n * Constructor parameters. Usually you will call\r\n * {@link SmoScore.defaults}, and modify the parameters you need to change.\r\n * A new score with the defaults will create a single, empty measure.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoScoreParams {\r\n /**\r\n * global font defaults for this score\r\n */\r\n fonts: FontPurpose[],\r\n /**\r\n * identifying information about the score\r\n */\r\n scoreInfo: SmoScoreInfo,\r\n /**\r\n * customized editor behavior\r\n */\r\n preferences: SmoScorePreferences,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */ \r\n staves: SmoSystemStaffParams[],\r\n activeStaff?: number,\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroup[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManager,\r\n /**\r\n * measure-specific formatting\r\n */\r\n formattingManager?: SmoFormattingManager\r\n}\r\n\r\nfunction isSmoScoreParams(params: Partial): params is SmoScoreParams {\r\n if (params.fonts && params.fonts.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Serialization structure for the entire score. Score is deserialized from this\r\n * @category serialization\r\n */\r\nexport interface SmoScoreParamsSer {\r\n /**\r\n * some information about the score, mostly non-musical\r\n */\r\n score: ScoreMetadataSer,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */ \r\n staves: SmoSystemStaffParamsSer[],\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroupParamsSer[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer,\r\n /**\r\n * map of measure formats to measure\r\n */\r\n measureFormats: SmoMeasureFormatParamsSer[],\r\n /**\r\n * tempo, key and other column-mapped parameters\r\n */\r\n columnAttributeMap: ColumnParamsMapType,\r\n /**\r\n * dictionary compression for serialization\r\n */\r\n dictionary: Record\r\n}\r\n\r\n// dont' deserialize trivial text blocks saved by mistake\r\nexport function isEmptyTextBlock(params: Partial): params is SmoTextGroupParamsSer {\r\n if (Array.isArray(params?.textBlocks) || Array.isArray((params as any)?.blocks)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport interface ColumnParamsMapType {\r\n keySignature: Record,\r\n tempo: Record,\r\n timeSignature: Record,\r\n renumberingMap: Record\r\n}\r\n// SmoScoreParemsSer\r\nexport function isSmoScoreParemsSer(params: Partial): params is SmoScoreParamsSer {\r\n if (Array.isArray(params.staves)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Union of modifier types Smo modifier types\r\n */\r\nexport type SmoModifier = SmoNoteModifierBase | SmoMeasureModifierBase | StaffModifierBase | SmoScoreModifierBase;\r\n\r\n/**\r\n * Score is a container of staves, and metadata about the score. Serializing the score serializes the \r\n * child object. It is the highest-level object in Smoosic.\r\n */\r\nexport class SmoScore {\r\n /**\r\n * Map of instruments to staves, used in serialization.\r\n *\r\n * @type {any[]}\r\n * @memberof SmoScore\r\n */\r\n instrumentMap: any[] = [];\r\n /**\r\n * Default fonts in this score, for each type of text (lyrics, etc)\r\n *\r\n * @type {FontPurpose[]}\r\n * @memberof SmoScore\r\n */\r\n fonts: FontPurpose[] = [];\r\n /**\r\n * General info about the score, used for export and library\r\n *\r\n * @type {SmoScoreInfo}\r\n * @memberof SmoScore\r\n */\r\n scoreInfo: SmoScoreInfo = SmoScore.scoreInfoDefaults;\r\n /**\r\n * Default behavior for this score. Indicates some global behavior like whether to advance the cursor.\r\n *\r\n * @type {SmoScorePreferences}\r\n * @memberof SmoScore\r\n */\r\n preferences: SmoScorePreferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n /**\r\n * The staves that make up the music of the score\r\n *\r\n * @type {SmoSystemStaff[]}\r\n * @memberof SmoScore\r\n */\r\n staves: SmoSystemStaff[] = [];\r\n /**\r\n * The active staff, used for some types of selections. Not serialized.\r\n *\r\n * @type {number}\r\n * @memberof SmoScore\r\n */\r\n activeStaff: number = 0;\r\n /**\r\n * Text associated with the score, but not a specific musical element (e.g. lyrics are contains by notes)\r\n *\r\n * @type {SmoTextGroup[]}\r\n * @memberof SmoScore\r\n */\r\n textGroups: SmoTextGroup[] = [];\r\n /**\r\n * A logical grouping of staves for justification\r\n *\r\n * @type {SmoSystemGroup[]}\r\n * @memberof SmoScore\r\n */\r\n systemGroups: SmoSystemGroup[] = [];\r\n /**\r\n * some audio player defaults\r\n *\r\n * @type {SmoAudioPlayerSettings}\r\n * @memberof SmoScore\r\n */\r\n audioSettings: SmoAudioPlayerSettings;\r\n /**\r\n * Preserve a map of measures to their actual measure numbers\r\n *\r\n * @type {Record}\r\n * @memberof SmoScore\r\n */\r\n renumberingMap: Record = {};\r\n /**\r\n * page and rendering layout of the score, including the ppi and scaling of the pages.\r\n *\r\n * @type {SmoLayoutManager}\r\n * @memberof SmoScore\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * per-measure formatting customizations.\r\n *\r\n * @type {SmoFormattingManager}\r\n * @memberof SmoScore\r\n */\r\n formattingManager?: SmoFormattingManager\r\n constructor(params: SmoScoreParams) {\r\n smoSerialize.vexMerge(this, SmoScore.defaults);\r\n smoSerialize.vexMerge(this, params);\r\n if (!this.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n }\r\n if (!this.formattingManager) {\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n if (this.staves.length) {\r\n this.numberStaves();\r\n }\r\n if (typeof (this.preferences.showPiano) === 'undefined') {\r\n this.preferences.showPiano = true;\r\n }\r\n this.audioSettings = new SmoAudioPlayerSettings(params.audioSettings);\r\n this.updateMeasureFormats();\r\n }\r\n static get engravingFonts(): Record {\r\n return { Bravura: 'Bravura', Gonville: 'Gonville', Petaluma: 'Petaluma' };\r\n }\r\n static get fontPurposes(): Record {\r\n return { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 };\r\n }\r\n static get scoreInfoDefaults(): SmoScoreInfo {\r\n return JSON.parse(JSON.stringify({\r\n name: 'Smoosical',\r\n title: 'Smoosical',\r\n subTitle: '(Op. 1)',\r\n composer: 'Me',\r\n copyright: '',\r\n version: 1\r\n }));\r\n }\r\n static get scoreMetadataDefaults(): ScoreMetadataSer {\r\n return JSON.parse(JSON.stringify({\r\n fonts: [],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n renumberingMap: {},\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults)\r\n }));\r\n }\r\n static get defaults(): SmoScoreParams {\r\n return {\r\n // legacy layout structure. Now we use pages.\r\n fonts: [\r\n { name: 'engraving', purpose: SmoScore.fontPurposes.ENGRAVING, family: 'Bravura', size: 1, custom: false },\r\n { name: 'score', purpose: SmoScore.fontPurposes.SCORE, family: 'Merriweather', size: 14, custom: false },\r\n { name: 'chords', purpose: SmoScore.fontPurposes.CHORDS, family: 'Roboto Slab', size: 14, custom: false },\r\n { name: 'lyrics', purpose: SmoScore.fontPurposes.LYRICS, family: 'Merriweather', size: 12, custom: false }\r\n ],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n audioSettings: new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults),\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults),\r\n staves: [],\r\n activeStaff: 0,\r\n textGroups: [],\r\n systemGroups: []\r\n };\r\n }\r\n static get pageSizes(): string[] {\r\n return ['letter', 'tabloid', 'A4', 'A4Landscape', 'custom'];\r\n }\r\n static get pageDimensions(): Record {\r\n return {\r\n 'letter': { width: 8 * 96 + 48, height: 11 * 96 },\r\n 'letterLandscape': { width: 11 * 96, height: 8 * 96 + 48 },\r\n 'tabloid': { width: 1632, height: 1056 },\r\n 'A4': { width: 794, height: 1122 },\r\n 'A4Landscape': { width: 1122, height: 794 },\r\n 'custom': { width: 1, height: 1 }\r\n };\r\n }\r\n static pageSizeFromDimensions(width: number, height: number): string | null {\r\n const rv =\r\n SmoScore.pageSizes.find((sz) => SmoScore.pageDimensions[sz].width === width && SmoScore.pageDimensions[sz].height === height)\r\n ?? null;\r\n return rv;\r\n }\r\n\r\n static get preferences() {\r\n return ['preferences', 'fonts', 'scoreInfo', 'audioSettings'];\r\n }\r\n /**\r\n * serialize the keySignature, tempo and time signature, which are mapped\r\n * to a column at a measure index\r\n * @returns \r\n */\r\n serializeColumnMapped() {\r\n const keySignature: Record = {};\r\n const tempo: Record = {};\r\n const timeSignature: Record = {};\r\n const renumberingMap: Record = {};\r\n let previous: ColumnMappedParams | null = null;\r\n this.staves[0].measures.forEach((measure) => {\r\n const current = measure.serializeColumnMapped();\r\n const ix = measure.measureNumber.measureIndex;\r\n const currentInstrument = this.staves[0].getStaffInstrument(ix);\r\n current.keySignature = SmoMusic.vexKeySigWithOffset(current.keySignature, -1 * currentInstrument.keyOffset);\r\n if (ix === 0) {\r\n keySignature[0] = current.keySignature;\r\n tempo[0] = current.tempo;\r\n timeSignature[0] = current.timeSignature;\r\n renumberingMap[0] = 0;\r\n previous = current;\r\n } else {\r\n if (typeof(this.renumberingMap[measure.measureNumber.measureIndex]) === 'number') {\r\n renumberingMap[measure.measureNumber.measureIndex] = this.renumberingMap[measure.measureNumber.measureIndex];\r\n }\r\n if (current.keySignature !== previous!.keySignature) {\r\n previous!.keySignature = current.keySignature;\r\n keySignature[ix] = current.keySignature;\r\n }\r\n if (!(TimeSignature.equal(current.timeSignature, previous!.timeSignature))) {\r\n previous!.timeSignature = current.timeSignature;\r\n timeSignature[ix] = current.timeSignature;\r\n }\r\n if (!(SmoTempoText.eq(current.tempo, previous!.tempo))) {\r\n previous!.tempo = current.tempo;\r\n tempo[ix] = current.tempo;\r\n }\r\n }\r\n });\r\n return { keySignature, tempo, timeSignature, renumberingMap };\r\n }\r\n\r\n /**\r\n * Column-mapped attributes stay the same in each measure until\r\n * changed, like key-signatures. We don't store each measure value to\r\n * make the files smaller\r\n * @param scoreObj - the json blob that contains the score data\r\n * @returns \r\n */\r\n static deserializeColumnMapped(scoreObj: any) {\r\n let curValue: any;\r\n let mapIx: number = 0;\r\n if (!scoreObj.columnAttributeMap) {\r\n return;\r\n }\r\n const attrs = Object.keys(scoreObj.columnAttributeMap);\r\n scoreObj.staves.forEach((staff: any) => {\r\n const attrIxMap: any = {};\r\n attrs.forEach((attr) => {\r\n attrIxMap[attr] = 0;\r\n });\r\n\r\n staff.measures.forEach((measure: any) => {\r\n attrs.forEach((attr) => {\r\n mapIx = attrIxMap[attr];\r\n const curHash = scoreObj.columnAttributeMap[attr];\r\n const attrKeys: any = Object.keys(curHash);\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n attrKeys.sort((a: string, b: string) => parseInt(a, 10) > parseInt(b, 10) ? 1 : -1);\r\n if (attrKeys.length > mapIx + 1) {\r\n if (measure.measureNumber.measureIndex >= attrKeys[mapIx + 1]) {\r\n mapIx += 1;\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n }\r\n }\r\n // legacy timeSignature format was just a string 2/4, 3/8 etc.\r\n if (attr === 'timeSignature') {\r\n const ts = new TimeSignature(TimeSignature.defaults);\r\n if (typeof (curValue) === 'string') {\r\n ts.timeSignature = curValue;\r\n measure[attr] = ts;\r\n } else {\r\n measure[attr] = TimeSignature.createFromPartial(curValue);\r\n }\r\n } else {\r\n measure[attr] = curValue;\r\n }\r\n attrIxMap[attr] = mapIx;\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Serialize the entire score.\r\n * @returns JSON object\r\n */\r\n serialize(skipStaves?: boolean): SmoScoreParamsSer {\r\n const params: Partial = {};\r\n let obj: Partial = {\r\n layoutManager: { ctor: 'SmoLayoutManager', ...SmoLayoutManager.defaults },\r\n audioSettings: {},\r\n measureFormats: [],\r\n staves: [],\r\n textGroups: [],\r\n systemGroups: [],\r\n score: SmoScore.scoreMetadataDefaults\r\n };\r\n if (this.layoutManager) {\r\n obj.layoutManager = this.layoutManager.serialize();\r\n }\r\n obj.score!.fonts = JSON.parse(JSON.stringify(this.fonts));\r\n obj.score!.renumberingMap = JSON.parse(JSON.stringify(this.renumberingMap));\r\n obj.score!.preferences = this.preferences.serialize();\r\n obj.score!.scoreInfo = JSON.parse(JSON.stringify(this.scoreInfo));\r\n if (this.formattingManager) {\r\n obj.measureFormats = this.formattingManager.serialize();\r\n }\r\n\r\n obj.audioSettings = this.audioSettings.serialize();\r\n if (!skipStaves) {\r\n this.staves.forEach((staff: SmoSystemStaff) => {\r\n obj.staves!.push(staff.serialize());\r\n });\r\n } else {\r\n obj.staves = [];\r\n }\r\n // Score text is not part of text group, so don't save separately.\r\n this.textGroups.forEach((tg) => {\r\n if (tg.isTextVisible()) {\r\n obj.textGroups!.push(tg.serialize());\r\n }\r\n });\r\n this.systemGroups.forEach((gg) => {\r\n obj.systemGroups!.push(gg.serialize());\r\n });\r\n obj.columnAttributeMap = this.serializeColumnMapped();\r\n smoSerialize.jsonTokens(obj);\r\n obj = smoSerialize.detokenize(obj, smoSerialize.tokenValues);\r\n obj.dictionary = smoSerialize.tokenMap;\r\n return obj as SmoScoreParamsSer;\r\n }\r\n updateScorePreferences(pref: SmoScorePreferences) {\r\n this.preferences = pref;\r\n SmoMeasure.defaultDupleDuration = pref.defaultDupleDuration;\r\n SmoMeasure.defaultTripleDuration = pref.defaultTripleDuration;\r\n }\r\n get engravingFont(): engravingFontType {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont) {\r\n const val: engravingFontType | undefined = engravingFontTypes.find((x) => x === efont.family);\r\n if (val) {\r\n return val;\r\n }\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: engravingFontType) {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont && isEngravingFont(value)) {\r\n efont.family = value;\r\n }\r\n }\r\n static upConvertGlobalLayout(jsonObj: any) {\r\n // upconvert global layout, which used to be directly on layoutManager\r\n if (typeof (jsonObj.layoutManager.globalLayout) === 'undefined') {\r\n jsonObj.layoutManager.globalLayout = {\r\n svgScale: jsonObj.layoutManager.svgScale,\r\n zoomScale: jsonObj.layoutManager.zoomScale,\r\n pageWidth: jsonObj.layoutManager.pageWidth,\r\n pageHeight: jsonObj.layoutManager.pageHeight,\r\n noteSpacing: jsonObj.layoutManager.noteSpacing\r\n };\r\n if (!jsonObj.layoutManager.globalLayout.noteSpacing) {\r\n jsonObj.layoutManager.globalLayout.noteSpacing = 1.0;\r\n }\r\n }\r\n }\r\n /**\r\n * Convert legacy score layout to layoutManager object parameters\r\n * @param jsonObj \r\n */\r\n static upConvertLayout(jsonObj: any) {\r\n let i = 0;\r\n jsonObj.layoutManager = {};\r\n SmoLayoutManager.attributes.forEach((attr) => {\r\n jsonObj.layoutManager[attr] = jsonObj.score.layout[attr];\r\n });\r\n jsonObj.layoutManager.pageLayouts = [];\r\n for (i = 0; i < jsonObj.score.layout.pages; ++i) {\r\n const pageSetting = JSON.parse(JSON.stringify(SmoPageLayout.defaults));\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (jsonObj.score.layout[attr]) !== 'undefined') {\r\n pageSetting[attr] = jsonObj.score.layout[attr];\r\n }\r\n });\r\n jsonObj.layoutManager.pageLayouts.push(pageSetting);\r\n }\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n\r\n /**\r\n * Hack: for the case of a score containing only a single part, use the text from the \r\n * part.\r\n * @param jsonObj \r\n * @returns \r\n */\r\n static fixTextGroupSinglePart(jsonObj: any) {\r\n if (jsonObj.staves.length !== 1) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo.textGroups || jsonObj.staves[0].partInfo.textGroups.length < 1) {\r\n return;\r\n }\r\n jsonObj.textGroups = JSON.parse(JSON.stringify(jsonObj.staves[0].partInfo.textGroups));\r\n }\r\n /**\r\n * Deserialize an entire score\r\n * @param jsonString \r\n * @returns SmoScore\r\n */\r\n static deserialize(jsonString: string): SmoScore {\r\n let jsonObj: Partial = JSON.parse(jsonString);\r\n let upconvertFormat = false;\r\n let formattingManager = null;\r\n if (jsonObj.dictionary) {\r\n jsonObj = smoSerialize.detokenize(jsonObj, jsonObj.dictionary);\r\n }\r\n SmoScore.fixTextGroupSinglePart(jsonObj);\r\n upconvertFormat = typeof (jsonObj.measureFormats) === 'undefined';\r\n const params: Partial = {};\r\n const staves: SmoSystemStaff[] = [];\r\n jsonObj.textGroups = jsonObj.textGroups ? jsonObj.textGroups : [];\r\n\r\n // Explode the sparse arrays of attributes into the measures\r\n SmoScore.deserializeColumnMapped(jsonObj);\r\n // meaning of customProportion has changed, backwards-compatiblity\r\n if (typeof(jsonObj.score) === 'undefined') {\r\n throw 'bad score ' + JSON.stringify(jsonObj);\r\n }\r\n // upconvert old proportion operator\r\n const jsonPropUp = jsonObj.score.preferences as any;\r\n if (typeof (jsonPropUp) !== 'undefined' && typeof (jsonPropUp.customProportion) === 'number') {\r\n SmoMeasureFormat.defaults.proportionality = jsonPropUp.customProportion;\r\n if (SmoMeasureFormat.defaults.proportionality === SmoMeasureFormat.legacyProportionality) {\r\n SmoMeasureFormat.defaults.proportionality = SmoMeasureFormat.defaultProportionality;\r\n }\r\n }\r\n // up-convert legacy layout data\r\n if ((jsonObj.score as any).layout) {\r\n SmoScore.upConvertLayout(jsonObj);\r\n }\r\n if (jsonObj.layoutManager && !jsonObj.layoutManager.globalLayout) {\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n if (!jsonObj.layoutManager) {\r\n throw 'bad score, layout mgr ' + JSON.stringify(jsonObj);\r\n }\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n const layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n\r\n\r\n // params.layout = JSON.parse(JSON.stringify(SmoScore.defaults.layout));\r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n SmoScore.scoreMetadataDefaults, params); \r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n jsonObj.score, params);\r\n if (jsonObj.score.preferences) {\r\n params.preferences = new SmoScorePreferences(jsonObj.score.preferences);\r\n } else {\r\n params.preferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n }\r\n if (jsonObj.score.scoreInfo) {\r\n const scoreInfo: Partial = {};\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, SmoScore.scoreInfoDefaults, scoreInfo);\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, jsonObj.score.scoreInfo, scoreInfo);\r\n params.scoreInfo = (scoreInfo as SmoScoreInfo);\r\n } else {\r\n params.scoreInfo = SmoScore.scoreInfoDefaults;\r\n }\r\n if (!jsonObj.audioSettings) {\r\n params.audioSettings = new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults);\r\n } else {\r\n params.audioSettings = SmoScoreModifierBase.deserialize(jsonObj.audioSettings);\r\n }\r\n params.preferences.transposingScore = params.preferences.transposingScore ?? false;\r\n params.preferences.hideEmptyLines = params.preferences.hideEmptyLines ?? false;\r\n let renumberingMap: Record = { 0: 0 };\r\n if (jsonObj.columnAttributeMap && jsonObj.columnAttributeMap.renumberingMap) {\r\n renumberingMap = jsonObj.columnAttributeMap.renumberingMap;\r\n }\r\n if (!jsonObj.staves) {\r\n throw 'bad score, no staves: ' + JSON.stringify(jsonObj);\r\n }\r\n jsonObj.staves.forEach((staffObj: any, staffIx: number) => {\r\n staffObj.staffId = staffIx;\r\n staffObj.renumberingMap = renumberingMap;\r\n const staff = SmoSystemStaff.deserialize(staffObj);\r\n staves.push(staff);\r\n });\r\n\r\n const textGroups: SmoTextGroup[] = [];\r\n jsonObj.textGroups.forEach((tg: any) => {\r\n if (!isEmptyTextBlock(tg)) {\r\n textGroups.push(SmoTextGroup.deserializePreserveId(tg));\r\n }\r\n });\r\n\r\n const systemGroups: SmoSystemGroup[] = [];\r\n if (jsonObj.systemGroups) {\r\n jsonObj.systemGroups.forEach((tt: any) => {\r\n var st = SmoScoreModifierBase.deserialize(tt);\r\n st.autoLayout = false; // since this has been layed out, presumably, before save\r\n systemGroups.push(st);\r\n });\r\n }\r\n params.staves = staves;\r\n if (upconvertFormat) {\r\n formattingManager = SmoScore.measureFormatFromLegacyScore(params as any, jsonObj);\r\n } else {\r\n const measureParams: SmoFormattingManagerParams = {\r\n measureFormats: [],\r\n partIndex: -1\r\n }\r\n if (jsonObj.measureFormats) {\r\n jsonObj.measureFormats.forEach((mf: SmoMeasureFormatParamsSer) => {\r\n const mfObj = new SmoMeasureFormat(mf);\r\n measureParams.measureFormats?.push(mfObj);\r\n });\r\n }\r\n params.formattingManager = new SmoFormattingManager(measureParams);\r\n }\r\n params.layoutManager = layoutManager;\r\n if (!isSmoScoreParams(params)) {\r\n throw 'Bad score, missing params: ' + JSON.stringify(params, null, ' ');\r\n }\r\n const score = new SmoScore(params);\r\n score.textGroups = textGroups;\r\n score.systemGroups = systemGroups;\r\n score.scoreInfo.version += 1;\r\n return score;\r\n }\r\n /**\r\n * Convert measure formatting from legacy scores, that had the formatting\r\n * per measure, to the new way that has a separate formatting object.\r\n * **/\r\n static measureFormatFromLegacyScore(score: SmoScore, jsonObj: any): SmoFormattingManager | null {\r\n let current: SmoMeasureFormat | null = null;\r\n let previous: SmoMeasureFormat | null = null;\r\n const measureFormats: SmoMeasureFormat[] = [];\r\n score.staves[0].measures.forEach((measure: SmoMeasure) => {\r\n if (current === null) {\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n } else {\r\n previous = current;\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n if (!current.eq(previous)) {\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n }\r\n }\r\n });\r\n return new SmoFormattingManager({ measureFormats });\r\n }\r\n\r\n /**\r\n * Return a default score with no notes or staves\r\n * @param scoreDefaults \r\n * @param measureDefaults \r\n * @returns \r\n */\r\n static getDefaultScore(scoreDefaults: SmoScoreParams, measureDefaults: SmoMeasureParams | null) {\r\n measureDefaults = measureDefaults !== null ? measureDefaults : SmoMeasure.defaults;\r\n const score = new SmoScore(scoreDefaults);\r\n score.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n const measure: SmoMeasure = SmoMeasure.getDefaultMeasure(measureDefaults as SmoMeasureParams);\r\n score.addMeasure(0);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(measureDefaults as SmoMeasureParams)\r\n });\r\n return score;\r\n }\r\n\r\n /**\r\n * Return an 'empty' score, with one measure of rests\r\n * @param scoreDefaults \r\n * @returns \r\n */\r\n static getEmptyScore(scoreDefaults: SmoScoreParams) {\r\n const score = new SmoScore(scoreDefaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n return score;\r\n }\r\n /**\r\n * We have deleted a measure, update the renumber index to\r\n * shuffle back.\r\n * @param indexToDelete \r\n */\r\n updateRenumberForAddDelete(indexToDelete: number, toAdd: boolean) {\r\n if (!toAdd && indexToDelete === 0) {\r\n return;\r\n }\r\n const maxIndex = this.staves[0].measures.length - 1;\r\n const increment = toAdd ? 1 : -1;\r\n for (var i = indexToDelete; i < maxIndex; ++i) {\r\n if (typeof(this.renumberingMap[i]) === 'number') {\r\n this.renumberingMap[i] = this.renumberingMap[i] + increment;\r\n }\r\n }\r\n if (typeof(this.renumberingMap[maxIndex]) === 'number' && !toAdd) {\r\n delete this.renumberingMap[maxIndex];\r\n }\r\n }\r\n\r\n updateRenumberingMap(measureIndex: number, localIndex: number) {\r\n if (measureIndex === 0) {\r\n this.renumberingMap[0] = localIndex;\r\n } else if (typeof(this.renumberingMap[measureIndex]) === 'number') {\r\n if (measureIndex === localIndex) {\r\n delete this.renumberingMap[measureIndex];\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n this.staves.forEach((staff) => {\r\n staff.renumberingMap = this.renumberingMap;\r\n });\r\n this.numberStaves();\r\n }\r\n /**\r\n * Iteratively number the staves, like when adding a measure\r\n */\r\n numberStaves() {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const stave = this.staves[i];\r\n stave.staffId = i;\r\n stave.numberMeasures();\r\n }\r\n }\r\n\r\n /**\r\n * determine if the measure at this index could be a multi-measure rest\r\n * @param measureIndex - the measure index we are considering to add\r\n * @param start - the measure index would be the start of the rest \r\n * @returns \r\n */\r\n isMultimeasureRest(measureIndex: number, start: boolean, forceRest: boolean) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (!forceRest && !this.staves[i].isRest(measureIndex)) {\r\n return false;\r\n }\r\n if (this.staves[i].getVoltasForMeasure(measureIndex).length > 0) {\r\n return false;\r\n }\r\n if (this.staves[i].isRepeatSymbol(measureIndex)) {\r\n return false;\r\n }\r\n if (!start && measureIndex > 0 && this.staves[i].isRepeat(measureIndex - 1)) {\r\n return false;\r\n }\r\n if (this.staves[i].isRehearsal(measureIndex)) {\r\n return false;\r\n }\r\n // instrument change other than the initial measure\r\n if (this.staves[i].measureInstrumentMap[measureIndex] && i > 0) {\r\n return false;\r\n }\r\n }\r\n if (measureIndex > 0) {\r\n const measure = this.staves[0].measures[measureIndex];\r\n const prev = this.staves[0].measures[measureIndex - 1];\r\n if (!start && !TimeSignature.equal(measure.timeSignature, prev.timeSignature)) {\r\n return false;\r\n }\r\n if (!start && measure.keySignature !== prev.keySignature) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Restore measure formats stored when a score is serialized\r\n */\r\n updateMeasureFormats() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n (this.formattingManager as SmoFormattingManager).updateFormat(measure);\r\n });\r\n });\r\n }\r\n /**\r\n * Add a measure to the score with the supplied parameters at the supplied index.\r\n * The defaults per staff may be different depending on the clef, key of the staff.\r\n */\r\n addDefaultMeasureWithNotes(measureIndex: number, parameters: SmoMeasureParams) {\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.staves.forEach((staff) => {\r\n const defaultMeasure =\r\n SmoMeasure.getDefaultMeasureWithNotes(parameters);\r\n staff.addMeasure(measureIndex, defaultMeasure);\r\n });\r\n }\r\n getLocalMeasureIndex(measureIndex: number) {\r\n let maxKey = -1;\r\n const keys = Object.keys(this.updateRenumberForAddDelete);\r\n keys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n if (numKey <= measureIndex && numKey > maxKey) {\r\n maxKey = numKey;\r\n }\r\n });\r\n if (maxKey < 0) {\r\n return measureIndex;\r\n }\r\n return this.renumberingMap[maxKey] + (measureIndex - maxKey);\r\n }\r\n\r\n /**\r\n * delete the measure at the supplied index in all the staves\r\n */\r\n deleteMeasure(measureIndex: number) {\r\n this.staves.forEach((staff) => {\r\n staff.deleteMeasure(measureIndex);\r\n });\r\n // adjust offset if text was attached to any missing measures after the deleted one.\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (tg.attachToSelector && (tg.selector as SmoSelector).measure >= measureIndex && (tg.selector as SmoSelector).measure > 0) {\r\n (tg.selector as SmoSelector).measure -= 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, false);\r\n }\r\n /**\r\n * get a measure 'compatible' with the measure at the given index, in terms\r\n * of key, time signature etc.\r\n * @param measureIndex \r\n * @param staffIndex \r\n * @returns \r\n */\r\n getPrototypeMeasure(measureIndex: number, staffIndex: number) {\r\n const staff = this.staves[staffIndex];\r\n let protomeasure: SmoMeasureParams = {} as SmoMeasureParams;\r\n\r\n // Since this staff may already have instrument settings, use the\r\n // immediately preceeding or post-ceding measure if it exists.\r\n if (measureIndex < staff.measures.length) {\r\n protomeasure = staff.measures[measureIndex];\r\n } else if (staff.measures.length) {\r\n protomeasure = staff.measures[staff.measures.length - 1];\r\n } else {\r\n protomeasure = SmoMeasure.defaults;\r\n }\r\n return SmoMeasure.getDefaultMeasureWithNotes(protomeasure);\r\n }\r\n\r\n /**\r\n * Give a measure prototype, create a new measure and add it to each staff, with the\r\n * correct settings for current time signature/clef.\r\n * @param measureIndex \r\n */\r\n addMeasure(measureIndex: number) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const staff = this.staves[i];\r\n const nmeasure = this.getPrototypeMeasure(measureIndex, i);\r\n if (nmeasure.voices.length <= nmeasure.getActiveVoice()) {\r\n nmeasure.setActiveVoice(0);\r\n }\r\n staff.addMeasure(measureIndex, nmeasure);\r\n }\r\n // Update offsets for score modifiers that have a selector\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (typeof (tg.selector) === 'undefined') {\r\n return;\r\n }\r\n if (tg.attachToSelector && tg.selector.measure >= measureIndex && tg.selector.measure < this.staves[0].measures.length) {\r\n tg.selector.measure += 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.numberStaves();\r\n }\r\n\r\n /**\r\n * Replace the measure at the given location. Probably due to an undo operation or paste.\r\n * @param selector \r\n * @param measure \r\n */\r\n replaceMeasure(selector: SmoSelector, measure: SmoMeasure) {\r\n var staff = this.staves[selector.staff];\r\n staff.measures[selector.measure] = measure;\r\n }\r\n\r\n getSystemGroupForStaff(selection: SmoSelection) {\r\n const staffId: number = selection.staff.staffId;\r\n const measureIndex: number = selection.measure.measureNumber.measureIndex;\r\n const exist = this.systemGroups.find((sg: SmoSystemGroup) =>\r\n sg.startSelector.staff <= staffId &&\r\n sg.endSelector.staff >= staffId &&\r\n (sg.mapType === SmoSystemGroup.mapTypes.allMeasures ||\r\n (sg.startSelector.measure <= measureIndex &&\r\n sg.endSelector.measure >= measureIndex))\r\n );\r\n return exist;\r\n }\r\n\r\n getStavesForGroup(group: SmoSystemGroup) {\r\n return this.staves.filter((staff) => staff.staffId >= group.startSelector.staff &&\r\n staff.staffId <= group.endSelector.staff);\r\n }\r\n\r\n // ### addOrReplaceSystemGroup\r\n // Add a new staff grouping, or replace it if it overlaps and is different, or\r\n // remove it if it is identical (toggle)\r\n addOrReplaceSystemGroup(newGroup: SmoSystemGroup) {\r\n // Replace this group for any groups that overlap it.\r\n this.systemGroups = this.systemGroups.filter((sg) => !sg.overlaps(newGroup));\r\n this.systemGroups.push(newGroup);\r\n }\r\n\r\n isPartExposed(): boolean {\r\n if (this.staves.length > 2) {\r\n return false;\r\n }\r\n const staff = this.staves[0];\r\n const staveCount = staff.partInfo.stavesAfter + staff.partInfo.stavesBefore + 1;\r\n return staveCount === this.staves.length\r\n && staff.partInfo.stavesBefore === 0;\r\n }\r\n\r\n /**\r\n * Probably due to an undo operation, replace the staff at the given index.\r\n * @param index \r\n * @param staff \r\n */\r\n replaceStaff(index: number, staff: SmoSystemStaff) {\r\n const staves = [];\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (i !== index) {\r\n staves.push(this.staves[i]);\r\n } else {\r\n staves.push(staff);\r\n }\r\n }\r\n this.staves = staves;\r\n }\r\n /**\r\n * \r\n * @param measureIndex \r\n * @param key \r\n */\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.staves.forEach((staff) => {\r\n // Consider transpose for key of instrument\r\n const netOffset = staff.measures[measureIndex].transposeIndex;\r\n const newKey = SmoMusic.vexKeySigWithOffset(key, netOffset);\r\n staff.addKeySignature(measureIndex, newKey);\r\n });\r\n }\r\n\r\n /**\r\n * If the part is a transposing part, remove the transposition from the notes/staff. This logic\r\n * assumes the measures previously had transposeIndex set up by the instrument map.\r\n */\r\n setTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n if (mm.transposeIndex !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, -1 * mm.transposeIndex);\r\n mm.transposeToOffset(0, concert);\r\n mm.transposeIndex = 0;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * If the score is switching from transposing to non-transposing, update the index\r\n * and pitches. This logic assumes we are changing from transposing to non-transposing.\r\n */\r\n setNonTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n const inst = staff.getStaffInstrument(mm.measureNumber.measureIndex);\r\n if (inst.keyOffset !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, inst.keyOffset);\r\n mm.transposeToOffset(inst.keyOffset, concert);\r\n mm.transposeIndex = inst.keyOffset;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ### addInstrument\r\n // add a new staff (instrument) to the score\r\n addStaff(parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n let i = 0;\r\n if (this.staves.length === 0) {\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = 0;\r\n // For part views, we renumber the staves even if there is only one staff.\r\n if (staff.measures.length) {\r\n this.numberStaves();\r\n }\r\n return staff;\r\n }\r\n if (!parameters) {\r\n parameters = SmoSystemStaff.defaults;\r\n }\r\n const proto = this.staves[0];\r\n const measures = [];\r\n for (i = 0; i < proto.measures.length; ++i) {\r\n const measure: SmoMeasure = proto.measures[i];\r\n const jsonObj: SmoMeasureParamsSer = measure.serialize();\r\n // Need to do this since score serialization doesn't include TS in each measure\r\n jsonObj.timeSignature = measure.timeSignature.serialize();\r\n jsonObj.tempo = measure.tempo.serialize();\r\n let newMeasure = SmoMeasure.deserialize(jsonObj);\r\n newMeasure.measureNumber = measure.measureNumber;\r\n newMeasure.clef = parameters.measureInstrumentMap[0].clef as Clef;\r\n newMeasure.modifiers = [];\r\n newMeasure.transposeIndex = 0;\r\n // Consider key change if the proto measure is non-concert pitch\r\n newMeasure.keySignature =\r\n SmoMusic.vexKeySigWithOffset(newMeasure.keySignature,\r\n newMeasure.transposeIndex - measure.transposeIndex);\r\n newMeasure.voices = [{ notes: SmoMeasure.getDefaultNotes(newMeasure) }];\r\n measure.modifiers.forEach((modifier) => {\r\n const nmod: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modifier);\r\n newMeasure.modifiers.push(nmod);\r\n });\r\n measures.push(newMeasure);\r\n }\r\n parameters.measures = measures;\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = this.staves.length - 1;\r\n this.numberStaves();\r\n return staff;\r\n }\r\n\r\n // ### removeStaff\r\n // Remove stave at the given index\r\n removeStaff(index: number) {\r\n const staves: SmoSystemStaff[] = [];\r\n let ix = 0;\r\n this.staves.forEach((staff) => {\r\n if (ix !== index) {\r\n staves.push(staff);\r\n }\r\n ix += 1;\r\n });\r\n this.staves = staves;\r\n this.numberStaves();\r\n }\r\n getStaffInstrument(selector: SmoSelector): SmoInstrument {\r\n const staff: SmoSystemStaff = this.staves[selector.staff];\r\n return staff.getStaffInstrument(selector.measure);\r\n }\r\n\r\n swapStaves(index1: number, index2: number): void {\r\n if (this.staves.length < index1 || this.staves.length < index2) {\r\n return;\r\n }\r\n const tmpStaff = this.staves[index1];\r\n this.staves[index1] = this.staves[index2];\r\n this.staves[index2] = tmpStaff;\r\n this.staves.forEach((staff) => {\r\n staff.mapStaffFromTo(index1, index2);\r\n staff.mapStaffFromTo(index2, index1);\r\n });\r\n this.numberStaves();\r\n }\r\n\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n addTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, true);\r\n }\r\n getTextGroups() {\r\n return this.textGroups;\r\n }\r\n scaleTextGroups(scale: number) {\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n tg.scaleText(scale);\r\n });\r\n }\r\n\r\n removeTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, false);\r\n }\r\n\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n // ### setLyricFont\r\n // set the font for lyrics, which are the same for all lyrics in the score\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricFont(fontInfo);\r\n });\r\n const fontInst: FontPurpose | undefined = this.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.LYRICS);\r\n if (typeof (fontInst) === 'undefined') {\r\n return;\r\n }\r\n fontInst.family = fontInfo.family ?? '';\r\n fontInst.size = parseInt(SmoScoreText.fontPointSize(fontInfo.size).toString());\r\n fontInst.custom = true;\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordFont(fontInfo);\r\n });\r\n }\r\n\r\n get measures() {\r\n if (this.staves.length === 0) {\r\n return [];\r\n }\r\n return this.staves[this.activeStaff].measures;\r\n }\r\n incrementActiveStaff(offset: number) {\r\n if (offset < 0) {\r\n offset = offset + this.staves.length;\r\n }\r\n const nextStaff = (this.activeStaff + offset) % this.staves.length;\r\n if (nextStaff >= 0 && nextStaff < this.staves.length) {\r\n this.activeStaff = nextStaff;\r\n }\r\n return this.activeStaff;\r\n }\r\n\r\n setActiveStaff(index: number) {\r\n this.activeStaff = index <= this.staves.length ? index : this.activeStaff;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A score modifier is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, layout information\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer } from './measureModifiers';\r\nimport { SmoAttrs, getId, SmoModifierBase, SvgBox } from './common';\r\nimport { SmoMeasure } from './measure';\r\nimport { SmoSelector } from '../xform/selections';\r\n\r\n/**\r\n * Base class for all {@link SmoScore} modifiers. \r\n * It is used to de/serialize the objects.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoScoreModifierBase implements SmoModifierBase {\r\n /**\r\n * constructor\r\n *\r\n * @type {string}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n ctor: string;\r\n /**\r\n * When rendered, keep track of the box\r\n *\r\n * @type {(SvgBox | null)}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n logicalBox: SvgBox | null = null;\r\n /**\r\n * attributes for identification\r\n *\r\n * @type {SmoAttrs}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n attrs: SmoAttrs;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n abstract serialize(): any;\r\n static deserialize(jsonObj: any) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * For global/default font settings.\r\n * @param name to distinguish: chord, lyric etc.\r\n * @param family font family\r\n * @param size in points\r\n * @param custom used to distinguish a specific text is not the default\r\n */\r\nexport interface FontPurpose {\r\n /**\r\n * name of the purpose\r\n * { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 }\r\n */\r\n name: string,\r\n /**\r\n * purpose enumeration\r\n */\r\n purpose: number,\r\n /**\r\n * font family\r\n */\r\n family: string,\r\n /**\r\n * default font size\r\n */\r\n size: number,\r\n /**\r\n * a flag that can be used to indicate if this is the global default, or a customization.\r\n * For lyrics for instance, most lyrics would use the custom font, this would be true if\r\n * it was overridden\r\n */\r\n custom: boolean\r\n}\r\n\r\n\r\n// @internal\r\nexport type SmoScoreInfoKey = 'name' | 'title' | 'subTitle' | 'composer' | 'copyright';\r\nexport const SmoScoreInfoKeys = ['name', 'title', 'subTitle', 'composer', 'copyright'];\r\n/**\r\n * Information about the score itself, like composer etc.\r\n * @category SmoModifier\r\n */\r\nexport interface SmoScoreInfo {\r\n /**\r\n * deprecated, now defaults to title\r\n */\r\n name: string,\r\n /**\r\n * name of score\r\n */\r\n title: string,\r\n /**\r\n * subtitle/opus\r\n */\r\n subTitle: string,\r\n /**\r\n * who wrote it\r\n */\r\n composer: string,\r\n /**\r\n * copyright information\r\n */\r\n copyright: string,\r\n /**\r\n * for version tracking\r\n */\r\n version: number\r\n}\r\n\r\n\r\nexport type SmoScorePreferenceBool = 'autoPlay' | 'autoAdvance' | 'showPiano' | 'hideEmptyLines' | 'transposingScore';\r\nexport type SmoScorePreferenceNumber = 'defaultDupleDuration' | 'defaultTripleDuration';\r\nexport const SmoScorePreferenceBools: SmoScorePreferenceBool[] = ['autoPlay', 'autoAdvance', 'showPiano', 'hideEmptyLines', 'transposingScore'];\r\nexport const SmoScorePreferenceNumbers: SmoScorePreferenceNumber[] = ['defaultDupleDuration', 'defaultTripleDuration'];\r\n/**\r\n * Global score/program behavior preferences, see below for parameters\r\n */\r\nexport interface SmoScorePreferencesParams {\r\n autoPlay: boolean;\r\n autoAdvance: boolean;\r\n defaultDupleDuration: number;\r\n defaultTripleDuration: number;\r\n showPiano: boolean;\r\n hideEmptyLines: boolean;\r\n transposingScore: boolean;\r\n}\r\n/**\r\n * Some default SMO behavior\r\n * @param autoPlay play a new note or chord\r\n * @param autoAdvance Sibelius-like behavior of advancing cursor when a letter note is placed\r\n * @param defaultDupleDuration in ticks, even metered measures\r\n * @param defaultTripleDuration in ticks, 6/8 etc.\r\n * @param showPiano show the piano widget in the score\r\n * @param hideEmptyLines Hide empty lines in full score\r\n * @param transposingScore Whether to show the score parts in concert key\r\n * @category SmoModifier\r\n */\r\nexport class SmoScorePreferences {\r\n autoPlay: boolean = true;\r\n autoAdvance: boolean = true;\r\n defaultDupleDuration: number = 4096;\r\n defaultTripleDuration: number = 6144;\r\n showPiano: boolean = true;\r\n hideEmptyLines: boolean = false;\r\n transposingScore: boolean = false;\r\n static get defaults(): SmoScorePreferencesParams {\r\n return {\r\n autoPlay: true,\r\n autoAdvance: true,\r\n defaultDupleDuration: 4096,\r\n defaultTripleDuration: 6144,\r\n showPiano: true,\r\n hideEmptyLines: false,\r\n transposingScore: false\r\n };\r\n }\r\n constructor(params: SmoScorePreferencesParams) {\r\n if (params) {\r\n SmoScorePreferenceBools.forEach((bb) => {\r\n this[bb] = params[bb];\r\n });\r\n SmoScorePreferenceNumbers.forEach((nn) => {\r\n this[nn] = params[nn];\r\n });\r\n }\r\n }\r\n serialize(): SmoScorePreferencesParams {\r\n return {\r\n ...this\r\n }\r\n }\r\n}\r\n/**\r\n * non-musical information about the score\r\n */\r\nexport interface ScoreMetadataSer {\r\n fonts: FontPurpose[],\r\n preferences: SmoScorePreferencesParams,\r\n renumberingMap: Record,\r\n scoreInfo: SmoScoreInfo\r\n}\r\n\r\n/**\r\n * Map of measure formatting to measure IDs. We only save non-default formats\r\n * @param measureFormats \r\n * @param partIndex \r\n */\r\nexport interface SmoFormattingManagerParams {\r\n /**\r\n * map of index to {@link SmoMeasureFormat} objects\r\n */\r\n measureFormats?: SmoMeasureFormat[],\r\n /**\r\n * the associated part, or -1 for the score\r\n */\r\n partIndex?: number\r\n}\r\n/**\r\n * A score can have different views - one for the score itself and one for each\r\n * part, and each part can have its own formatting and text.\r\n * *Note*: I may move this to part info module.\r\n * @param measureFormats map of index to {@link SmoMeasureFormat} objects\r\n * @param partIndex the associated part, or -1 for the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoFormattingManager extends SmoScoreModifierBase {\r\n measureFormats: Record;\r\n partIndex: number = -1;\r\n static get forScore() {\r\n return -1;\r\n }\r\n static get defaults(): SmoFormattingManagerParams {\r\n return {\r\n measureFormats: [new SmoMeasureFormat(SmoMeasureFormat.defaults)],\r\n partIndex: -1\r\n };\r\n }\r\n\r\n constructor(params: SmoFormattingManagerParams) {\r\n super('SmoFormattingManager');\r\n if (typeof (params) === 'undefined') {\r\n params = {};\r\n }\r\n this.measureFormats = {};\r\n this.partIndex = SmoFormattingManager.forScore;\r\n if (typeof (params.partIndex) !== 'undefined') {\r\n this.partIndex = params.partIndex;\r\n }\r\n if (typeof (params.measureFormats) !== 'undefined' && params.measureFormats.length) {\r\n params.measureFormats.forEach((format) => {\r\n // 0 is default value, so fix case of first measure\r\n if (typeof(format.measureIndex) !== 'number') {\r\n format.measureIndex = 0;\r\n }\r\n this.measureFormats[format.measureIndex] = new SmoMeasureFormat(format);\r\n });\r\n }\r\n }\r\n /**\r\n * Update the measure format for the measure at the given index\r\n * @param format \r\n */\r\n updateMeasureFormat(format: SmoMeasureFormat) {\r\n this.measureFormats[format.measureIndex] = format;\r\n }\r\n /**\r\n * Update the measure format based on the format of a given measure\r\n * @param measure \r\n */\r\n updateFormat(measure: SmoMeasure) {\r\n if (this.measureFormats[measure.measureNumber.measureIndex]) {\r\n measure.format = this.measureFormats[measure.measureNumber.measureIndex];\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n }\r\n serialize(): SmoMeasureFormatParamsSer[] {\r\n const rv: SmoMeasureFormatParamsSer[] = [];\r\n const keys = Object.keys(this.measureFormats);\r\n keys.forEach((key: any) => {\r\n if (!this.measureFormats[key].isDefault) {\r\n rv.push(this.measureFormats[key].serialize());\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport type SmoAudioPlayerType = 'sampler' | 'synthesizer';\r\n/**\r\n * Constructor parameters for audio player\r\n */\r\nexport interface SmoAudioPlayerParameters {\r\n playerType?: SmoAudioPlayerType,\r\n waveform?: OscillatorType,\r\n reverbEnable?: boolean,\r\n reverbDelay?: number,\r\n reverbDecay?: number\r\n}\r\n\r\n/**\r\n * web audio API defines this\r\n * @param otype \r\n * @returns \r\n */\r\nexport function IsOscillatorType(otype: OscillatorType | string): otype is OscillatorType {\r\n return ['sine', 'square', 'sawtooth', 'triangle', 'custom'].findIndex((x) => x === otype) >= 0;\r\n}\r\n/**\r\n * Audio playback parameters. Just fun stuff.\r\n * @category SmoModifier\r\n */\r\nexport class SmoAudioPlayerSettings extends SmoScoreModifierBase {\r\n static get defaults(): SmoAudioPlayerParameters {\r\n return ({\r\n playerType: 'sampler',\r\n waveform: 'sine',\r\n reverbEnable: true,\r\n reverbDelay: 0.5,\r\n reverbDecay: 2\r\n });\r\n }\r\n static get attributes() {\r\n return ['playerType', 'waveform', 'reverbEnable', 'reverbDelay', 'reverbDecay'];\r\n }\r\n\r\n playerType: SmoAudioPlayerType = 'sampler';\r\n waveform: OscillatorType = 'sine';\r\n reverbEnable: boolean = true;\r\n reverbDelay: number = 0.2;\r\n reverbDecay: number = 0.5;\r\n constructor(params: SmoAudioPlayerParameters) {\r\n super('SmoAudioPlayerSettings');\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, SmoAudioPlayerSettings.defaults, this);\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, params, this);\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoAudioPlayerSettings.defaults, SmoAudioPlayerSettings.attributes, this, params);\r\n params.ctor = 'SmoAudioPlayerSettings';\r\n return params;\r\n }\r\n}\r\nexport type ScaledPageAttributes = 'leftMargin' | 'rightMargin' | 'topMargin' | 'bottomMargin' | 'interGap' | 'intraGap';\r\n/**\r\n * Constructor parameters for {@link SmoPageLayout}, part of {@link SmoLayoutManager}\r\n * @category SmoParameters, serialization\r\n */\r\nexport interface SmoPageLayoutParams {\r\n leftMargin: number,\r\n rightMargin: number,\r\n topMargin: number,\r\n bottomMargin: number,\r\n interGap: number,\r\n intraGap: number\r\n}\r\nexport interface SmoPageLayoutParamsSer {\r\n\r\n}\r\n/**\r\n * Define margins and other layout information associated with a specific page, and may\r\n * be different on different pages.\r\n * @category SmoModifier\r\n */\r\nexport class SmoPageLayout extends SmoScoreModifierBase {\r\n static get defaults(): SmoPageLayoutParams {\r\n return JSON.parse(JSON.stringify({\r\n leftMargin: 30,\r\n rightMargin: 30,\r\n topMargin: 144,\r\n bottomMargin: 72,\r\n interGap: 30,\r\n intraGap: 10\r\n }));\r\n }\r\n static get attributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n leftMargin: number = 30;\r\n rightMargin: number = 30;\r\n topMargin: number = 40;\r\n bottomMargin: number = 40;\r\n interGap: number = 30;\r\n intraGap: number = 10;\r\n constructor(params: SmoPageLayoutParams) {\r\n super('SmoPageLayout');\r\n this.leftMargin = params.leftMargin;\r\n this.rightMargin = params.rightMargin;\r\n this.topMargin = params.topMargin;\r\n this.bottomMargin = params.bottomMargin;\r\n this.interGap = params.interGap;\r\n this.intraGap = params.intraGap;\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoPageLayout.defaults, SmoPageLayout.attributes, this, params);\r\n params.ctor = 'SmoPageLayout';\r\n return params;\r\n }\r\n}\r\nexport type ScaledGlobalAttributes = 'pageWidth' | 'pageHeight';\r\nexport type GlobalLayoutAttributes = 'pageWidth' | 'pageHeight' | 'noteSpacing' | 'svgScale' | 'zoomScale' | 'proportionality' | 'maxMeasureSystem';\r\nexport const GlobalLayoutAttributesArray: GlobalLayoutAttributes[] = ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'proportionality', 'maxMeasureSystem'];\r\n/**\r\n * Global layout are parameters that determine the layout of the whole score, because they affect the containing svg element\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoGlobalLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n proportionality: number,\r\n maxMeasureSystem: number\r\n}\r\n\r\n/**\r\n * Used to create {@link SmoLayoutManagerParams}\r\n * @category {SmoParams}\r\n */\r\nexport interface ScaledPageLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n interGap: number;\r\n intraGap: number;\r\n pages: number;\r\n maxMeasureSystem: number;\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoLayoutManager}\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoLayoutManagerParams {\r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayout[]\r\n}\r\nexport interface SmoLayoutManagerParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string; \r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayoutParams[]\r\n}\r\nfunction isSmoLayoutManagerParamsSer(params: Partial): params is SmoLayoutManagerParamsSer {\r\n if (!params.ctor || params.ctor !== 'SmoLayoutManager') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Storage and utilities for layout information in the score. Each\r\n * manager has one set of page height/width, since svg element\r\n * must have single length/width and viewbox.\r\n * Each page can have different margins.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLayoutManager extends SmoScoreModifierBase {\r\n static get defaultLayout(): SmoGlobalLayout {\r\n return {\r\n svgScale: 0.55,\r\n zoomScale: 2.0,\r\n noteSpacing: 1.0,\r\n pageWidth: 8 * 96 + 48,\r\n pageHeight: 11 * 96,\r\n proportionality: 5,\r\n maxMeasureSystem: 0\r\n };\r\n }\r\n static get defaults(): SmoLayoutManagerParams {\r\n return {\r\n globalLayout: JSON.parse(JSON.stringify(SmoLayoutManager.defaultLayout)),\r\n pageLayouts: []\r\n };\r\n }\r\n static get attributes(): GlobalLayoutAttributes[] {\r\n return ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'maxMeasureSystem'];\r\n }\r\n // Attributes that are scaled by svgScale\r\n /* static get scalableAttributes(): Global {\r\n return ['pageWidth', 'pageHeight'];\r\n }*/\r\n static get scaledPageAttributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n static get scaledGlobalAttributes(): ScaledGlobalAttributes[] {\r\n return ['pageWidth', 'pageHeight'];\r\n }\r\n static areLayoutsEqual(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n static isZoomChange(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr] && attr !== 'zoomScale') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Adjust zoom width so the score takes up the whole score area\r\n */\r\n zoomToWidth(screenWidth: number) {\r\n const curWidth = this.globalLayout.pageWidth * this.globalLayout.svgScale;\r\n this.globalLayout.zoomScale = ((screenWidth - 350) / curWidth) * this.globalLayout.svgScale; // magic 350 for left controls....TODO standardize this\r\n }\r\n static getScaledPageLayout(globalLayout: SmoGlobalLayout, pageLayout: SmoPageLayout, pages: number): ScaledPageLayout {\r\n const rv: Partial = {};\r\n SmoLayoutManager.scaledPageAttributes.forEach((attr: ScaledPageAttributes) => {\r\n rv[attr] = pageLayout[attr] / globalLayout.svgScale;\r\n });\r\n SmoLayoutManager.scaledGlobalAttributes.forEach((attr: ScaledGlobalAttributes) => {\r\n rv[attr] = globalLayout[attr] / globalLayout.svgScale;\r\n });\r\n // Note spacing is relative, so * it and not divide\r\n rv.noteSpacing = globalLayout.noteSpacing * globalLayout.svgScale;\r\n rv.svgScale = globalLayout.svgScale;\r\n rv.zoomScale = globalLayout.zoomScale;\r\n rv.maxMeasureSystem = globalLayout.maxMeasureSystem;\r\n \r\n return rv as ScaledPageLayout;\r\n }\r\n globalLayout: SmoGlobalLayout;\r\n pageLayouts: SmoPageLayout[] = [];\r\n constructor(params: SmoLayoutManagerParams) {\r\n super('SmoLayoutManager');\r\n if (typeof(params.globalLayout.maxMeasureSystem) === 'undefined') {\r\n params.globalLayout.maxMeasureSystem = SmoLayoutManager.defaultLayout.maxMeasureSystem;\r\n }\r\n this.globalLayout = JSON.parse(JSON.stringify(params.globalLayout));\r\n if (params.pageLayouts.length) {\r\n params.pageLayouts.forEach((plp) => {\r\n const pageParams: SmoPageLayoutParams = SmoPageLayout.defaults;\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (plp[attr]) !== 'undefined') {\r\n pageParams[attr] = plp[attr];\r\n }\r\n });\r\n this.pageLayouts.push(new SmoPageLayout(pageParams));\r\n });\r\n } else {\r\n this.pageLayouts.push(new SmoPageLayout(SmoPageLayout.defaults));\r\n }\r\n }\r\n trimPages(pageCount: number) {\r\n if (pageCount < this.pageLayouts.length - 1) {\r\n this.pageLayouts = this.pageLayouts.slice(0, pageCount + 1);\r\n }\r\n }\r\n getZoomScale() {\r\n return this.globalLayout.zoomScale;\r\n }\r\n serialize(): SmoLayoutManagerParamsSer {\r\n const rv: Partial = { ctor: 'SmoLayoutManager' };\r\n rv.pageLayouts = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.pageLayouts!.push(pl.serialize());\r\n });\r\n rv.globalLayout = JSON.parse(JSON.stringify(this.globalLayout));\r\n if (!isSmoLayoutManagerParamsSer(rv)) {\r\n throw 'bad layout manager ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateGlobalLayout(params: SmoGlobalLayout) {\r\n SmoLayoutManager.attributes.forEach((attr: string) => {\r\n if (typeof ((params as any)[attr]) !== 'undefined') {\r\n (this.globalLayout as any)[attr] = (params as any)[attr];\r\n }\r\n });\r\n }\r\n // ### addToPageLayouts\r\n // Make sure the next page has a layout. If not, copy settings from\r\n // previous page.\r\n addToPageLayouts(pageNum: number) {\r\n const lastLayout = this.pageLayouts[this.pageLayouts.length - 1];\r\n if (this.pageLayouts.length <= pageNum) {\r\n this.pageLayouts.push(new SmoPageLayout(lastLayout));\r\n }\r\n }\r\n getGlobalLayout(): SmoGlobalLayout {\r\n return JSON.parse(JSON.stringify(this.globalLayout));\r\n }\r\n // Return a deep copy of the page parameters, adjusted for the global scale.\r\n getScaledPageLayout(pageIndex: number): ScaledPageLayout {\r\n return SmoLayoutManager.getScaledPageLayout(this.globalLayout, this.pageLayouts[pageIndex], this.pageLayouts.length);\r\n }\r\n getPageLayout(pageIndex: number): SmoPageLayout {\r\n return new SmoPageLayout(this.pageLayouts[pageIndex]);\r\n }\r\n getPageLayouts(): SmoPageLayout[] {\r\n const rv: SmoPageLayout[] = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.push(new SmoPageLayout(pl));\r\n });\r\n return rv;\r\n }\r\n updatePage(pageLayout: SmoPageLayout, pageIndex: number) {\r\n if (this.pageLayouts.length > pageIndex) {\r\n this.pageLayouts[pageIndex] = new SmoPageLayout(pageLayout);\r\n }\r\n }\r\n}\r\n/**\r\n * constructor parameters for system groups (groupings of staves in the score)\r\n * @param leftConnector\r\n * @param rightConnector\r\n * @param mapType\r\n * @param text\r\n * @param shortText\r\n * @param justify\r\n * @param startSelector not used\r\n * @param endSelector not used\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemGroupParams {\r\n /**\r\n * bracket etc.\r\n */\r\n leftConnector: number,\r\n /**\r\n * bracket etc.\r\n */\r\n rightConnector: number,\r\n /**\r\n * future, score groups can be different for different parts of the score\r\n */\r\n mapType: number,\r\n /**\r\n * whether to justify the notes in the group\r\n */\r\n justify: boolean,\r\n /**\r\n * if mapped to a range, start\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * if mapped to a range, end\r\n */\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoSystemGroupParamsSer extends SmoSystemGroupParams{\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoSystemGroupParamsSer(params: Partial): params is SmoSystemGroupParamsSer {\r\n if (params.ctor === 'SmoSystemGroup') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * System group is the grouping of staves into a system.\r\n * @category SmoModifier\r\n * */\r\nexport class SmoSystemGroup extends SmoScoreModifierBase {\r\n static get connectorTypes(): Record {\r\n return { brace: 0, bracket: 1, single: 2, double: 3 };\r\n }\r\n static get mapTypes(): Record {\r\n return { allMeasures: 0, range: 1 };\r\n }\r\n static get attributes(): string[] {\r\n return ['leftConnector', 'rightConnector', 'text', 'shortText', 'justify',\r\n 'startSelector', 'endSelector', 'mapType'];\r\n }\r\n static get defaults(): SmoSystemGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n leftConnector: SmoSystemGroup.connectorTypes.single,\r\n rightConnector: SmoSystemGroup.connectorTypes.single,\r\n mapType: SmoSystemGroup.mapTypes.allMeasures,\r\n justify: true,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static isSystemGroup(modifier: SmoSystemGroup | SmoModifierBase): modifier is SmoSystemGroup {\r\n return modifier.ctor === 'SmoSystemGroup';\r\n }\r\n leftConnector: number = SmoSystemGroup.connectorTypes.single;\r\n rightConnector: number = SmoSystemGroup.connectorTypes.single;\r\n mapType: number = SmoSystemGroup.mapTypes.allMeasures;\r\n text: string = '';\r\n shortText: string = '';\r\n justify: boolean = true;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n attrs: SmoAttrs;\r\n constructor(params: SmoSystemGroupParams) {\r\n super('SmoSystemGroup');\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, SmoSystemGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, params, this);\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemGroup'\r\n };\r\n }\r\n stavesOverlap(group: SmoSystemGroup) {\r\n return (this.startSelector.staff >= group.startSelector.staff && this.startSelector.staff <= group.endSelector.staff) ||\r\n (this.endSelector.staff >= group.startSelector.staff && this.endSelector.staff <= group.endSelector.staff);\r\n }\r\n measuresOverlap(group: SmoSystemGroup) {\r\n return this.stavesOverlap(group) &&\r\n ((this.startSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.startSelector.measure) ||\r\n (this.endSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.endSelector.measure));\r\n }\r\n overlaps(group: SmoSystemGroup) {\r\n return (this.stavesOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.allMeasures) ||\r\n (this.measuresOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.range);\r\n }\r\n serialize(): SmoSystemGroupParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSystemGroup.defaults, SmoSystemGroup.attributes, this, params);\r\n params.ctor = 'SmoSystemGroup';\r\n if (!isSmoSystemGroupParamsSer(params)) {\r\n throw 'bad system group ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Score Text is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, headers, footers. Score text is a single block of text.\r\n * TextGroup is 1 or more ScoreText blocks arranged in some way.\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoScoreModifierBase, ScaledPageLayout } from './scoreModifiers';\r\nimport { SmoAttrs, SmoModifierBase } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\n\r\n/**\r\n * Parameters for a single text block. Text blocks make up a text group.\r\n * @category SmoParams\r\n */\r\nexport interface SmoScoreTextParams {\r\n /**\r\n * x location of font\r\n */\r\n x: number,\r\n /**\r\n * location of font\r\n */\r\n y: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n width: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n height: number,\r\n /**\r\n * The text content\r\n */\r\n text: string,\r\n /**\r\n * Font of the text\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * defaults to black\r\n */\r\n fill?: string,\r\n classes?: string,\r\n}\r\n/**\r\n * serialization\r\n */\r\nexport interface SmoScoreTextSer extends SmoScoreTextParams {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoScoreTextSer(params: Partial): params is SmoScoreTextSer {\r\n if (!(params?.ctor === 'SmoScoreText')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Identify some text in the score, not associated with any musical element, like page\r\n * decorations, titles etc.\r\n * Note: score text is always contained in a text group. So this isn't directly accessed\r\n * by score, but we keep the collection in score for backwards-compatibility\r\n * @category SmoModifier\r\n * @internal\r\n */\r\nexport class SmoScoreText extends SmoScoreModifierBase {\r\n // convert EM to a number, or leave as a number etc.\r\n static fontPointSize(size: string | number | undefined) {\r\n let rv = 12;\r\n const szz: string | number = size ?? 14;\r\n if (typeof (szz) === 'number') {\r\n return szz;\r\n }\r\n const ptString = szz.substring(0, szz.length - 2);\r\n rv = parseFloat(ptString);\r\n if (szz.indexOf('em') > 0) {\r\n rv *= 14;\r\n } else if (szz.indexOf('px') > 0) {\r\n rv *= (96.0 / 72.0);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert a numeric or string weight into either 'bold' or 'normal'\r\n * @param fontWeight \r\n * @returns \r\n */\r\n static weightString(fontWeight: string | number | undefined): string { \r\n let rv: string = 'normal';\r\n if (fontWeight) {\r\n const numForm = parseInt(fontWeight.toString(), 10);\r\n if (isNaN(numForm)) {\r\n rv = fontWeight.toString();\r\n } else if (numForm > 500) {\r\n rv = 'bold';\r\n }\r\n }\r\n return rv;\r\n }\r\n static familyString(fam: string | undefined): string {\r\n if (!fam) {\r\n return SmoScoreText.fontFamilies.sansSerif;\r\n }\r\n return fam;\r\n }\r\n static get fontFamilies(): Record {\r\n return {\r\n serif: 'Merriweather', sansSerif: 'Roboto,sans-serif', monospace: 'monospace', cursive: 'cursive',\r\n times: 'Merriweather', arial: 'Arial'\r\n };\r\n }\r\n static get parameters() {\r\n return ['x', 'y', 'width', 'height', 'text', 'fontInfo', 'fill', 'classes']\r\n }\r\n static get defaults(): SmoScoreTextParams {\r\n return JSON.parse(JSON.stringify({\r\n x: 15,\r\n y: 15,\r\n width: 0,\r\n height: 0,\r\n text: 'Smoosic',\r\n fontInfo: {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n }));\r\n }\r\n static deserialize(jsonObj: SmoScoreTextSer) {\r\n const params = SmoScoreText.defaults;\r\n smoSerialize.serializedMerge(SmoScoreText.parameters, jsonObj, params);\r\n if (typeof (params.fontInfo.size === 'string')) {\r\n params.fontInfo.size = SmoScoreText.fontPointSize(params.fontInfo.size);\r\n }\r\n return new SmoScoreText(params);\r\n }\r\n x: number = 15;\r\n y: number = 15;\r\n width: number = 0;\r\n height: number = 0;\r\n text: string = 'Smoosic';\r\n fontInfo: FontInfo = {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n fill: string = 'black';\r\n rotate: number = 0;\r\n classes: string = 'score-text';\r\n boxModel: string = 'none';\r\n scaleX: number = 1.0;\r\n scaleY: number = 1.0;\r\n translateX: number = 0;\r\n translateY: number = 0;\r\n pagination: string = 'once';\r\n position: string = 'custom';\r\n autoLayout: boolean = false; // set to true if one of the pre-canned positions are used.\r\n\r\n getText() {\r\n return this.text;\r\n }\r\n estimateWidth(): number {\r\n let i = 0;\r\n let rv = 0;\r\n const textFont = TextFormatter.create({\r\n family: this.fontInfo.family,\r\n size: this.fontInfo.size,\r\n weight: this.fontInfo.weight,\r\n style: this.fontInfo.style\r\n });\r\n textFont.setFontSize(SmoScoreText.fontPointSize(this.fontInfo.size));\r\n for (i = 0; i < this.text.length; ++i) {\r\n rv += textFont.getWidthForTextInPx(this.text[i]);\r\n }\r\n return rv;\r\n }\r\n tryParseUnicode() {\r\n this.text = smoSerialize.tryParseUnicode(this.text);\r\n }\r\n\r\n offsetX(offset: number) {\r\n this.x += offset;\r\n }\r\n offsetY(offset: number) {\r\n this.y += offset;\r\n }\r\n\r\n serialize(): SmoScoreTextSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoScoreText.defaults, SmoScoreText.attributes, this, params);\r\n params.ctor = 'SmoScoreText';\r\n if (!isSmoScoreTextSer(params)) {\r\n throw ('bad score text ')\r\n }\r\n return params;\r\n }\r\n static get attributes(): string[] {\r\n return ['x', 'y', 'text', 'pagination', 'position', 'fontInfo', 'classes',\r\n 'boxModel', 'justification', 'fill', 'width', 'height', 'scaleX', 'scaleY',\r\n 'translateX', 'translateY', 'autoLayout'];\r\n }\r\n constructor(parameters: SmoScoreTextParams) {\r\n super('SmoScoreText');\r\n let rx = '';\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, SmoScoreText.defaults, this);\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, parameters, this);\r\n\r\n if (!this.classes) {\r\n this.classes = '';\r\n }\r\n if (this.classes.indexOf(this.attrs.id) < 0) {\r\n this.classes += ' ' + this.attrs.id;\r\n }\r\n const weight = parameters.fontInfo ? parameters.fontInfo.weight : 'normal';\r\n this.fontInfo.weight = SmoScoreText.weightString(weight ?? 'normal');\r\n if (this.text) {\r\n rx = smoSerialize.tryParseUnicode(this.text);\r\n this.text = rx;\r\n }\r\n }\r\n}\r\n/**\r\n * Each text block has the text data itself and some data about how it's placed\r\n */\r\nexport interface SmoTextBlock {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreText,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number,\r\n /**\r\n * run-time flag\r\n */\r\n activeText: boolean\r\n}\r\nexport interface SmoTextBlockSer {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreTextSer,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number\r\n}\r\n/**\r\n * Used to place text imported from other formats, e.g. music xml\r\n */\r\nexport interface SmoTextPlacement {\r\n fontFamily: string,\r\n fontSize: number,\r\n xPlacement: number,\r\n yOffset: number,\r\n}\r\n/**\r\n * Constructor parameters for a text group, a block of text in Smoosic\r\n * @param justification one of {@link SmoScoreText.justifications}\r\n * @param relativePosition relative position to other text groups\r\n * @param pagination indicates if this text is paginated (goes on each page)\r\n * @param spacing distance between blocks\r\n * @param attachToSelector acts like 'note text' if attached to a note, otherwise\r\n * the position is based on score position, or page position if paginated\r\n * @param selector if attached, the selector in question\r\n * @param textBlocks the actual textBlocks of text - a score text along with a placement parameter\r\n * @category SmoParams\r\n */\r\nexport interface SmoTextGroupParams {\r\n justification: number,\r\n relativePosition: number,\r\n pagination: number,\r\n purpose: number,\r\n spacing: number,\r\n musicXOffset: number,\r\n musicYOffset: number,\r\n attachToSelector: boolean,\r\n selector: SmoSelector,\r\n textBlocks: SmoTextBlock[]\r\n}\r\n\r\n/**\r\n * The serializable parts of a text group.\r\n * @category serialization\r\n */\r\nexport interface SmoTextGroupParamsSer {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n /**\r\n * ID so we can identify which text this is in dialogs, UI\r\n */\r\n attrs: SmoAttrs;\r\n /**\r\n * justification within the block\r\n */\r\n justification?: number,\r\n /**\r\n * position (above, left, right etc)\r\n */\r\n relativePosition?: number,\r\n /**\r\n * pagination for headers, footers\r\n */\r\n pagination?: number,\r\n /**\r\n * spacing between blocks, future\r\n */\r\n spacing?: number,\r\n /**\r\n * true if the text is attached to a note.\r\n */\r\n attachToSelector?: boolean,\r\n /**\r\n * defined if the selector is attached to a note\r\n */\r\n selector?: SmoSelector,\r\n /**\r\n * the individual text blocks\r\n */\r\n textBlocks: SmoTextBlockSer[];\r\n}\r\nfunction isSmoTextGroupParamsSer(params: Partial): params is SmoTextGroupParamsSer {\r\n if (!(params?.ctor === 'SmoTextGroup')) {\r\n return false;\r\n }\r\n if (!(typeof(params.attrs?.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isTextBlockSer(params: Partial): params is SmoTextBlockSer {\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!(typeof(params.position) === 'number')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Suggestion for text purpose, maybe used to find a match..maybe not used at all\r\n */\r\nexport type SmoTextGroupPurpose = 'NONE' |'TITLE' | 'SUBTITLE' | 'COMPOSER' | 'COPYRIGHT';\r\n\r\n/**\r\n * A grouping of text that can be used as a block for\r\n * justification, alignment etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTextGroup extends SmoScoreModifierBase {\r\n static get justifications() {\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n CENTER: 3\r\n };\r\n }\r\n static get paginations() {\r\n return { EVERY: 1, EVENT: 2, ODD: 3, ONCE: 4, SUBSEQUENT: 5 };\r\n }\r\n\r\n // The position of block n relative to block n-1. Each block\r\n // has it's own position. Justification is inter-block.\r\n static get relativePositions() {\r\n return { ABOVE: 1, BELOW: 2, LEFT: 3, RIGHT: 4 };\r\n }\r\n\r\n static get purposes(): Record {\r\n return {\r\n NONE: 1, TITLE: 2, SUBTITLE: 3, COMPOSER: 4, COPYRIGHT: 5\r\n };\r\n }\r\n static get attributes() {\r\n return ['textBlocks', 'justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n }\r\n static get nonTextAttributes() {\r\n return ['justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n\r\n }\r\n static isTextGroup(modifier: SmoTextGroup | SmoModifierBase): modifier is SmoTextGroup {\r\n return modifier.ctor === 'SmoTextGroup';\r\n }\r\n static get purposeToFont(): Record {\r\n const rv: Record = {};\r\n rv[SmoTextGroup.purposes.TITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 18,\r\n xPlacement: 0.5,\r\n yOffset: 4\r\n };\r\n rv[SmoTextGroup.purposes.SUBTITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 16,\r\n xPlacement: 0.5,\r\n yOffset: 20,\r\n };\r\n rv[SmoTextGroup.purposes.COMPOSER] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.8,\r\n yOffset: 10\r\n };\r\n rv[SmoTextGroup.purposes.COPYRIGHT] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.5,\r\n yOffset: -12\r\n };\r\n return rv;\r\n }\r\n // ### createTextForLayout\r\n // Create a specific score text type (title etc.) based on the supplied\r\n // score layout\r\n static createTextForLayout(purpose: number, text: string, layout: ScaledPageLayout) {\r\n let x = 0;\r\n const textAttr = SmoTextGroup.purposeToFont[purpose];\r\n const pageWidth = layout.pageWidth;\r\n const pageHeight = layout.pageHeight;\r\n const bottomMargin = layout.bottomMargin;\r\n const topMargin = layout.topMargin;\r\n x = textAttr.xPlacement > 0 ? pageWidth * textAttr.xPlacement\r\n : pageWidth - (pageWidth * textAttr.xPlacement);\r\n const y = textAttr.yOffset > 0 ?\r\n topMargin + textAttr.yOffset :\r\n pageHeight + textAttr.yOffset - bottomMargin;\r\n const defaults: SmoScoreTextParams = SmoScoreText.defaults;\r\n const st = new SmoScoreText({\r\n text, x, y, width: defaults.width, height: defaults.height,\r\n fontInfo: { family: textAttr.fontFamily, size: textAttr.fontSize, weight: 'normal' }\r\n });\r\n const width = st.estimateWidth();\r\n x -= width / 2;\r\n const params = SmoTextGroup.defaults;\r\n params.textBlocks = [{ text: st, position: SmoTextGroup.relativePositions.RIGHT, activeText: false }];\r\n params.purpose = purpose;\r\n const tg = new SmoTextGroup(params);\r\n return tg;\r\n }\r\n\r\n static get defaults(): SmoTextGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n textBlocks: [],\r\n justification: SmoTextGroup.justifications.LEFT,\r\n relativePosition: SmoTextGroup.relativePositions.RIGHT,\r\n pagination: SmoTextGroup.paginations.ONCE,\r\n purpose: SmoTextGroup.purposes.NONE,\r\n spacing: 0,\r\n attachToSelector: false,\r\n selector: null,\r\n musicXOffset: 0,\r\n musicYOffset: 0\r\n }));\r\n }\r\n justification: number = SmoTextGroup.justifications.LEFT;\r\n relativePosition: number = SmoTextGroup.relativePositions.RIGHT;\r\n pagination: number = SmoTextGroup.paginations.ONCE;\r\n purpose: number = SmoTextGroup.purposes.NONE;\r\n spacing: number = 0;\r\n attachToSelector: boolean = false;\r\n selector?: SmoSelector;\r\n musicXOffset: number = 0;\r\n musicYOffset: number = 0;\r\n elements: SVGSVGElement[] = [];\r\n textBlocks: SmoTextBlock[] = [];\r\n edited: boolean = false; // indicates not edited this session\r\n skipRender: boolean = false; // don't render if it is being edited \r\n static deserialize(jObj: SmoTextGroupParamsSer) {\r\n const textBlocks: SmoTextBlock[] = [];\r\n const params: any = {};\r\n const jObjLegacy: any = jObj;\r\n // handle parameter name change\r\n if (jObjLegacy.blocks) {\r\n jObj.textBlocks = jObjLegacy.blocks;\r\n }\r\n\r\n // Create new scoreText object for the text blocks\r\n jObj.textBlocks.forEach((st: any) => {\r\n const tx = SmoScoreText.deserialize(st.text);\r\n textBlocks.push({ text: tx, position: st.position, activeText: false });\r\n });\r\n // fill in the textBlock configuration\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, jObj, params);\r\n params.textBlocks = textBlocks;\r\n return new SmoTextGroup(params);\r\n }\r\n static deserializePreserveId(jObj: any) {\r\n const rv = SmoTextGroup.deserialize(jObj);\r\n if (jObj.attrs.id) {\r\n rv.attrs.id = jObj.attrs.id;\r\n }\r\n return rv;\r\n }\r\n // ### getPagedTextGroups\r\n // If this text is repeated on page, create duplicates for each page, and\r\n // resolve page numbers;\r\n static getPagedTextGroups(tg: SmoTextGroup, pages: number, pageHeight: number): SmoTextGroup[] {\r\n const rv: SmoTextGroup[] = [];\r\n let i: number = 0;\r\n if (tg.pagination === SmoTextGroup.paginations.ONCE) {\r\n rv.push(tg);\r\n return rv;\r\n }\r\n for (i = 0; i < pages; ++i) {\r\n const ix: number = i;\r\n const nblocks: any = [];\r\n // deep copy the blocks so the page offsets don't bleed into\r\n // original.\r\n tg.textBlocks.forEach((block) => {\r\n const nscoreText = new SmoScoreText(block.text);\r\n nblocks.push({\r\n text: nscoreText, position: block.position\r\n });\r\n });\r\n const params: SmoTextGroupParams = {} as SmoTextGroupParams;\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, tg, params);\r\n params.textBlocks = nblocks;\r\n const ngroup: SmoTextGroup = new SmoTextGroup(params);\r\n ngroup.textBlocks.forEach((block) => {\r\n const xx = block.text;\r\n xx.classes = 'score-text ' + xx.attrs.id;\r\n xx.text = xx.text.replace('###', (ix + 1).toString()); /// page number\r\n xx.text = xx.text.replace('@@@', pages.toString()); /// page number\r\n xx.y += pageHeight * ix;\r\n });\r\n if (tg.logicalBox) {\r\n ngroup.logicalBox = JSON.parse(JSON.stringify(tg.logicalBox));\r\n ngroup.logicalBox!.y += pageHeight * i;\r\n }\r\n rv.push(ngroup);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoTextGroupParamsSer {\r\n const params: Partial = {\r\n textBlocks: []\r\n };\r\n smoSerialize.serializedMergeNonDefault(SmoTextGroup.defaults, SmoTextGroup.nonTextAttributes, this, params);\r\n this.textBlocks.forEach((blk: SmoTextBlock) => {\r\n \r\n const blockSer: Partial = {\r\n position: blk.position\r\n }\r\n\r\n blockSer.text = blk.text.serialize();\r\n if (!isTextBlockSer(blockSer)) {\r\n throw ('bad text block ' + JSON.stringify(blockSer));\r\n }\r\n params.textBlocks!.push(blockSer);\r\n });\r\n params.ctor = 'SmoTextGroup';\r\n params.attrs = JSON.parse(JSON.stringify(this.attrs));\r\n if (!isSmoTextGroupParamsSer(params)) {\r\n throw('bad text group ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n /* _isScoreText(st: ) {\r\n return st.ctor && st.ctor === 'SmoScoreText';\r\n } */\r\n constructor(params: SmoTextGroupParams) {\r\n super('SmoTextGroup');\r\n if (typeof (params) === 'undefined') {\r\n params = {} as SmoTextGroupParams;\r\n }\r\n this.textBlocks = [];\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, SmoTextGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, params, this);\r\n if (params.textBlocks) {\r\n params.textBlocks.forEach((block: SmoTextBlock) => {\r\n this.textBlocks.push(block);\r\n });\r\n }\r\n }\r\n scaleText(scale: number) {\r\n this.musicXOffset *= scale;\r\n this.musicYOffset *= scale;\r\n this.textBlocks.forEach((block: SmoTextBlock) => {\r\n block.text.x *= scale;\r\n block.text.y *= scale;\r\n });\r\n }\r\n // ### tryParseUnicode\r\n // Try to parse unicode strings.\r\n tryParseUnicode() {\r\n this.textBlocks.forEach((tb) => {\r\n tb.text.tryParseUnicode();\r\n });\r\n }\r\n estimateWidth() {\r\n let rv = 0;\r\n this.textBlocks.forEach((tb) => {\r\n rv += tb.text.estimateWidth();\r\n });\r\n return rv;\r\n }\r\n // avoid saving text that can't be deleted\r\n isTextVisible() {\r\n let rv = true;\r\n if (this.attachToSelector) {\r\n return true;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n if (block.text.x < 0 || block.text.y < 0) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### setActiveBlock\r\n // let the UI know which block is being edited. Parameter null means reset all\r\n setActiveBlock(scoreText: SmoScoreText | null) {\r\n this.textBlocks.forEach((block) => {\r\n if (scoreText != null && block.text.attrs.id === scoreText.attrs.id) {\r\n block.activeText = true;\r\n } else {\r\n block.activeText = false;\r\n }\r\n });\r\n }\r\n // For editing, keep track of the active text block.\r\n getActiveBlock() {\r\n const rv = this.textBlocks.find((block) => block.activeText === true);\r\n if (typeof (rv) !== 'undefined') {\r\n return rv.text;\r\n }\r\n return this.textBlocks[0].text;\r\n }\r\n setRelativePosition(position: number) {\r\n this.textBlocks.forEach((block) => {\r\n block.position = position;\r\n });\r\n this.relativePosition = position;\r\n }\r\n firstBlock() {\r\n return this.textBlocks[0].text;\r\n }\r\n indexOf(scoreText: SmoScoreText) {\r\n return this.textBlocks.findIndex((block) => block.text.attrs.id === scoreText.attrs.id);\r\n }\r\n addScoreText(scoreText: SmoScoreText, position: number = SmoTextGroup.relativePositions.LEFT) {\r\n this.textBlocks.push({ text: scoreText, position, activeText: false });\r\n }\r\n ul() {\r\n const rv = { x: 0, y: 0 };\r\n this.textBlocks.forEach((block) => {\r\n rv.x = block.text.x > rv.x ? block.text.x : rv.x;\r\n rv.y = block.text.y > rv.y ? block.text.y : rv.y;\r\n });\r\n return rv;\r\n }\r\n removeBlock(scoreText: SmoScoreText) {\r\n const bbid = (typeof (scoreText) === 'string') ? scoreText : scoreText.attrs.id;\r\n const ix = this.textBlocks.findIndex((bb) => bb.text.attrs.id === bbid);\r\n this.textBlocks.splice(ix, 1);\r\n }\r\n offsetX(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicXOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetX(offset);\r\n });\r\n }\r\n offsetY(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicYOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetY(offset);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to modify a staff or system. Some staff modifiers can span multiple\r\n * staves, so it can be a little arbitrary what is a score vs. staff modifier. But\r\n * generally, a staff modifier is anything that has a beginning and end {@link SmoSelector}\r\n * @module /smo/data/staffModifiers\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoNote } from './note';\r\nimport { SmoAttrs, getId, SvgPoint, SmoObjectParams, Clef, SvgBox, SmoModifierBase } from './common';\r\n\r\n/**\r\n * Base class that mostly standardizes the interface and deals with serialization.\r\n * @param ctor constructor for derived class\r\n * @param logicalBox bounding box in SVG coordinates, if rendered\r\n * @param attrs object identification\r\n * @param startSelector where the modifier starts\r\n * @param endSelector where it ends\r\n * @category SmoModifier\r\n * */\r\nexport abstract class StaffModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number = 0;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(params: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + params.ctor);\r\n const fixInstrument = params as any;\r\n if (fixInstrument.subFamily) {\r\n fixInstrument.instrument = fixInstrument.subFamily;\r\n }\r\n const rv = new ctor(params);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\nexport interface StaffModifierBaseSer {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number;\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n}\r\nexport type SoundSustain = 'percussive' | 'sustained';\r\nexport type oscillatorType = 'sample' | 'sine' | 'sawtooth' | 'square' | 'triangle' | 'custom';\r\nexport type oscillatorOptions = 'plucked' | 'bowed' | 'muted' | 'accented' | 'frequency-sweep' | 'na';\r\n/**\r\n * Parameters of an instrument used to create audio nodes\r\n */\r\nexport interface SmoOscillatorInfo {\r\n waveform: oscillatorType,\r\n sustain: SoundSustain,\r\n realOvertones: number[],\r\n imaginaryOvertones: number[],\r\n sample: string | null,\r\n family: string,\r\n instrument: string,\r\n nativeFrequency: number,\r\n dynamic: number,\r\n options: oscillatorOptions[],\r\n minDuration: number,\r\n maxDuration: number\r\n}\r\nexport type SmoOscillatorInfoNumberType = 'minDuration' | 'maxDuration' | 'dynamic' | 'nativeFrequency';\r\nexport type SmoOscillatorInfoNumberArType = 'realOvertones' | 'imaginaryOvertones';\r\nexport type SmoOscillatorInfoStringType = 'family';\r\nexport type SmoOscillatorInfoStringNullType = 'sample';\r\nexport type SmoOscillatorInfoWaveformType = 'waveform';\r\nexport type SmoOscillatorInfoSustainType = 'sustain';\r\nexport type SmoOscillatorInfoOptionsType = 'options';\r\nexport const SmoOscillatorInfoAllTypes = ['minDuration','maxDuration', 'dynamic', 'nativeFrequency', 'realOvertones', 'imaginaryOvertones', 'sample', 'family',\r\n 'waveform', 'sustain', 'options', 'instrument'];\r\n\r\nexport type SmoOscillatorAnyType = SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | oscillatorType | SoundSustain;\r\n \r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoInstrumentParams {\r\n /**\r\n * where instrument starts to take effect\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where instrument changes\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * name, for metadata\r\n */\r\n instrumentName: string,\r\n /**\r\n * woodwind, brass etc.\r\n */\r\n family: string,\r\n /**\r\n * instrument sample\r\n */\r\n instrument: string,\r\n /**\r\n * abbreviation for score\r\n */\r\n abbreviation: string,\r\n /**\r\n * -2 indicates key of Bb\r\n */\r\n keyOffset: number,\r\n /**\r\n * for future\r\n */\r\n midiInstrument: number,\r\n /**\r\n * for future\r\n */\r\n midichannel: number,\r\n /**\r\n * for future\r\n */\r\n midiport: number,\r\n /**\r\n * default clef\r\n */\r\n clef: Clef,\r\n /**\r\n * future, can be used to set sample\r\n */\r\n mutes?: string, \r\n}\r\n\r\n/**\r\n * Serialization of instrument-specific settings, such as sound and key\r\n * @category serialization\r\n */\r\nexport interface SmoInstrumentParamsSer extends SmoInstrumentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoInstrumentParamsSer(params: Partial): params is SmoInstrumentParamsSer {\r\n return params?.ctor === 'SmoInstrument';\r\n}\r\nexport type SmoInstrumentNumParamType = 'keyOffset' | 'midichannel' | 'midiport' | 'midiInstrument';\r\nexport const SmoInstrumentNumParams: SmoInstrumentNumParamType[] = ['keyOffset', 'midichannel', 'midiport', 'midiInstrument'];\r\nexport type SmoInstrumentStringParamType = 'instrumentName' | 'abbreviation' | 'family' | 'instrument';\r\nexport const SmoInstrumentStringParams: SmoInstrumentStringParamType[] = ['instrumentName', 'abbreviation', 'family', 'instrument'];\r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoModifier\r\n */\r\nexport class SmoInstrument extends StaffModifierBase {\r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'keyOffset', 'midichannel', 'midiport', 'instrumentName', 'abbreviation', 'instrument', 'family'];\r\n }\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n instrumentName: string = '';\r\n abbreviation: string = '';\r\n keyOffset: number = 0;\r\n clef: Clef = 'treble';\r\n midiInstrument: number = 1;\r\n midichannel: number;\r\n midiport: number;\r\n family: string;\r\n instrument: string;\r\n articulation?: string;\r\n mutes?: string;\r\n static get defaults(): SmoInstrumentParams {\r\n return JSON.parse(JSON.stringify({\r\n clef: 'treble',\r\n keyOffset: 0,\r\n instrumentName: '',\r\n abbreviation: '',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n midichannel: 0,\r\n midiInstrument: 1,\r\n midiport: 0,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get defaultOscillatorParam(): SmoOscillatorInfo {\r\n return JSON.parse(JSON.stringify({\r\n waveform: 'sample',\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: null,\r\n family: 'none',\r\n instrument: 'none',\r\n nativeFrequency: 440,\r\n dynamic: 100,\r\n options: [],\r\n minDuration: 0,\r\n maxDuration: 0\r\n }));\r\n }\r\n constructor(params: SmoInstrumentParams) {\r\n super('SmoInstrument');\r\n let name = '';\r\n if (typeof ((params as any).instrument) === 'undefined') {\r\n name = params.instrumentName;\r\n } else {\r\n name = (params as any).instrument;\r\n }\r\n this.instrumentName = name;\r\n this.family = params.family;\r\n this.instrument = params.instrument;\r\n this.keyOffset = params.keyOffset;\r\n this.clef = params.clef;\r\n this.midiport = params.midiport;\r\n this.midichannel = params.midichannel;\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n }\r\n serialize(): SmoInstrumentParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoInstrument.defaults, SmoInstrument.attributes, this, params);\r\n params.ctor = 'SmoInstrument';\r\n if (!isSmoInstrumentParamsSer(params)) {\r\n throw ('bad instrument ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n eq(other: SmoInstrument): boolean {\r\n let rv = true;\r\n SmoInstrumentNumParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n SmoInstrumentStringParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SmoInstrumentMeasure {\r\n measureIndex: number,\r\n instrument: SmoInstrumentParams;\r\n}\r\n/**\r\n * constructor params for {@link SmoStaffHairpin}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffHairpinParams {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * Serialized dynamic marking (hairpin)\r\n * @category serialization\r\n */\r\nexport interface SmoStaffHairpinParamsSer extends StaffModifierBaseSer {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffHairpinParamsSer(params: Partial): params is SmoStaffHairpinParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoStaffHairpin')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Also called crescendo etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffHairpin extends StaffModifierBase {\r\n static get editableAttributes() {\r\n return ['xOffsetLeft', 'xOffsetRight', 'yOffset', 'height'];\r\n }\r\n static get defaults(): SmoStaffHairpinParams {\r\n return JSON.parse(JSON.stringify({\r\n xOffsetLeft: -2,\r\n xOffsetRight: 0,\r\n yOffset: -50,\r\n height: 10,\r\n position: SmoStaffHairpin.positions.BELOW,\r\n hairpinType: SmoStaffHairpin.types.CRESCENDO,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n };\r\n }\r\n static get types() {\r\n return {\r\n CRESCENDO: 1,\r\n DECRESCENDO: 2\r\n };\r\n }\r\n static get attributes() {\r\n return ['position', 'startSelector', 'endSelector', 'xOffsetLeft',\r\n 'xOffsetRight', 'yOffset', 'hairpinType', 'height'];\r\n }\r\n xOffsetLeft: number = -2;\r\n xOffsetRight: number = 0;\r\n yOffset: number = -50;\r\n height: number = 10;\r\n position: number = SmoStaffHairpin.positions.BELOW;\r\n hairpinType: number = SmoStaffHairpin.types.CRESCENDO;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffHairpinParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffHairpin.defaults, SmoStaffHairpin.attributes, this, params);\r\n params.ctor = 'SmoStaffHairpin';\r\n if (!isSmoStaffHairpinParamsSer(params)) {\r\n throw 'bad hairpin ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffHairpinParams) {\r\n super('SmoStaffHairpin');\r\n smoSerialize.vexMerge(this, SmoStaffHairpin.defaults);\r\n smoSerialize.filteredMerge(SmoStaffHairpin.attributes, params, this);\r\n // If start/end selector on same note, make sure the hairpin extends\r\n if (SmoSelector.eq(this.startSelector, this.endSelector)) {\r\n if (this.xOffsetRight === SmoStaffHairpin.defaults.xOffsetRight\r\n && this.xOffsetLeft === SmoStaffHairpin.defaults.xOffsetLeft) {\r\n this.xOffsetLeft = -10;\r\n this.xOffsetRight = 10;\r\n }\r\n }\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffHairpin'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * constructor params for {@link SmoStaffTextBracket}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffTextBracketParams {\r\n /**\r\n * the ledger line\r\n */\r\n line: number,\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * serializable bits of SmoStaffTextBracket\r\n * @category serialization\r\n */\r\nexport interface SmoStaffTextBracketParamsSer extends StaffModifierBaseSer{\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n attrs: SmoAttrs;\r\n /**\r\n * the ledger line\r\n */\r\n line: number;\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffTextBracketParamsSer(params: Partial):\r\n params is SmoStaffTextBracketParamsSer {\r\n if (params.ctor && params.ctor === 'SmoStaffTextBracket') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport type SmoTextBracketStringType = 'text' | 'superscript';\r\nexport const SmoTextBracketStringTypes: SmoTextBracketStringType[] = ['text', 'superscript'];\r\nexport type SmoTextBracketNumberType = 'line' | 'position';\r\nexport const SmoTextBracketNumberTypes: SmoTextBracketNumberType[] = ['line', 'position'];\r\n/**\r\n * Text like 8va, rit. that is bracketed on a system\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffTextBracket extends StaffModifierBase {\r\n static RITARD = 'ritard';\r\n static ACCEL = 'accelerando';\r\n static CRESCENDO = 'crescendo';\r\n static DIMENUENDO = 'diminuendo';\r\n static OCTAVEUP = '8va';\r\n static OCTAVEDOWN = '8vb';\r\n static OCTAVEUP2 = '15va';\r\n static OCTAVE2DOWN = '15vb';\r\n static get defaults(): SmoStaffTextBracketParams {\r\n return JSON.parse(JSON.stringify({\r\n line: 1,\r\n position: SmoStaffTextBracket.positions.BOTTOM,\r\n text: '',\r\n superscript: '',\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n TOP: 1,\r\n BOTTOM: -1\r\n };\r\n } \r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'line', 'position', 'text', 'superscript'];\r\n }\r\n position: number = SmoStaffTextBracket.positions.BOTTOM;\r\n text: string = '';\r\n superscript: string = '';\r\n line: number = 1;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffTextBracketParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffTextBracket.defaults, SmoStaffTextBracket.attributes, this, params);\r\n params.ctor = 'SmoStaffTextBracket';\r\n if (!isSmoStaffTextBracketParamsSer(params)) {\r\n throw(' bad text bracket ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffTextBracketParams) {\r\n super('SmoStaffTextBracket');\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, SmoStaffTextBracket.defaults, this);\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, params, this);\r\n this.startSelector = JSON.parse(JSON.stringify(params.startSelector));\r\n this.endSelector = JSON.parse(JSON.stringify(params.endSelector));\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffTextBracket'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * used for debugging\r\n */\r\nexport interface SlurDefaultParams {\r\n stemDir1: number,\r\n stemDir2: number,\r\n line1: number,\r\n line2: number,\r\n lineMin: number,\r\n lineMax: number,\r\n position: number,\r\n orientation: number,\r\n sameBeam: number\r\n}\r\nexport type SlurNumberParam = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' |\r\n 'position_end' | 'cp1x' | 'cp1y' | 'cp2x' | 'cp2y';\r\nexport const SlurNumberParams: SlurNumberParam[] = ['spacing', 'thickness', 'xOffset', 'yOffset', 'position', \r\n 'position_end', 'cp1x', 'cp1y', 'cp2x', 'cp2y'];\r\n/**\r\n * parameters for a slur\r\n * @param spacing between note and curve\r\n * @param thickness thickness of the line\r\n * @param xOffset in pixels\r\n * @param yOffset in pixels\r\n * @param position top or bottom of the chord we are attached to\r\n * @param position_end top or bottom of the chord we are attached to\r\n * @param invert turns that frown upside down\r\n * @param cp1x bz control point\r\n * @param cp1y bz control point\r\n * @param cp2x bz control point\r\n * @param cp2y bz control point\r\n * @param startSelector the start note we are attached to\r\n * @param endSelector the end note we are attached to\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSlurParams {\r\n /** \r\n * spacing between note and curve \r\n * */\r\n spacing: number,\r\n /**\r\n * thickness of the curve\r\n */\r\n thickness: number,\r\n /**\r\n * x offset on both ends\r\n */\r\n xOffset: number,\r\n /**\r\n * move whole curve up or down\r\n */\r\n yOffset: number,\r\n /**\r\n * VF position, whether head-end or stem end\r\n */\r\n position: number,\r\n /**\r\n * VF position for right side of slur\r\n */\r\n position_end: number,\r\n /**\r\n * indicates whether the user wants up, down or 'auto'.\r\n * internally, sets the 'invert' flag\r\n */\r\n orientation: number,\r\n /**\r\n * reverse the slur from the usual rules in VF\r\n */\r\n invert: boolean,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1y: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2y: number,\r\n /**\r\n * start note of the curve\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * start note of the curve\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * optional for debugging\r\n */\r\n debugParams?: SlurDefaultParams\r\n}\r\n/**\r\n * serializable bits of slur\r\n * @category serialization\r\n */\r\nexport interface SmoSlurParamsSer extends SmoSlurParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoSlurParamsSer(params: Partial): params is SmoSlurParamsSer {\r\n if (params && params.ctor && params.ctor === 'SmoSlur') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Defines a slur\r\n * @category SmoModifier\r\n */\r\nexport class SmoSlur extends StaffModifierBase {\r\n static get defaults(): SmoSlurParams {\r\n return JSON.parse(JSON.stringify({\r\n spacing: 2,\r\n thickness: 2,\r\n xOffset: 5,\r\n yOffset: 0,\r\n position: SmoSlur.positions.TOP,\r\n position_end: SmoSlur.positions.TOP,\r\n orientation: SmoSlur.orientations.AUTO,\r\n invert: false,\r\n cp1x: 0,\r\n cp1y: 15,\r\n cp2x: 0,\r\n cp2y: 15,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n // matches VF curve\r\n static get positions() {\r\n return {\r\n HEAD: 1,\r\n TOP: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n AUTO: 5\r\n };\r\n }\r\n static get orientations() {\r\n return {\r\n AUTO: 0,\r\n UP: 1,\r\n DOWN: 2\r\n };\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'spacing', 'xOffset', 'yOffset', 'position', 'position_end', 'invert',\r\n 'orientation', 'cp1x', 'cp1y', 'cp2x', 'cp2y', 'thickness', 'pitchesStart', 'pitchesEnd'];\r\n }\r\n spacing: number = 2;\r\n thickness: number = 2;\r\n xOffset: number = -5;\r\n yOffset: number = 10;\r\n position: number = SmoSlur.positions.TOP;\r\n position_end: number = SmoSlur.positions.TOP;\r\n orientation: number = SmoSlur.orientations.AUTO;\r\n invert: boolean = false;\r\n cp1x: number = 0;\r\n cp1y: number = 15;\r\n cp2x: number = 0;\r\n cp2y: number = 15;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n\r\n serialize(): SmoSlurParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSlur.defaults,\r\n SmoSlur.parameterArray, this, params);\r\n params.ctor = 'SmoSlur';\r\n if (!isSmoSlurParamsSer(params)) {\r\n throw('bad slur ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n get controlPoints(): SvgPoint[] {\r\n const ar: SvgPoint[] = [{\r\n x: this.cp1x,\r\n y: this.cp1y\r\n }, {\r\n x: this.cp2x,\r\n y: this.cp2y\r\n }];\r\n return ar;\r\n }\r\n\r\n constructor(params: SmoSlurParams) {\r\n super('SmoSlur');\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, SmoSlur.defaults, this);\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, params, this);\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n\r\n // Fix some earlier serialization error. \r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSlur'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Map pitch indices of the tie line\r\n */\r\nexport interface TieLine {\r\n from: number,\r\n to: number\r\n}\r\n/**\r\n * Constructor parameters for a tie.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTieParams {\r\n /**\r\n * future: x offset on both sides\r\n */\r\n tie_spacing: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp1: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp2: number,\r\n /**\r\n * x offset\r\n */\r\n first_x_shift: number,\r\n /**\r\n * x offset end\r\n */\r\n last_x_shift: number,\r\n /**\r\n * y offset for all the curves\r\n */\r\n y_shift: number,\r\n /**\r\n * map of lines for the pitches\r\n */\r\n lines: TieLine[],\r\n /**\r\n * start note\r\n */\r\n startSelector: SmoSelector | null,\r\n /**\r\n * end note\r\n */\r\n endSelector: SmoSelector | null\r\n}\r\n\r\n/**\r\n * serializable bits of SmoTie\r\n * @category serialization\r\n */\r\nexport interface SmoTieParamsSer extends SmoTieParams {\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoTieParamsSer(params: Partial): params is SmoTieParamsSer {\r\n if (params.ctor && params.ctor === 'SmoTie') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Like slur, but multiple pitches.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTie extends StaffModifierBase {\r\n invert: boolean = false;\r\n cp1: number = 8;\r\n cp2: number = 12;\r\n first_x_shift: number = 0;\r\n last_x_shift: number = 0;\r\n y_shift: number = 7;\r\n tie_spacing: number = 0;\r\n lines: TieLine[] = [];\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n static get defaults(): SmoTieParams {\r\n return JSON.parse(JSON.stringify({\r\n invert: false,\r\n cp1: 8,\r\n cp2: 12,\r\n y_shift: 7,\r\n first_x_shift: 0,\r\n last_x_shift: 0,\r\n lines: [],\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'invert', 'lines', 'y_shift', 'tie_spacing', 'cp1', 'cp2', 'first_x_shift', 'last_x_shift'];\r\n }\r\n static get vexParameters() {\r\n return ['cp1', 'cp2', 'first_x_shift', 'last_x_shift', 'y_shift'];\r\n }\r\n static isTie(modifier: SmoTie | SmoModifierBase): modifier is SmoTie {\r\n return modifier.ctor === 'SmoTie';\r\n }\r\n\r\n static createLines(fromNote: SmoNote, toNote: SmoNote): TieLine[] {\r\n const maxPitches = Math.max(fromNote.pitches.length, toNote.pitches.length);\r\n let i = 0;\r\n const lines: TieLine[] = [];\r\n // By default, just tie all the pitches to all the other pitches in order\r\n for (i = 0; i < maxPitches; ++i) {\r\n const from = i < fromNote.pitches.length ? i : fromNote.pitches.length - 1;\r\n const to = i < toNote.pitches.length ? i : toNote.pitches.length - 1;\r\n lines.push({ from, to });\r\n }\r\n return lines;\r\n }\r\n\r\n serialize(): SmoTieParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTie.defaults,\r\n SmoTie.parameterArray, this, params);\r\n\r\n params.ctor = 'SmoTie';\r\n if (!isSmoTieParamsSer(params)) {\r\n throw 'bad tie ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n // ### checkLines\r\n // If the note chords have changed, the lines may no longer be valid so update them\r\n checkLines(fromNote: SmoNote, toNote: SmoNote) {\r\n const maxTo = this.lines.map((ll) => ll.to).reduce((a, b) => a > b ? a : b);\r\n const maxFrom = this.lines.map((ll) => ll.from).reduce((a, b) => a > b ? a : b);\r\n if (maxTo < toNote.pitches.length && maxFrom < fromNote.pitches.length) {\r\n return;\r\n }\r\n this.lines = SmoTie.createLines(fromNote, toNote);\r\n }\r\n constructor(params: SmoTieParams) {\r\n super('SmoTie');\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, SmoTie.defaults, this);\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, params, this);\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTie'\r\n };\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support a {@link SmoSystemStaff}, which is a container for measures and\r\n * staff modifiers.\r\n * @module /smo/data/systemStaff\r\n * **/\r\nimport { SmoObjectParams, SmoAttrs, MeasureNumber, getId } from './common';\r\nimport { SmoMusic } from './music';\r\nimport { SmoMeasure, SmoMeasureParamsSer } from './measure';\r\nimport { SmoMeasureFormat, SmoRehearsalMark, SmoRehearsalMarkParams, SmoTempoTextParams, SmoVolta, SmoBarline } from './measureModifiers';\r\nimport { SmoInstrumentParams, StaffModifierBase, SmoInstrument, SmoInstrumentMeasure, SmoInstrumentStringParams, SmoInstrumentNumParams, \r\n SmoTie, SmoStaffTextBracket, SmoStaffTextBracketParamsSer, StaffModifierBaseSer } from './staffModifiers';\r\nimport { SmoPartInfo, SmoPartInfoParamsSer } from './partInfo';\r\nimport { SmoTextGroup } from './scoreText';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBeamer } from '../xform/beamers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * Constructor parameters for {@link SmoSystemStaff}.\r\n * Usually you will call\r\n * {@link SmoSystemStaff.defaults}, and modify the parameters you need to change,\r\n * or get the defaults from an existing staff\r\n * @param staffId the index of the staff in the score\r\n * @param renumberingMap For alternate number, pickups, etc.\r\n * @param keySignatureMap map of keys to measures\r\n * @param measureInstrumentMap map of instruments to staves\r\n * @param measures array of {@link SmoMeasure}\r\n * @param modifiers slurs and such\r\n * @param partInfo information about the part\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemStaffParams {\r\n staffId: number,\r\n renumberingMap: Record,\r\n keySignatureMap: Record,\r\n measureInstrumentMap: Record,\r\n measures: SmoMeasure[],\r\n modifiers: StaffModifierBase[],\r\n partInfo?: SmoPartInfo;\r\n textBrackets?: SmoStaffTextBracket[];\r\n alignWithPrevious?: boolean;\r\n}\r\n/**\r\n * Serialized components of a stave\r\n * @param staffId the index of the staff in the score\r\n * @param renumberingMap For alternate number, pickups, etc.\r\n * @param keySignatureMap map of keys to measures\r\n * @param measureInstrumentMap map of instruments to staves\r\n * @param measures array of {@link SmoMeasure}\r\n * @param modifiers slurs and such\r\n * @param partInfo information about the part \r\n * @category serialization\r\n */\r\nexport interface SmoSystemStaffParamsSer {\r\n ctor: string,\r\n staffId: number,\r\n renumberingMap?: Record,\r\n keySignatureMap: Record,\r\n measureInstrumentMap: Record,\r\n measures: SmoMeasureParamsSer[],\r\n modifiers: StaffModifierBaseSer[],\r\n partInfo?: SmoPartInfoParamsSer;\r\n textBrackets?: SmoStaffTextBracketParamsSer[];\r\n alignWithPrevious?: boolean;\r\n}\r\n\r\nfunction isSmoSystemStaffParamsSer(params: Partial):params is SmoSystemStaffParamsSer {\r\n if (!(typeof(params.ctor) === 'string' && params.ctor === 'SmoSystemStaff')) {\r\n return false;\r\n }\r\n if (!(Array.isArray(params.measures))) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A staff is a line of music that can span multiple measures.\r\n * A system is a line of music for each staff in the score. So a staff\r\n * spans multiple systems.\r\n * A staff modifier connects 2 points in the staff.\r\n * @category SmoObject\r\n * */\r\nexport class SmoSystemStaff implements SmoObjectParams {\r\n /**\r\n * Gets the instrument assigned to a given measure\r\n * @param measureInstrumentMap\r\n * @param measureIndex \r\n * @returns \r\n */\r\n static getStaffInstrument(measureInstrumentMap: Record, measureIndex: number) {\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n let fit = 0;\r\n keyar.forEach((key) => {\r\n const numkey = parseInt(key, 10);\r\n if (numkey <= measureIndex && numkey > fit) {\r\n fit = numkey;\r\n }\r\n });\r\n return measureInstrumentMap[fit];\r\n }\r\n static getStaffInstrumentArray(measureInstrumentMap: Record): SmoInstrumentMeasure[] {\r\n const rv: SmoInstrumentMeasure[] = [];\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n keyar.forEach((key) => {\r\n const measureIndex = parseInt(key, 10);\r\n rv.push({ measureIndex, instrument: measureInstrumentMap[measureIndex] });\r\n });\r\n return rv;\r\n }\r\n\r\n staffId: number = 0;\r\n renumberingMap: Record = {};\r\n keySignatureMap: Record = {};\r\n partInfo: SmoPartInfo;\r\n measureInstrumentMap: Record = {};\r\n measures: SmoMeasure[] = [];\r\n modifiers: StaffModifierBase[] = [];\r\n textBrackets: SmoStaffTextBracket[] = [];\r\n bracketMap: Record = {};\r\n attrs: SmoAttrs = {\r\n id: '',\r\n type: 'SmoSystemStaff'\r\n }\r\n ctor: string = 'SmoSystemStaff';\r\n _mappedStaffId: number = 0;\r\n\r\n // ### defaults\r\n // default values for all instances\r\n static get defaults(): SmoSystemStaffParams {\r\n return JSON.parse(JSON.stringify({\r\n staffId: 0,\r\n renumberingMap: {},\r\n keySignatureMap: {},\r\n measureInstrumentMap: {},\r\n textBrackets: [],\r\n measures: [],\r\n modifiers: []\r\n }));\r\n }\r\n setMappedStaffId(value: number) {\r\n this._mappedStaffId = value;\r\n }\r\n getMappedStaffId(): number {\r\n return this._mappedStaffId;\r\n }\r\n\r\n constructor(params: SmoSystemStaffParams) {\r\n this.staffId = params.staffId;\r\n this.measures = params.measures;\r\n this.modifiers = params.modifiers;\r\n this.textBrackets = params.textBrackets ?? [];\r\n this.renumberingMap = params.renumberingMap;\r\n if (Object.keys(params.measureInstrumentMap).length === 0) {\r\n const instrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n this.measureInstrumentMap[0] = instrument;\r\n } else {\r\n const keys = Object.keys(params.measureInstrumentMap);\r\n keys.forEach((p, ix) => {\r\n const pnum = parseInt(p, 10);\r\n const instrument = new SmoInstrument(params.measureInstrumentMap[pnum]);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n\r\n // Make sure transposition goes to the end stave of the song.\r\n if (ix === keys.length - 1) {\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n }\r\n this.measureInstrumentMap[pnum] = instrument;\r\n });\r\n }\r\n if (this.measures.length) {\r\n this.numberMeasures();\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemStaff'\r\n };\r\n if (params.partInfo) {\r\n this.partInfo = params.partInfo;\r\n } else {\r\n const staveNo = this.staffId + 1;\r\n const partDefs = SmoPartInfo.defaults;\r\n partDefs.partName = 'Staff ' + staveNo;\r\n partDefs.partAbbreviation = staveNo.toString() + '.';\r\n this.partInfo = new SmoPartInfo(partDefs);\r\n }\r\n }\r\n\r\n // ### defaultParameters\r\n // the parameters that get saved with the score.\r\n static get defaultParameters() {\r\n return [\r\n 'renumberingMap', 'keySignatureMap', 'instrumentInfo'];\r\n }\r\n\r\n get renderableModifiers() {\r\n const rv: StaffModifierBase[] = \r\n this.modifiers.concat(this.textBrackets);\r\n return rv;\r\n }\r\n // ### serialize\r\n // JSONify self.\r\n serialize(): SmoSystemStaffParamsSer {\r\n const params: Partial = {\r\n ctor: 'SmoSystemStaff'\r\n };\r\n smoSerialize.serializedMerge(SmoSystemStaff.defaultParameters, this, params);\r\n params.measures = [];\r\n params.measureInstrumentMap = {};\r\n const ikeys: string[] = Object.keys(this.measureInstrumentMap);\r\n ikeys.forEach((ikey: string) => {\r\n params.measureInstrumentMap![parseInt(ikey, 10)] = this.measureInstrumentMap[parseInt(ikey, 10)].serialize();\r\n });\r\n this.measures.forEach((measure) => {\r\n params.measures!.push(measure.serialize());\r\n });\r\n params.modifiers = [];\r\n this.modifiers.forEach((modifier) => {\r\n params.modifiers!.push(modifier.serialize());\r\n });\r\n this.textBrackets.forEach((bracket) => {\r\n params.modifiers!.push(bracket.serialize());\r\n });\r\n params.partInfo = this.partInfo.serialize();\r\n if (!isSmoSystemStaffParamsSer(params)) {\r\n throw ('bad staff ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n\r\n // ### deserialize\r\n // parse formerly serialized staff.\r\n static deserialize(jsonObj: SmoSystemStaffParamsSer): SmoSystemStaff {\r\n const params: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n params.staffId = jsonObj.staffId ?? 0;\r\n params.measures = [];\r\n params.modifiers = [];\r\n params.textBrackets = [];\r\n params.renumberingMap = jsonObj.renumberingMap ?? {};\r\n if (jsonObj.partInfo) {\r\n // Deserialize the text groups first\r\n const tgs: SmoTextGroup[] = [];\r\n jsonObj.partInfo.textGroups.forEach((tgSer: any) => {\r\n tgs.push(SmoTextGroup.deserializePreserveId(tgSer));\r\n });\r\n jsonObj.partInfo.textGroups = tgs;\r\n params.partInfo = SmoPartInfo.deserialize(jsonObj.partInfo);\r\n }\r\n // Up-convert legacy instrument info, which was split between different objects\r\n if (!jsonObj.measureInstrumentMap) {\r\n const jsonLegacy = jsonObj as any;\r\n if (jsonLegacy.instrumentInfo) {\r\n const defs = SmoInstrument.defaults;\r\n defs.keyOffset = jsonLegacy.instrumentInfo.keyOffset;\r\n defs.clef = jsonLegacy.instrumentInfo.clef;\r\n defs.instrumentName = jsonLegacy.instrumentInfo.instrumentName;\r\n const ii: SmoInstrument = new SmoInstrument(defs);\r\n params.measureInstrumentMap = { 0: ii };\r\n } else {\r\n const ii: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n params.measureInstrumentMap = { 0: ii };\r\n }\r\n params.measureInstrumentMap[0].startSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.measure = jsonObj.measures.length - 1;\r\n params.measureInstrumentMap[0].keyOffset = jsonObj.measures[0].transposeIndex ?? 0;\r\n } else {\r\n const ikeys = Object.keys(jsonObj.measureInstrumentMap);\r\n ikeys.forEach((ikey) => {\r\n const ix = parseInt(ikey, 10);\r\n const inst = jsonObj.measureInstrumentMap[ix];\r\n const defs = SmoInstrument.defaults;\r\n SmoInstrumentStringParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'string') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n SmoInstrumentNumParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'number') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n if (typeof(inst.startSelector) !== 'undefined') {\r\n defs.startSelector = inst.startSelector;\r\n }\r\n if (typeof(inst.endSelector) !== 'undefined') {\r\n defs.endSelector = inst.endSelector;\r\n }\r\n params.measureInstrumentMap[ix] = new SmoInstrument(defs);\r\n });\r\n }\r\n const instrumentAr = SmoSystemStaff.getStaffInstrumentArray(params.measureInstrumentMap);\r\n let curInstrumentIndex = 0;\r\n jsonObj.measures.forEach((measureObj: any) => {\r\n const measure = SmoMeasure.deserialize(measureObj);\r\n if (instrumentAr.length > (curInstrumentIndex + 1) && measure.measureNumber.measureIndex >=\r\n instrumentAr[curInstrumentIndex + 1].measureIndex) {\r\n curInstrumentIndex += 1;\r\n }\r\n measure.transposeIndex = instrumentAr[curInstrumentIndex].instrument.keyOffset;\r\n params.measures.push(measure);\r\n });\r\n if (jsonObj.modifiers) {\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const mod = StaffModifierBase.deserialize(modParams);\r\n mod.associatedStaff = jsonObj.staffId;\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n params.textBrackets!.push(mod as SmoStaffTextBracket);\r\n } else {\r\n params.modifiers.push(mod);\r\n }\r\n });\r\n }\r\n const rv = new SmoSystemStaff(params);\r\n return rv;\r\n }\r\n /**\r\n * We have created a score with staff mappings. Update the selectors in staff modifiers so that\r\n * 'from' in the staff slot is 'to'\r\n */\r\n mapStaffFromTo(from: number, to: number) {\r\n if (from === to) {\r\n return;\r\n }\r\n this.modifiers.forEach((mod) => {\r\n if (mod.startSelector.staff === from) {\r\n mod.startSelector.staff = to;\r\n }\r\n if (mod.endSelector.staff === from) {\r\n mod.endSelector.staff = to;\r\n }\r\n mod.associatedStaff = to; // this.staffId will remap to 'to' value\r\n });\r\n }\r\n updateMeasureFormatsForPart() {\r\n this.measures.forEach((measure, mix) => {\r\n if (this.partInfo.measureFormatting[mix]) {\r\n measure.format = new SmoMeasureFormat(this.partInfo.measureFormatting[mix]);\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n });\r\n }\r\n /**\r\n * Get the active instrument at the given measure\r\n * @param measureIndex\r\n * @returns\r\n */\r\n getStaffInstrument(measureIndex: number): SmoInstrument {\r\n return SmoSystemStaff.getStaffInstrument(this.measureInstrumentMap, measureIndex);\r\n }\r\n getInstrumentList(): SmoInstrument[] {\r\n const rv: SmoInstrument[] = [];\r\n const keys = Object.keys(this.measureInstrumentMap);\r\n keys.forEach((key) => {\r\n rv.push(this.getStaffInstrument(parseInt(key)));\r\n });\r\n return rv;\r\n }\r\n updateInstrumentOffsets() {\r\n const ar = SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap);\r\n ar.forEach((entry) => {\r\n let i = entry.instrument.startSelector.measure;\r\n for (i; i <= entry.instrument.endSelector.measure && i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const concertKey = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n const targetKey = SmoMusic.vexKeySigWithOffset(concertKey, entry.instrument.keyOffset);\r\n measure.transposeToOffset(entry.instrument.keyOffset, targetKey, entry.instrument.clef);\r\n measure.transposeIndex = entry.instrument.keyOffset;\r\n measure.keySignature = targetKey;\r\n measure.setClef(entry.instrument.clef);\r\n }\r\n });\r\n }\r\n isRest(index: number) {\r\n return this.measures[index].isRest();\r\n }\r\n isRepeat(index: number) {\r\n const specialBar = !(this.measures[index].getEndBarline().barline === SmoBarline.barlines.singleBar &&\r\n (this.measures[index].getStartBarline().barline === SmoBarline.barlines.singleBar ||\r\n this.measures[index].getStartBarline().barline === SmoBarline.barlines.noBar));\r\n return specialBar || this.measures[index].repeatSymbol;\r\n }\r\n isRepeatSymbol(index: number) {\r\n return this.measures[index].repeatSymbol;\r\n }\r\n isRehearsal(index: number) {\r\n return !(typeof(this.measures[index].getRehearsalMark()) === 'undefined');\r\n }\r\n\r\n // ### addStaffModifier\r\n // add a staff modifier, or replace a modifier of same type\r\n // with same endpoints.\r\n addStaffModifier(modifier: StaffModifierBase) {\r\n this.removeStaffModifier(modifier);\r\n this.modifiers.push(modifier);\r\n modifier.associatedStaff = this.staffId;\r\n }\r\n\r\n // ### removeStaffModifier\r\n // Remove a modifier of given type and location\r\n removeStaffModifier(modifier: StaffModifierBase) {\r\n const mods: StaffModifierBase[] = [];\r\n const tbs: SmoStaffTextBracket[] = [];\r\n this.renderableModifiers.forEach((mod: StaffModifierBase) => {\r\n if (mod.attrs.type !== modifier.attrs.type ||\r\n SmoSelector.neq(mod.startSelector, modifier.startSelector) ||\r\n SmoSelector.neq(mod.endSelector, modifier.endSelector)) {\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n tbs.push(mod as SmoStaffTextBracket);\r\n } else {\r\n mods.push(mod);\r\n }\r\n }\r\n });\r\n this.textBrackets = tbs;\r\n this.modifiers = mods;\r\n }\r\n // ### getVoltaMap\r\n getVoltaMap(startIndex: number, endIndex: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startBar >= startIndex && ending.endBar <= endIndex) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n getVoltasForMeasure(ix: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startSelector?.measure === ix || ending.endSelector?.measure === ix) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n // ### getModifiersAt\r\n // get any modifiers at the selected location\r\n getModifiersAt(selector: SmoSelector): StaffModifierBase[] {\r\n const rv: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n if (SmoSelector.sameNote(mod.startSelector, selector)) {\r\n rv.push(mod);\r\n }\r\n });\r\n return rv;\r\n }\r\n getModifier(modData: any) {\r\n return this.renderableModifiers.find((mod) =>\r\n SmoSelector.eq(mod.startSelector, modData.startSelector) && mod.attrs.type === modData.attrs.type);\r\n }\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricFont(fontInfo);\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n setChordFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordFont(fontInfo);\r\n });\r\n }\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n addTextBracket(bracketParams: SmoStaffTextBracket) { \r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n brackets.push(new SmoStaffTextBracket(bracketParams));\r\n this.textBrackets = brackets;\r\n }\r\n removeTextBracket(bracketParams: SmoStaffTextBracket) { \r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n this.textBrackets = brackets;\r\n }\r\n getTextBracketsStartingAt(selector: SmoSelector) {\r\n return this.textBrackets.filter((tb) => SmoSelector.eq(tb.startSelector, selector));\r\n }\r\n\r\n // ### getSlursStartingAt\r\n // like it says. Used by audio player to slur notes\r\n getSlursStartingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoSlur'\r\n );\r\n }\r\n // ### getSlursEndingAt\r\n // like it says.\r\n getSlursEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector)\r\n );\r\n }\r\n\r\n getTiesStartingAt(selector: SmoSelector): SmoTie[] {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoTie'\r\n ) as SmoTie[];\r\n }\r\n\r\n getTiesEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoTie'\r\n );\r\n }\r\n\r\n // ### accesor getModifiers\r\n getModifiers() {\r\n return this.modifiers;\r\n }\r\n\r\n // ### applyBeams\r\n // group all the measures' notes into beam groups.\r\n applyBeams() {\r\n for (let i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n SmoBeamer.applyBeams(measure);\r\n }\r\n }\r\n\r\n // ### addRehearsalMark\r\n // for all measures in the system, and also bump the\r\n // auto-indexing\r\n addRehearsalMark(index: number, parameters: SmoRehearsalMarkParams) {\r\n let i = 0;\r\n let symbol = '';\r\n var mark = new SmoRehearsalMark(parameters);\r\n if (!mark.increment) {\r\n this.measures[index].addRehearsalMark(mark);\r\n return;\r\n }\r\n\r\n symbol = mark.symbol;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (i < index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n symbol = rm.getIncrement();\r\n mark.symbol = symbol;\r\n }\r\n }\r\n if (i === index) {\r\n mm.addRehearsalMark(mark);\r\n symbol = mark.getIncrement();\r\n }\r\n if (i > index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n rm.symbol = symbol;\r\n symbol = rm.getIncrement();\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeTempo(index: number) {\r\n this.measures[index].resetTempo();\r\n }\r\n\r\n addTempo(tempo: SmoTempoTextParams, index: number) {\r\n this.measures[index].setTempo(tempo);\r\n }\r\n\r\n // ### removeRehearsalMark\r\n // for all measures in the system, and also decrement the\r\n // auto-indexing\r\n removeRehearsalMark(index: number) {\r\n let ix: number = 0;\r\n let symbol: string | null = null;\r\n let card: string | null = null;\r\n this.measures.forEach((measure) => {\r\n if (ix === index) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark) {\r\n symbol = mark.symbol;\r\n card = mark.cardinality;\r\n }\r\n measure.removeRehearsalMark();\r\n }\r\n if (ix > index && symbol && card) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark && mark.increment) {\r\n mark.symbol = symbol;\r\n symbol = mark.getIncrement();\r\n }\r\n }\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ### deleteMeasure\r\n // delete the measure, and any staff modifiers that start/end there.\r\n deleteMeasure(index: number) {\r\n if (this.measures.length < 2) {\r\n return; // don't delete last measure.\r\n }\r\n const nm: SmoMeasure[] = [];\r\n this.measures.forEach((measure) => {\r\n if (measure.measureNumber.measureIndex !== index) {\r\n nm.push(measure);\r\n }\r\n });\r\n const sm: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n // Bug: if we are deleting a measure before the selector, change the measure number.\r\n if (mod.startSelector.measure !== index && mod.endSelector.measure !== index) {\r\n if (index < mod.startSelector.measure) {\r\n mod.startSelector.measure -= 1;\r\n }\r\n if (index < mod.endSelector.measure) {\r\n mod.endSelector.measure -= 1;\r\n }\r\n sm.push(mod);\r\n }\r\n });\r\n const instMap: Record = {};\r\n SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap).forEach((mm) => {\r\n if (mm.instrument.startSelector.measure > index || mm.instrument.startSelector.measure > this.measures.length - 1) {\r\n mm.instrument.startSelector.measure -= 1;\r\n }\r\n if (mm.instrument.endSelector.measure > index || mm.instrument.endSelector.measure > this.measures.length - 1) {\r\n mm.instrument.endSelector.measure -= 1;\r\n }\r\n instMap[mm.instrument.startSelector.measure] = new SmoInstrument(mm.instrument);\r\n });\r\n this.measures = nm;\r\n this.modifiers = sm;\r\n this.numberMeasures();\r\n }\r\n\r\n // ### addKeySignature\r\n // Add key signature to the given measure and update map so we know\r\n // when it changes, cancels etc.\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.keySignatureMap[measureIndex] = key;\r\n const target = this.measures[measureIndex];\r\n target.keySignature = key;\r\n }\r\n\r\n _updateKeySignatures() {\r\n let i = 0;\r\n const currentSig = this.measures[0].keySignature;\r\n\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const nextSig = this.keySignatureMap[i] ? this.keySignatureMap[i] : currentSig;\r\n measure.setKeySignature(nextSig);\r\n }\r\n }\r\n\r\n // ### numberMeasures\r\n // After anything that might change the measure numbers, update them iteratively\r\n numberMeasures() {\r\n let i: number = 0;\r\n let localIndex = 0;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n if (typeof(this.renumberingMap[i]) === 'number') {\r\n localIndex = this.renumberingMap[i];\r\n } else {\r\n localIndex += 1;\r\n }\r\n // If this is the first full measure, call it '1'\r\n const numberObj: MeasureNumber = {\r\n localIndex,\r\n measureIndex: i,\r\n systemIndex: i,\r\n staffId: this.staffId\r\n };\r\n measure.setMeasureNumber(numberObj);\r\n }\r\n }\r\n\r\n addDefaultMeasure(index: number, params: SmoMeasure) {\r\n const measure = SmoMeasure.getDefaultMeasure(params);\r\n this.addMeasure(index, measure);\r\n }\r\n\r\n // ## addMeasure\r\n // ## Description:\r\n // Add the measure at the specified index, splicing the array as required.\r\n addMeasure(index: number, measure: SmoMeasure) {\r\n if (index === 0 && this.measures.length) {\r\n measure.setMeasureNumber(this.measures[0].measureNumber);\r\n }\r\n if (index >= this.measures.length) {\r\n this.measures.push(measure);\r\n } else {\r\n this.measures.splice(index, 0, measure);\r\n }\r\n const modifiers = this.modifiers.filter((mod) => mod.startSelector.measure >= index);\r\n modifiers.forEach((mod) => {\r\n if (mod.startSelector.measure < this.measures.length) {\r\n mod.startSelector.measure += 1;\r\n }\r\n if (mod.endSelector.measure < this.measures.length) {\r\n mod.endSelector.measure += 1;\r\n }\r\n });\r\n this.numberMeasures();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoTuplet}\r\n * @module /smo/data/tuplet\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNote, SmoNoteParamsSer } from './note';\r\nimport { SmoMusic } from './music';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport { getId, SmoAttrs, Clef } from './common';\r\n\r\n/**\r\n * Parameters for tuplet construction\r\n * @param notes - runtime instance of tuplet has an actual instance of \r\n * notes. The note instances are created by the deserilization of the \r\n * measure. We serialize the note parameters so we can identify the correct notes\r\n * when deserializing.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTupletParams {\r\n notes: SmoNote[],\r\n attrs?: SmoAttrs,\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n durationMap: number[],\r\n ratioed: boolean,\r\n bracketed: boolean,\r\n voice: number,\r\n startIndex: number\r\n}\r\n/**\r\n * serializabl bits of SmoTuplet\r\n * @category serialization\r\n */\r\nexport interface SmoTupletParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * info about the serialized notes\r\n */\r\n notes: SmoNoteParamsSer[],\r\n /**\r\n * numNotes in the duplet (not necessarily same as notes array size)\r\n */\r\n numNotes: number,\r\n /**\r\n * used to decide how to beam, 2048 for 1/4 triplet for instance\r\n */\r\n stemTicks: number,\r\n /**\r\n * total ticks to squeeze numNotes\r\n */\r\n totalTicks: number,\r\n /**\r\n * map of notes to ticks\r\n */\r\n durationMap: number[],\r\n /**\r\n * whether to use the :\r\n */\r\n ratioed: boolean,\r\n /**\r\n * whether to show the brackets\r\n */\r\n bracketed: boolean,\r\n /**\r\n * which voice the tuplet applies to\r\n */\r\n voice: number,\r\n /**\r\n * the start tick index of the measure\r\n */\r\n startIndex: number\r\n}\r\n\r\n/**\r\n * tuplets must be serialized with their id attribute, enforce this\r\n * @param params a possible-valid SmoTupletParamsSer\r\n * @returns \r\n */\r\nfunction isSmoTupletParamsSer(params: Partial): params is SmoTupletParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoTuplet')) {\r\n return false;\r\n }\r\n if (!params.attrs || !(typeof(params.attrs.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A tuplet is a container for notes within a measure\r\n * @category SmoObject\r\n */\r\nexport class SmoTuplet {\r\n static get defaults(): SmoTupletParams {\r\n return JSON.parse(JSON.stringify({\r\n notes: [],\r\n numNotes: 3,\r\n stemTicks: 2048,\r\n totalTicks: 4096, // how many ticks this tuple takes up\r\n durationMap: [1.0, 1.0, 1.0],\r\n bracketed: true,\r\n voice: 0,\r\n ratioed: false,\r\n startIndex: 0\r\n }));\r\n }\r\n attrs: SmoAttrs;\r\n notes: SmoNote[];\r\n numNotes: number = 3;\r\n stemTicks: number = 2048;\r\n totalTicks: number = 4096;\r\n durationMap: number[] = [1.0, 1.0, 1.0];\r\n bracketed: boolean = true;\r\n voice: number = 0;\r\n ratioed: boolean = false;\r\n startIndex: number = 0;\r\n\r\n get clonedParams() {\r\n const paramAr = ['stemTicks', 'ticks', 'totalTicks', 'durationMap', 'numNotes'];\r\n const rv = {};\r\n smoSerialize.serializedMerge(paramAr, this, rv);\r\n return rv;\r\n }\r\n\r\n static get parameterArray() {\r\n return ['stemTicks', 'ticks', 'totalTicks',\r\n 'durationMap', 'attrs', 'ratioed', 'bracketed', 'voice', 'startIndex', 'numNotes'];\r\n }\r\n\r\n serialize(): SmoTupletParamsSer {\r\n const params:Partial = {\r\n notes: []\r\n };\r\n this.notes.forEach((nn) => {\r\n params.notes!.push(nn.serialize());\r\n });\r\n params.ctor = 'SmoTuplet';\r\n smoSerialize.serializedMergeNonDefault(SmoTuplet.defaults,\r\n SmoTuplet.parameterArray, this, params);\r\n if (!isSmoTupletParamsSer(params)) {\r\n throw 'bad tuplet ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n\r\n static calculateStemTicks(totalTicks: number, numNotes: number) {\r\n const stemValue = totalTicks / numNotes;\r\n let stemTicks = SmoTuplet.longestTuplet;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (stemValue < stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n return stemTicks * 2;\r\n }\r\n constructor(params: SmoTupletParams) {\r\n smoSerialize.vexMerge(this, SmoTuplet.defaults);\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, params, this);\r\n this.notes = params.notes;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTuplet'\r\n };\r\n this._adjustTicks();\r\n }\r\n static get longestTuplet() {\r\n return 8192;\r\n }\r\n static cloneTuplet(tuplet: SmoTuplet): SmoTuplet {\r\n let i = 0;\r\n const noteAr = tuplet.notes;\r\n const durationMap = JSON.parse(JSON.stringify(tuplet.durationMap)); // deep copy array\r\n\r\n // Add any remainders for oddlets\r\n const totalTicks = noteAr.map((nn) => nn.ticks.numerator + nn.ticks.remainder)\r\n .reduce((acc, nn) => acc + nn);\r\n\r\n const numNotes: number = tuplet.numNotes;\r\n const stemTicks = SmoTuplet.calculateStemTicks(totalTicks, numNotes);\r\n\r\n const tupletNotes: SmoNote[] = [];\r\n\r\n noteAr.forEach((note) => {\r\n const textModifiers = note.textModifiers;\r\n // Note preserver remainder\r\n note = SmoNote.cloneWithDuration(note, {\r\n numerator: stemTicks * tuplet.durationMap[i],\r\n denominator: 1,\r\n remainder: note.ticks.remainder\r\n });\r\n\r\n // Don't clone modifiers, except for first one.\r\n if (i === 0) {\r\n const ntmAr: any = [];\r\n textModifiers.forEach((tm) => {\r\n const ntm = SmoNoteModifierBase.deserialize(tm);\r\n ntmAr.push(ntm);\r\n });\r\n note.textModifiers = ntmAr;\r\n }\r\n i += 1;\r\n tupletNotes.push(note);\r\n });\r\n const rv = new SmoTuplet({\r\n numNotes: tuplet.numNotes,\r\n voice: tuplet.voice,\r\n notes: tupletNotes,\r\n stemTicks,\r\n totalTicks,\r\n ratioed: false,\r\n bracketed: true,\r\n startIndex: tuplet.startIndex,\r\n durationMap\r\n });\r\n return rv;\r\n }\r\n\r\n _adjustTicks() {\r\n let i = 0;\r\n const sum = this.durationSum;\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n // TODO: notes_occupied needs to consider vex duration\r\n note.ticks.denominator = 1;\r\n note.ticks.numerator = Math.floor((this.totalTicks * this.durationMap[i]) / sum);\r\n note.tuplet = this.attrs;\r\n }\r\n\r\n // put all the remainder in the first note of the tuplet\r\n const noteTicks = this.notes.map((nn) => nn.tickCount)\r\n .reduce((acc, dd) => acc + dd);\r\n // bug fix: if this is a clones tuplet, remainder is already set\r\n this.notes[0].ticks.remainder =\r\n this.notes[0].ticks.remainder + this.totalTicks - noteTicks;\r\n }\r\n getIndexOfNote(note: SmoNote | null): number {\r\n let rv = -1;\r\n let i = 0;\r\n if (!note) {\r\n return -1;\r\n }\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const tn = this.notes[i];\r\n if (note.attrs.id === tn.attrs.id) {\r\n rv = i;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n split(combineIndex: number) {\r\n let i = 0;\r\n const multiplier = 0.5;\r\n const nnotes: SmoNote[] = [];\r\n const nmap: number[] = [];\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (i === combineIndex) {\r\n nmap.push(this.durationMap[i] * multiplier);\r\n nmap.push(this.durationMap[i] * multiplier);\r\n note.ticks.numerator *= multiplier;\r\n\r\n const onote = SmoNote.clone(note);\r\n // remainder is for the whole tuplet, so don't duplicate that.\r\n onote.ticks.remainder = 0;\r\n nnotes.push(note);\r\n nnotes.push(onote);\r\n } else {\r\n nmap.push(this.durationMap[i]);\r\n nnotes.push(note);\r\n }\r\n }\r\n this.notes = nnotes;\r\n this.durationMap = nmap;\r\n }\r\n combine(startIndex: number, endIndex: number) {\r\n let i = 0;\r\n let base = 0.0;\r\n let acc = 0.0;\r\n // can't combine in this way, too many notes\r\n if (this.notes.length <= endIndex || startIndex >= endIndex) {\r\n return this;\r\n }\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n acc += this.durationMap[i];\r\n if (i === startIndex) {\r\n base = this.durationMap[i];\r\n } else if (this.durationMap[i] !== base) {\r\n // Can't combine non-equal tuplet notes\r\n return this;\r\n }\r\n }\r\n // how much each combined value will be multiplied by\r\n const multiplier = acc / base;\r\n\r\n const nmap = [];\r\n const nnotes = [];\r\n // adjust the duration map\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n // notes that don't change are unchanged\r\n if (i < startIndex || i > endIndex) {\r\n nmap.push(this.durationMap[i]);\r\n nnotes.push(note);\r\n }\r\n // changed note with combined duration\r\n if (i === startIndex) {\r\n note.ticks.numerator = note.ticks.numerator * multiplier;\r\n nmap.push(acc);\r\n nnotes.push(note);\r\n }\r\n // other notes after startIndex are removed from the map.\r\n }\r\n this.notes = nnotes;\r\n this.durationMap = nmap;\r\n return this;\r\n }\r\n\r\n // ### getStemDirection\r\n // Return the stem direction, so we can bracket the correct place\r\n getStemDirection(clef: Clef) {\r\n const note = this.notes.find((nn) => nn.noteType === 'n');\r\n if (!note) {\r\n return SmoNote.flagStates.down;\r\n }\r\n if (note.flagState !== SmoNote.flagStates.auto) {\r\n return note.flagState;\r\n }\r\n return SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n get durationSum() {\r\n let acc = 0;\r\n let i = 0;\r\n for (i = 0; i < this.durationMap.length; ++i) {\r\n acc += this.durationMap[i];\r\n }\r\n return Math.round(acc);\r\n }\r\n get num_notes() {\r\n return this.durationSum;\r\n }\r\n get notes_occupied() {\r\n return Math.floor(this.totalTicks / this.stemTicks);\r\n }\r\n get note_ticks_occupied() {\r\n return this.totalTicks / this.stemTicks;\r\n }\r\n get tickCount() {\r\n let rv = 0;\r\n let i = 0;\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n rv += (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Convert midi to Smo object model. Midi parsing code from:\r\n * @module /smo/midi/midiToSmo\r\n */\r\nimport { SmoToMidi } from \"./smoToMidi\";\r\nimport { Clef, Pitch } from \"../data/common\";\r\nimport { SmoMeasure } from \"../data/measure\";\r\nimport { SmoTempoText, TimeSignature } from \"../data/measureModifiers\";\r\nimport { SmoMusic } from \"../data/music\";\r\nimport { SmoNote } from \"../data/note\";\r\nimport { SmoScore } from \"../data/score\";\r\nimport { SmoLayoutManager } from \"../data/scoreModifiers\";\r\nimport { SmoTie } from \"../data/staffModifiers\";\r\nimport { SmoSystemStaff } from \"../data/systemStaff\";\r\nimport { SmoTuplet } from \"../data/tuplet\";\r\n\r\nexport type MidiEventType = 'text' | 'copyrightNotice' | 'trackName' | 'instrumentName' | 'lyrics' | 'marker' |\r\n 'cuePoint' | 'channelPrefix' | 'portPrefix' | 'endOfTrack' | 'setTempo' | 'smpteOffset' | 'timeSignature' | 'keySignature' |\r\n 'sequencerSpecific' | 'unknownMeta' |\r\n 'noteOff' | 'noteOn' | 'noteAftertouch' | 'controller' | 'programChange' | 'channelAftertouch' | 'pitchBend';\r\n\r\n/**\r\n * These are the midi events as defined by the parser.\r\n */\r\nexport interface MidiTrackEvent {\r\n deltaTime: number,\r\n meta?: boolean,\r\n numerator?: number,\r\n denominator?: number,\r\n microsecondsPerBeat?: number,\r\n scale?: number,\r\n key?: number,\r\n metronome?: number,\r\n thirtyseconds?: number,\r\n type: MidiEventType,\r\n channel?: number,\r\n noteNumber?: number,\r\n velocity?: number\r\n}\r\ninterface RunningMetadata {\r\n keySignature: string,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText\r\n}\r\ninterface MidiNoteOn {\r\n channel: number,\r\n note: number,\r\n smoIndex: number\r\n}\r\ninterface MidiTupletInfo {\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n isLast: boolean\r\n}\r\ninterface EventSmoData {\r\n pitches: Pitch[],\r\n durationTicks: number,\r\n tupletInfo: MidiTupletInfo | null,\r\n isRest: boolean,\r\n isTied: boolean,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText,\r\n keySignature: string,\r\n measure: number,\r\n tick: number\r\n}\r\n\r\nfunction getValueForTick(arg: Record, tick: number) {\r\n const keys = Object.keys(arg);\r\n let maxKey = 0;\r\n let rv = arg[0];\r\n keys.forEach((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt <= tick && keyInt > maxKey && arg[keyInt]) {\r\n rv = arg[maxKey];\r\n maxKey = keyInt;\r\n }\r\n });\r\n return rv;\r\n}\r\n/**\r\n * Converts a JSON midi file to a {@link SmoScore}\r\n * @category SmoToMidi\r\n */\r\nexport class MidiToSmo {\r\n timeSignatureMap: Record = {};\r\n tempoMap: Record = {};\r\n keySignatureMap: Record = {};\r\n tieMap: Record = {};\r\n timeDivision: number = 480;\r\n trackIndex: number = 0;\r\n eventIndex: number = 0; // index into current track\r\n maxMeasure: number = 0;\r\n quantizeTicks: number = MidiToSmo.quantizeTicksDefault;\r\n eot: boolean = false;\r\n midiOnNotes: Record = {};\r\n\r\n midi: any; // MIDI JSON from MIDI parser\r\n static get quantizeTicksDefault() {\r\n return 1024;\r\n }\r\n /**\r\n * Since midi has very little metadata, we don't know the original clef.\r\n * so just use the one (treble or bass) that uses the fewest ledger lines\r\n * @internal\r\n * @param notes notes in measure\r\n * @returns \r\n */\r\n static guessClefForNotes(measure: SmoMeasure): Clef {\r\n let trebleMax = 0;\r\n let bassMax = 0;\r\n measure.voices[0].notes.forEach((note) => {\r\n note.pitches.forEach((pitch) => {\r\n const tl = Math.abs(SmoMusic.pitchToStaffLine('treble', pitch));\r\n const bl = Math.abs(SmoMusic.pitchToStaffLine('bass', pitch));\r\n trebleMax = Math.max(trebleMax, tl);\r\n bassMax = Math.max(bassMax, bl);\r\n })\r\n });\r\n const clef: Clef = trebleMax <= bassMax ? 'treble' : 'bass';\r\n measure.clef = clef;\r\n // For rests, make sure the rest is centered in the clef\r\n measure.voices[0].notes.forEach((note) => {\r\n if (note.noteType === 'r') {\r\n note.pitches = [SmoMeasure.defaultPitchForClef[clef]];\r\n }\r\n note.clef = clef;\r\n });\r\n return clef;\r\n }\r\n /**\r\n * Create an object to convert MIDI to a {@link SmoScore}\r\n * @param midi the output of midi parser\r\n * @param quantizeDuration ticks to quantize (1024 == 16th note)\r\n */\r\n constructor(midi: any, quantizeDuration: number) {\r\n this.midi = midi;\r\n // console.log(JSON.stringify(midi, null, ''));\r\n this.timeSignatureMap[0] = new TimeSignature(TimeSignature.defaults);\r\n this.tempoMap[0] = new SmoTempoText(SmoTempoText.defaults);\r\n this.keySignatureMap[0] = 'c';\r\n this.timeDivision = midi.header.ticksPerBeat;\r\n this.quantizeTicks = quantizeDuration;\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTempo(ticks: number) {\r\n if (this.tempoMap[ticks]) {\r\n return this.tempoMap[ticks];\r\n }\r\n return getValueForTick(this.tempoMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTimeSignature(ticks: number): TimeSignature {\r\n if (this.timeSignatureMap[ticks]) {\r\n return this.timeSignatureMap[ticks];\r\n }\r\n return getValueForTick(this.timeSignatureMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getKeySignature(ticks: number) {\r\n if (this.keySignatureMap[ticks]) {\r\n return this.keySignatureMap[ticks];\r\n }\r\n return getValueForTick(this.keySignatureMap, ticks);\r\n }\r\n /**\r\n * Get metadata from the map for this point in the score\r\n * @param ticks current point in track\r\n * @returns \r\n */\r\n getMetadata(ticks: number) {\r\n return { tempo: this.getTempo(ticks), timeSignature: this.getTimeSignature(ticks), keySignature: this.getKeySignature(ticks) };\r\n }\r\n /**\r\n * We process 3 types of metadata at present: time signature, tempo and keysignature.\r\n * @param trackEvent \r\n * @param ticks \r\n */\r\n handleMetadata(trackEvent: MidiTrackEvent, ticks: number) {\r\n if (trackEvent.meta) {\r\n const mtype = trackEvent.type;\r\n if (mtype === 'timeSignature') {\r\n /**\r\n * whenever we get a time signature event, recompute ticks per measure\r\n */\r\n const numerator = trackEvent.numerator!;\r\n const denominator = trackEvent.denominator!;\r\n const tsDef = TimeSignature.defaults;\r\n tsDef.actualBeats = numerator;\r\n tsDef.beatDuration = denominator;\r\n const ts = new TimeSignature(tsDef);\r\n this.timeSignatureMap[ticks] = ts;\r\n } else if (mtype === 'setTempo') {\r\n const bpm = 60 / (trackEvent.microsecondsPerBeat! / 1000000);\r\n const tempoDef = SmoTempoText.defaults;\r\n tempoDef.bpm = bpm;\r\n this.tempoMap[ticks] = new SmoTempoText(tempoDef);\r\n } else if (mtype === 'keySignature') {\r\n const mdata = trackEvent.key!;\r\n if (mdata === 0) {\r\n this.keySignatureMap[ticks] = 'C';\r\n } else {\r\n // there seem to be different ways to encode this...\r\n let signed = mdata / 256;\r\n if (signed > 7) {\r\n signed = -1 * (256 - signed);\r\n }\r\n if (Math.abs(mdata) < 256) {\r\n signed = mdata;\r\n }\r\n this.keySignatureMap[ticks] = SmoMusic.midiKeyToVexKey(signed);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Convert from Midi PPQ to Smoosic (and vex) ticks\r\n * @internal\r\n */\r\n getSmoTicks(midiTicks: number) {\r\n return 4096 * midiTicks / this.timeDivision;\r\n }\r\n /**\r\n * @internal\r\n */\r\n createNewEvent(metadata: RunningMetadata): EventSmoData {\r\n return {\r\n pitches: [], durationTicks: 0, tupletInfo: null, isRest: false, timeSignature: new TimeSignature(metadata.timeSignature),\r\n tempo: new SmoTempoText(metadata.tempo), keySignature: metadata.keySignature, measure: 0, tick: 0, isTied: false\r\n };\r\n }\r\n /**\r\n * @internal\r\n */\r\n static copyEvent(o: EventSmoData): EventSmoData {\r\n const pitches = JSON.parse(JSON.stringify(o.pitches));\r\n const timeSignature = new TimeSignature(o.timeSignature);\r\n const tempo = new SmoTempoText(o.tempo);\r\n return ({\r\n pitches, durationTicks: o.durationTicks, tupletInfo: o.tupletInfo, isRest: o.isRest, timeSignature, tempo, keySignature: o.keySignature,\r\n measure: o.measure, tick: o.tick, isTied: o.isTied\r\n });\r\n }\r\n /**\r\n * @internal\r\n */\r\n addToTieMap(measureIndex: number) {\r\n const staffIx = this.trackIndex;\r\n if (typeof (this.tieMap[staffIx]) === 'undefined') {\r\n this.tieMap[staffIx] = [];\r\n }\r\n this.tieMap[staffIx].push(measureIndex);\r\n }\r\n /**\r\n * Step 3 in the 3-step process. Quantize the note durations and convert the midi\r\n * event into SmoNotes.\r\n * @param events \r\n * @returns \r\n */\r\n createNotesFromEvents(events: EventSmoData[]): SmoMeasure[] {\r\n let measureIndex = 0;\r\n const measures: SmoMeasure[] = [];\r\n let measure: SmoMeasure | null = null;\r\n let deficit = 0;\r\n // If the midi event is smaller than the smallest note..\r\n const smallest = 1 * (this.quantizeTicks / 4);\r\n events.forEach((ev) => {\r\n if (measure === null || ev.measure > measureIndex) {\r\n const measureDefs = SmoMeasure.defaults;\r\n measureDefs.keySignature = ev.keySignature;\r\n measureDefs.timeSignature = new TimeSignature(ev.timeSignature);\r\n measureDefs.tempo = new SmoTempoText(ev.tempo);\r\n measure = new SmoMeasure(measureDefs);\r\n measure.voices.push({ notes: [] });\r\n measureIndex = ev.measure;\r\n measures.push(measure);\r\n }\r\n if (Math.abs(ev.durationTicks - deficit) < smallest && !(ev.tupletInfo !== null)) {\r\n deficit = deficit - ev.durationTicks;\r\n } else {\r\n const best = SmoMusic.midiTickSearch(ev.durationTicks - deficit, this.quantizeTicks);\r\n deficit += best.result - ev.durationTicks;\r\n ev.durationTicks = best.result;\r\n const defs = SmoNote.defaults;\r\n defs.ticks.numerator = ev.durationTicks;\r\n defs.pitches = JSON.parse(JSON.stringify(ev.pitches));\r\n defs.noteType = ev.isRest ? 'r' : 'n';\r\n const note = new SmoNote(defs);\r\n SmoNote.sortPitches(note);\r\n measure.voices[0].notes.push(note);\r\n if (ev.tupletInfo !== null && ev.tupletInfo.isLast === true) {\r\n const voiceLen = measure.voices[0].notes.length;\r\n const tupletNotes = [note, measure.voices[0].notes[voiceLen - 2], measure.voices[0].notes[voiceLen - 3]];\r\n const defs = SmoTuplet.defaults;\r\n defs.notes = tupletNotes;\r\n defs.stemTicks = ev.tupletInfo.stemTicks;\r\n defs.numNotes = ev.tupletInfo.numNotes;\r\n defs.totalTicks = ev.tupletInfo.totalTicks;\r\n defs.startIndex = voiceLen - 3;\r\n measure.tuplets.push(new SmoTuplet(defs));\r\n }\r\n if (ev.isTied) {\r\n this.addToTieMap(measureIndex);\r\n }\r\n }\r\n });\r\n measures.forEach((measure) => {\r\n measure.clef = MidiToSmo.guessClefForNotes(measure);\r\n });\r\n return measures;\r\n }\r\n /**\r\n * @param ticks \r\n * @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0\r\n */\r\n tripletType(ticks: number): number {\r\n const tripletBeat = Math.round(4096 / 3);\r\n const tripletHalf = Math.round((4096 * 2) / 3);\r\n const tripletEighth = Math.round((4096 / 2) / 3);\r\n const beatTrip = tripletBeat / ticks;\r\n const eigthTrip = tripletEighth / ticks;\r\n const halfTrip = tripletHalf / ticks;\r\n if (Math.abs(1 - beatTrip) < 0.05) {\r\n return 4096;\r\n }\r\n if (Math.abs(1 - eigthTrip) < 0.05) {\r\n return 2048;\r\n }\r\n if (Math.abs(1 - halfTrip) < 0.05) {\r\n return 4096 * 2;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * step 2 in the 3 step process. Divide the music up into measures based on\r\n * tick duration. If there are events overlapping measures, create extra events in the\r\n * new measure (hence the expand) and shorten the original event\r\n * @param events\r\n * @returns \r\n */\r\n expandMidiEvents(events: EventSmoData[]): EventSmoData[] {\r\n const rv: EventSmoData[] = [];\r\n if (events.length === 0) {\r\n return rv;\r\n }\r\n let i = 0;\r\n let ticksSoFar = 0;\r\n let measure = 0;\r\n let tick = 0;\r\n let tripletCount = 0;\r\n let tripletValue = 0;\r\n for (i = 0; i < events.length; ++i) {\r\n const ev = events[i];\r\n // If it's too small, continue. Don't record the event but do count the ticks\r\n if (ev.durationTicks < 128) {\r\n ticksSoFar += ev.durationTicks;\r\n continue;\r\n }\r\n const ticksPerMeasure = SmoMusic.timeSignatureToTicks(ev.timeSignature.timeSignature);\r\n const nevent = MidiToSmo.copyEvent(ev);\r\n if (ticksSoFar + ev.durationTicks > ticksPerMeasure) {\r\n nevent.durationTicks = ticksPerMeasure - ticksSoFar;\r\n if (nevent.durationTicks > 0) {\r\n rv.push(nevent);\r\n nevent.tick = tick;\r\n }\r\n tick = 0;\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n measure += 1;\r\n ticksSoFar = 0;\r\n this.maxMeasure = Math.max(this.maxMeasure, measure);\r\n let overflow = ev.durationTicks - nevent.durationTicks;\r\n while (overflow > ticksPerMeasure) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.tick = tick;\r\n ovfEvent.measure = measure;\r\n tick += 1;\r\n measure += 1;\r\n ovfEvent.durationTicks = ticksPerMeasure;\r\n rv.push(ovfEvent);\r\n overflow -= ticksPerMeasure;\r\n }\r\n if (overflow > 0) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.isTied = true;\r\n ovfEvent.durationTicks = overflow;\r\n ovfEvent.measure = measure;\r\n ovfEvent.tick = tick;\r\n ticksSoFar += ovfEvent.durationTicks;\r\n tick += 1;\r\n rv.push(ovfEvent);\r\n overflow = 0;\r\n }\r\n } else {\r\n ticksSoFar += ev.durationTicks;\r\n // Try to infer the presence of triplets. If it looks like a triplet, mark it and we will\r\n // create the tuplet when we create the measure.\r\n const possibleTriplet = this.tripletType(nevent.durationTicks);\r\n if (possibleTriplet > 0 && (tripletValue === 0 || possibleTriplet === tripletValue)) {\r\n tripletCount += 1;\r\n tripletValue = possibleTriplet;\r\n if (tripletCount === 3) {\r\n nevent.tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: true\r\n };\r\n rv[rv.length - 1].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n rv[rv.length - 2].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n } else {\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n rv.push(nevent);\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Store midi on events. If the midi on or off matches an existing\r\n * stored event based on channel and note, return it so it can be processed\r\n * @param ev raw event\r\n * @param evIndex index of processed events\r\n * @returns \r\n */\r\n pushPopMidiEvent(ev: MidiTrackEvent, evIndex: number): MidiNoteOn | null {\r\n let rv: MidiNoteOn | null = null;\r\n if (!ev.noteNumber || typeof (ev.channel) === 'undefined') {\r\n return null;\r\n }\r\n if (this.midiOnNotes[ev.noteNumber]) {\r\n const ix = this.midiOnNotes[ev.noteNumber].findIndex((x) => x.channel === ev.channel);\r\n if (ix >= 0) {\r\n rv = JSON.parse(JSON.stringify(this.midiOnNotes[ev.noteNumber][ix]));\r\n this.midiOnNotes[ev.noteNumber].splice(ix);\r\n }\r\n }\r\n if (!this.midiOnNotes[ev.noteNumber]) {\r\n this.midiOnNotes[ev.noteNumber] = [];\r\n }\r\n if (ev.type === 'noteOn' && ev.velocity && ev.velocity > 0) {\r\n this.midiOnNotes[ev.noteNumber].push({\r\n note: ev.noteNumber,\r\n channel: ev.channel,\r\n smoIndex: evIndex\r\n });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Step 1 in the 3-step process. Collapse midi events into \r\n * a single EventSmoData for each distinct tick that contains\r\n * the metadata state, a duration, and note information.\r\n * @param trackEvents \r\n * @returns \r\n */\r\n collapseMidiEvents(trackEvents: MidiTrackEvent[]): EventSmoData[] {\r\n const isEot = (ev: MidiTrackEvent) => {\r\n if (!ev) {\r\n return true;\r\n }\r\n if (typeof (ev.type) === 'undefined') {\r\n return true;\r\n }\r\n return ev.type === 'endOfTrack';\r\n }\r\n if (this.eventIndex >= trackEvents.length) {\r\n this.eot = true;\r\n return [];\r\n }\r\n const rv: EventSmoData[] = [];\r\n let cur = trackEvents[0];\r\n let metadata: RunningMetadata = this.getMetadata(0);\r\n let curSmo = this.createNewEvent(metadata);\r\n let untrackedTicks = 0;\r\n let ticks = 0;\r\n while (this.eventIndex < trackEvents.length && !(this.eot)) {\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n if (cur.deltaTime > 0) {\r\n curSmo.durationTicks = this.getSmoTicks(cur.deltaTime);\r\n ticks += curSmo.durationTicks;\r\n // We only need to track note on/off events. Other events update the global\r\n // map, we need to keep track of the duration changes though.\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n if (curSmo.pitches.length === 0) {\r\n curSmo.isRest = true;\r\n }\r\n curSmo.durationTicks += untrackedTicks;\r\n untrackedTicks = 0;\r\n rv.push(curSmo);\r\n } else {\r\n untrackedTicks += curSmo.durationTicks\r\n }\r\n curSmo = this.createNewEvent(metadata);\r\n }\r\n curSmo.timeSignature = metadata.timeSignature;\r\n curSmo.tempo = metadata.tempo;\r\n curSmo.keySignature = metadata.keySignature;\r\n\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n const mm = this.pushPopMidiEvent(cur, rv.length);\r\n if (mm) {\r\n const npitch = SmoMusic.getEnharmonicInKey(SmoMusic.smoIntToPitch(mm.note - 12), metadata.keySignature);\r\n if (mm.smoIndex < rv.length) {\r\n rv[mm.smoIndex].pitches.push(npitch);\r\n rv[mm.smoIndex].isRest = false;\r\n } else {\r\n console.warn('bad index in event mm.smoIndex');\r\n }\r\n }\r\n } else if (cur.meta) {\r\n this.handleMetadata(cur, ticks);\r\n }\r\n metadata = this.getMetadata(ticks);\r\n this.eventIndex += 1;\r\n cur = trackEvents[this.eventIndex];\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n getTrackData(midi: any) {\r\n if (midi.header.format !== 0) {\r\n return midi.tracks;\r\n }\r\n const trackData: any[] = [];\r\n const trackHash: Record = {};\r\n const trackEvents: MidiTrackEvent[] = midi.tracks[0];\r\n trackEvents.forEach((ev) => {\r\n const channel = ev.channel ?? 0;\r\n if (!trackHash[channel]) {\r\n trackHash[channel] = [];\r\n }\r\n trackHash[channel].push(ev);\r\n });\r\n const trackKeys = Object.keys(trackHash);\r\n trackKeys.forEach((trackKey) => {\r\n trackData.push(trackHash[trackKey]);\r\n });\r\n return trackData;\r\n }\r\n\r\n /**\r\n * Convert the midi to a score as best we can. The conversion is made via a 3-step\r\n * process. \r\n * 1. consolidate all the MIDI events into individual note on/off events with a duration\r\n * 2. adjust the durations so the fit in with Smoosic measure lengths.\r\n * 3. Create the {@link SmoNote} objects from the events.\r\n * @returns \r\n */\r\n convert(): SmoScore {\r\n let staves: SmoSystemStaff[] = [];\r\n // go through the tracks. If this is midi format 1, split tracks into their own channels\r\n const tracks = this.getTrackData(this.midi);\r\n tracks.forEach((trackEvents: MidiTrackEvent[], trackIx: number) => {\r\n this.eventIndex = 0; // index into current track\r\n this.trackIndex = trackIx;\r\n this.eot = false;\r\n this.tieMap[trackIx] = [];\r\n const collapsed: EventSmoData[] = this.collapseMidiEvents(trackEvents);\r\n const expanded: EventSmoData[] = this.expandMidiEvents(collapsed);\r\n if (expanded.length > 0) {\r\n const staffDef = SmoSystemStaff.defaults;\r\n staffDef.staffId = trackIx;\r\n staffDef.measures = this.createNotesFromEvents(expanded);\r\n\r\n const staff = new SmoSystemStaff(staffDef);\r\n // For notes that are tied across measures, add the tie\r\n this.tieMap[trackIx].forEach((mm) => {\r\n const startMeasure = staffDef.measures[mm - 1];\r\n const endMeasure = staffDef.measures[mm];\r\n const endIx = startMeasure.voices[0].notes.length - 1;\r\n const startNote = startMeasure.voices[0].notes[endIx];\r\n const endNote = endMeasure.voices[0].notes[0];\r\n if (startNote.noteType === 'n' &&\r\n endNote.noteType === 'n' && SmoMusic.pitchArraysMatch(startNote.pitches, endNote.pitches)) {\r\n const tieDefs = SmoTie.defaults;\r\n tieDefs.startSelector = {\r\n staff: trackIx, measure: mm - 1, voice: 0, tick: endIx,\r\n pitches: []\r\n }\r\n tieDefs.endSelector = {\r\n staff: trackIx, measure: mm, voice: 0, tick: 0,\r\n pitches: []\r\n }\r\n tieDefs.lines.push({ from: 0, to: 0 });\r\n const tie = new SmoTie(tieDefs);\r\n staff.modifiers.push(tie);\r\n }\r\n });\r\n staves.push(staff);\r\n }\r\n });\r\n if (staves.length === 0) {\r\n return SmoScore.getEmptyScore(SmoScore.defaults);\r\n }\r\n let longestStave = staves[0];\r\n staves.forEach((staff) => {\r\n if (staff.measures.length > longestStave.measures.length) {\r\n longestStave = staff;\r\n }\r\n });\r\n staves.forEach((staff) => {\r\n let i = 0;\r\n for (i = staff.measures.length; i < longestStave.measures.length; ++i) {\r\n const measure = SmoMeasure.getDefaultMeasure(longestStave.measures[i]);\r\n measure.voices.push({ notes: SmoMeasure.getDefaultNotes(longestStave.measures[i]) });\r\n staff.measures.push(measure);\r\n }\r\n });\r\n const scoreDefs = SmoScore.defaults;\r\n scoreDefs.staves = staves;\r\n\r\n const rv = new SmoScore(scoreDefs);\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.65;\r\n layoutDefaults.globalLayout.zoomScale = 1.5;\r\n return rv;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /smo/midi/smoToMidi\r\n */\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoAudioScore } from '../xform/audioTrack';\r\nimport { SmoScore } from '../data/score';\r\ndeclare var MidiWriter: any;\r\n/* options: [{\r\n\r\n value: 1,\r\n label: 'Piano (bowed)'\r\n }, {\r\n value: 34,\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 27,\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]*/\r\n\r\nexport interface MidiTrackHash {\r\n track: any,\r\n lastMeasure: number\r\n}\r\n\r\n/**\r\n * Convert a {@link SmoScore} object to MIDI\r\n * @category SmoToMidi\r\n */\r\nexport class SmoToMidi {\r\n /**\r\n * @param score \r\n * @returns Midi byte array that can be sent to a file upload widget\r\n */\r\n static convert(score: SmoScore) {\r\n const beatTime = 128; // midi ticks per beat\r\n const converter = new SmoAudioScore(score, beatTime);\r\n const audioScore = converter.convert();\r\n const smoTracks = audioScore.tracks;\r\n let currentKey: string = 'C';\r\n const trackHash: Record = {};\r\n smoTracks.forEach((smoTrack, trackIx) => {\r\n let j = 0;\r\n if (typeof(trackHash[trackIx]) === 'undefined') {\r\n trackHash[trackIx] = {\r\n track: new MidiWriter.Track(),\r\n lastMeasure: 0\r\n };\r\n }\r\n const track = trackHash[trackIx].track;\r\n // eslint-disable-next-line\r\n audioScore.repeatMap.forEach((measureMap) => {\r\n for (j = measureMap.startMeasure; j <= measureMap.endMeasure; ++j) {\r\n // eslint-disable-next-line\r\n const notes = smoTrack.notes.filter((nn) => nn.selector.measure === j);\r\n notes.forEach((noteData) => { \r\n const selectorKey = SmoSelector.getMeasureKey(noteData.selector);\r\n if (smoTrack.tempoMap[selectorKey]) {\r\n track.setTempo(smoTrack.tempoMap[selectorKey]);\r\n }\r\n if (smoTrack.timeSignatureMap[selectorKey]) {\r\n const ts = smoTrack.timeSignatureMap[selectorKey];\r\n track.setTimeSignature(ts.numerator, ts.denominator);\r\n }\r\n if (smoTrack.keyMap[j]) {\r\n const ksString = smoTrack.keyMap[j];\r\n const ks = -1 * SmoMusic.getFlatsInKeySignature(ksString) + SmoMusic.getSharpsInKeySignature(ksString);\r\n track.setKeySignature(ks, 0);\r\n }\r\n if (noteData.noteType === 'r') {\r\n if (!noteData.padding) {\r\n const rest = new MidiWriter.NoteOffEvent({\r\n channel: trackIx + 1,\r\n pitch: 'C4',\r\n duration: 't' + noteData.duration\r\n });\r\n track.addEvent(rest);\r\n }\r\n } else {\r\n const pitchArray = SmoMusic.smoPitchesToMidiStrings(noteData.pitches);\r\n const velocity = Math.round(127 * noteData.volume);\r\n const midiNote = new MidiWriter.NoteEvent({\r\n channel: trackIx + 1,\r\n pitch: pitchArray,\r\n duration: 't' + noteData.duration,\r\n velocity\r\n });\r\n track.addEvent(midiNote);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key].track);\r\n const writer = new MidiWriter.Writer(tracks);\r\n return writer.buildFile();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef, Pitch } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoBarline, TimeSignature, SmoRehearsalMark, SmoMeasureModifierBase } from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie } from '../data/staffModifiers';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoTuplet } from '../data/tuplet';\r\n\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { SmoTempoText } from '../data/measureModifiers';\r\nimport { XmlToSmo } from './xmlToSmo';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\ninterface SlurXml {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n number: number\r\n}\r\n/**\r\n * Keep state of the xml document as we are generating it\r\n * @category SmoToXml\r\n */\r\nexport interface SmoState {\r\n divisions: number,\r\n measureNumber: number,\r\n measureIndex: number,\r\n transposeOffset: number,\r\n tickCount: number,\r\n voiceIndex: number,\r\n keySignature: string,\r\n voiceTickIndex: number,\r\n voice?: SmoVoice,\r\n partStaves: SmoSystemStaff[],\r\n staffPartIx: number, // index of staff in part\r\n slurs: SlurXml[],\r\n ties: SlurXml[],\r\n tieds: SlurXml[],\r\n lyricState: Record,\r\n measureTicks: number,\r\n note?: SmoNote,\r\n beamState: number,\r\n beamTicks: number,\r\n timeSignature?: TimeSignature,\r\n tempo?: SmoTempoText\r\n}\r\n\r\n/**\r\n * Convert {@link SmoScore} object into a music XML serialization\r\n * \r\n * usage: `xdoc: XmlDocument = SmoToXml.convert(score)`\r\n * @category SmoToXml\r\n */\r\nexport class SmoToXml {\r\n static get beamStates(): Record {\r\n return {\r\n none: 1, start: 2, continue: 3, stop: 4\r\n };\r\n }\r\n static get defaultState(): SmoState {\r\n return JSON.parse(JSON.stringify({\r\n divisions: 0,\r\n measureNumber: 0,\r\n measureIndex: 0,\r\n transposeOffset: 0,\r\n tickCount: 0,\r\n voiceIndex: 0,\r\n keySignature: 'C',\r\n voiceTickIndex: 0,\r\n slurs: [],\r\n ties: [],\r\n partStaves: [],\r\n lyricState: {},\r\n measureTicks: 0,\r\n beamState: 0,\r\n beamTicks: 4096\r\n }));\r\n }\r\n /**\r\n * see usage\r\n * @param score\r\n * @returns \r\n */\r\n static convert(score: SmoScore): XMLDocument {\r\n let staffGroupIx = 0;\r\n let staffIx = 0;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const dom = XmlHelpers.createRootElement(); \r\n const root = dom.children[0];\r\n const work = nn(root, 'work', null, '');\r\n nn(work, 'work-title', score.scoreInfo, 'title');\r\n const identification = nn(root, 'identification', null, '');\r\n const creator = nn(identification, 'creator', score.scoreInfo, 'composer');\r\n XmlHelpers.createAttributes(creator, { type: 'composer' });\r\n const encoding = nn(identification, 'encoding', null, '');\r\n nn(encoding, 'software', { software: 'Some pre-release version of Smoosic' }, 'software');\r\n const today = new Date();\r\n const dd = (n: number) => n < 10 ? '0' + n.toString() : n.toString()\r\n const dateString: string = today.getFullYear() + '-' + dd(today.getMonth() + 1) + '-' + dd(today.getDate());\r\n nn(encoding, 'encoding-date', dateString, 'date');\r\n const defaults = nn(root, 'defaults', null, '');\r\n const scaling = nn(defaults, 'scaling', null, '');\r\n const svgScale = score.layoutManager!.getGlobalLayout().svgScale;\r\n\r\n // music in vexflow is rendered at a font size of 38\r\n const mm = XmlToSmo.mmPerPixel * 42 * svgScale;\r\n nn(scaling, 'millimeters', { mm }, 'mm');\r\n nn(scaling, 'tenths', { tenths: 40 }, 'tenths');\r\n const pageLayout = nn(defaults, 'page-layout', null, '');\r\n const musicFont = nn(defaults, 'music-font', null, '');\r\n const engrave = score.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n XmlHelpers.createAttribute(musicFont, 'font-size', 38 * svgScale );\r\n if (engrave) {\r\n XmlHelpers.createAttribute(musicFont, 'font-family', engrave.family);\r\n }\r\n const tenthConversion = (25.2 / 96) * (40 / mm);\r\n const pageDims = {\r\n 'page-height': score.layoutManager!.globalLayout.pageHeight * tenthConversion,\r\n 'page-width' : score.layoutManager!.globalLayout.pageWidth * tenthConversion\r\n };\r\n Object.keys(pageDims).forEach((dim) => {\r\n nn(pageLayout, dim, pageDims, dim);\r\n });\r\n const margins = { 'left-margin': score.layoutManager!.pageLayouts[0].leftMargin * tenthConversion,\r\n 'right-margin': score.layoutManager!.pageLayouts[0].rightMargin * tenthConversion,\r\n 'top-margin': score.layoutManager!.pageLayouts[0].topMargin * tenthConversion,\r\n 'bottom-margin': score.layoutManager!.pageLayouts[0].bottomMargin * tenthConversion };\r\n const pageMargins = nn(pageLayout, 'page-margins', null, '');\r\n Object.keys(margins).forEach((margin) => {\r\n nn(pageMargins, margin, margins, margin);\r\n });\r\n const partList = nn(root, 'part-list', null, '');\r\n score.staves.forEach((staff) => {\r\n score.systemGroups.forEach((sg) => {\r\n if (sg.startSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'start' });\r\n const groupSymbol = nn(partGroup, 'group-symbol', null, '');\r\n let symbolText = 'line';\r\n if (sg.leftConnector === SmoSystemGroup.connectorTypes['brace']) {\r\n symbolText = 'brace';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['bracket']) {\r\n symbolText = 'bracket';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['double']) {\r\n symbolText = 'square';\r\n }\r\n groupSymbol.textContent = symbolText;\r\n } else if (sg.endSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'stop' });\r\n }\r\n });\r\n if (!staff.partInfo.stavesBefore) {\r\n const id = 'P' + staff.staffId;\r\n const scorePart = nn(partList, 'score-part', null, '');\r\n XmlHelpers.createAttributes(scorePart, { id });\r\n nn(scorePart, 'part-name', { name: staff.measureInstrumentMap[0].instrumentName }, 'name');\r\n nn(scorePart, 'part-abbreviation', { name: staff.measureInstrumentMap[0].abbreviation }, 'name');\r\n const staffInsts = staff.getInstrumentList();\r\n staffInsts.forEach((inst, ix) => {\r\n const scoreInstrument = nn(scorePart, 'score-instrument', null, '');\r\n XmlHelpers.createAttributes(scoreInstrument, { id: `${id}-${ix}` });\r\n const iname = nn(scoreInstrument, 'instrument-name', null, '');\r\n iname.textContent = inst.instrumentName;\r\n const iinst = nn(scoreInstrument, 'instrument-sound', null, '');\r\n // Hack: family is in the sample library, breaks dependency direction\r\n const family = SuiSampleMedia.getFamilyForInstrument(inst.instrument);\r\n iinst.textContent = `${family}.${inst.instrument}`;\r\n });\r\n }\r\n });\r\n const smoState: SmoState = SmoToXml.defaultState;\r\n for (staffIx = 0; staffIx < score.staves.length; ++staffIx) {\r\n smoState.partStaves = [];\r\n // If this is the second staff in a part, we've already output the music with the\r\n // first stave\r\n if (score.staves[staffIx].partInfo.stavesBefore > 0) {\r\n continue;\r\n }\r\n smoState.partStaves.push(score.staves[staffIx]);\r\n if (smoState.partStaves[0].partInfo.stavesAfter > 0 && staffIx < score.staves.length + 1) {\r\n smoState.partStaves.push(score.staves[staffIx + 1]);\r\n } \r\n const part = nn(root, 'part', null, '');\r\n const id = 'P' + smoState.partStaves[0].staffId;\r\n XmlHelpers.createAttributes(part, { id });\r\n smoState.measureNumber = 1;\r\n smoState.tickCount = 0;\r\n smoState.transposeOffset = 0;\r\n smoState.slurs = [];\r\n smoState.ties = [];\r\n smoState.tieds = [];\r\n smoState.lyricState = {};\r\n for (smoState.measureIndex = 0; smoState.measureIndex < smoState.partStaves[0].measures.length; ++smoState.measureIndex) {\r\n const measureElement = nn(part, 'measure', null, '');\r\n for (smoState.staffPartIx = 0; smoState.staffPartIx < smoState.partStaves.length; ++smoState.staffPartIx) {\r\n smoState.measureTicks = 0;\r\n // each staff in a part goes in the same measure element. If this is a subsequent part, we've already \r\n SmoToXml.measure(measureElement, smoState);\r\n }\r\n smoState.measureNumber += 1;\r\n }\r\n }\r\n \r\n return SmoToXml.prettifyXml(dom);\r\n }\r\n /**\r\n * MuseScore doesn't like minified xml, so we pretty-print it.\r\n * @param xmlDoc \r\n * @returns \r\n */\r\n static prettifyXml(xmlDoc: XMLDocument) {\r\n var xsltDoc = new DOMParser().parseFromString([\r\n // describes how we want to modify the XML - indent everything\r\n '',\r\n ' ',\r\n ' ', // change to just text() to strip space in text nodes\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n '',\r\n ].join('\\n'), 'application/xml');\r\n\r\n var xsltProcessor = new XSLTProcessor(); \r\n xsltProcessor.importStylesheet(xsltDoc);\r\n var resultDoc = xsltProcessor.transformToDocument(xmlDoc);\r\n return resultDoc;\r\n};\r\n /**\r\n * /score-partwise/part/measure\r\n * @param measureElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static measure(measureElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const measure = smoState.partStaves[smoState.staffPartIx].measures[smoState.measureIndex];\r\n if (smoState.measureNumber === 1 && measure.isPickup()) {\r\n smoState.measureNumber = 0;\r\n }\r\n if (measure.getForceSystemBreak()) {\r\n const printElement = nn(measureElement, 'print', null, '');\r\n XmlHelpers.createAttributes(printElement, { 'new-system': 'yes' });\r\n }\r\n XmlHelpers.createAttributes(measureElement, { number: smoState.measureNumber });\r\n SmoToXml.attributes(measureElement, measure, smoState);\r\n smoState.voiceIndex = 1;\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n smoState.beamTicks = 0;\r\n SmoToXml.barline(measureElement, smoState, true);\r\n measure.voices.forEach((voice) => {\r\n smoState.voiceTickIndex = 0;\r\n smoState.voice = voice;\r\n voice.notes.forEach((note) => {\r\n smoState.note = note;\r\n // Start wedge before note starts\r\n SmoToXml.direction(measureElement, smoState, true);\r\n SmoToXml.note(measureElement, measure, note, smoState);\r\n // End wedge on next tick\r\n SmoToXml.direction(measureElement, smoState, false);\r\n });\r\n // If this is the end of a voice, back up the time to align the voices\r\n if (measure.voices.length > smoState.voiceIndex) {\r\n smoState.voiceIndex += 1;\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration');\r\n } else {\r\n if (smoState.partStaves.length > 1 && smoState.staffPartIx + 1 < smoState.partStaves.length) {\r\n // If this is the end of a measure, and this is the first part in the staff, back it up for the second staff\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration'); \r\n smoState.tickCount += smoState.measureTicks;\r\n } else if (smoState.partStaves.length === 1) {\r\n smoState.tickCount += smoState.measureTicks;\r\n }\r\n }\r\n smoState.measureTicks = 0;\r\n });\r\n SmoToXml.barline(measureElement, smoState, false);\r\n }\r\n /**\r\n * /score-partwise/part/measure/barline\r\n * @param measureElement \r\n * @param smoState \r\n * @param start \r\n */\r\n static barline(measureElement: Element, smoState: SmoState, start: boolean) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let barlineElement = null;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (start) {\r\n if (measure!.getStartBarline().barline === SmoBarline.barlines.startRepeat) {\r\n barlineElement = nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'forward' });\r\n }\r\n }\r\n const voltas = staff.getVoltasForMeasure(measure!.measureNumber.measureIndex);\r\n const numArray: number[] = [];\r\n voltas.forEach((volta) => {\r\n if ((start && volta?.startSelector?.measure === measure.measureNumber.measureIndex) || \r\n (!start && volta?.endSelector?.measure === measure.measureNumber.measureIndex)) {\r\n numArray.push(volta.number);\r\n }\r\n });\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-heavy'} , 'style');\r\n } else if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.doubleBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-light'} , 'style');\r\n }\r\n if (numArray.length) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const numstr = numArray.join(',');\r\n const endElement = nn(barlineElement, 'ending', null, '');\r\n const endString = start ? 'start' : 'stop';\r\n XmlHelpers.createAttributes(endElement, { type: endString, number: numstr });\r\n }\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endRepeat) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'backward' });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static tied(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.tieds.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.tieds.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.tieds = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.tieds.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param noteElement\r\n * @param smoState \r\n */\r\n static tie(noteElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.ties.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.ties.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.ties = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.ties.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/notations/slur\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static slur(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForSlur = ((slurs: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n slurs.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getSlursStartingAt(selector) as SmoSlur[];\r\n const ends = staff.getSlursEndingAt(selector) as SmoSlur[];\r\n const remove: SlurXml[] = [];\r\n const newSlurs: SlurXml[] = [];\r\n ends.forEach((slur) => {\r\n const match = smoState.slurs.find((ss: any) => SmoSelector.eq(ss.startSelector, slur.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, slur.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: match.number, type: 'stop' });\r\n }\r\n });\r\n smoState.slurs.forEach((slur: any) => {\r\n if (remove.findIndex((rr) => rr.number === slur.number) < 0) {\r\n newSlurs.push(slur);\r\n }\r\n });\r\n smoState.slurs = newSlurs;\r\n starts.forEach((slur) => {\r\n const number = getNumberForSlur(smoState.slurs);\r\n smoState.slurs.push({\r\n startSelector: slur.startSelector,\r\n endSelector: slur.endSelector,\r\n number\r\n });\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: number, type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note/time-modification\r\n * /score-partwise/measure/note/tuplet\r\n * @param noteElement \r\n * @param notationsElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static tupletTime(noteElement: Element, tuplet: SmoTuplet, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const obj = {\r\n actualNotes: tuplet.numNotes, normalNotes: tuplet.notes_occupied\r\n };\r\n const timeModification = nn(noteElement, 'time-modification', null, '');\r\n nn(timeModification, 'actual-notes', obj, 'actualNotes');\r\n nn(timeModification, 'normal-notes', obj, 'normalNotes');\r\n }\r\n static tupletNotation(notationsElement: Element, tuplet: SmoTuplet, note: SmoNote) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (tuplet.getIndexOfNote(note) === 0) {\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: 1, type: 'start'\r\n });\r\n } else if (tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) {\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: 1, type: 'stop'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/measure/note/pitch\r\n * @param pitch \r\n * @param noteElement \r\n */\r\n static pitch(pitch: Pitch, noteElement: Element) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const accidentalOffset = ['bb', 'b', 'n', '#', '##'];\r\n const alter = accidentalOffset.indexOf(pitch.accidental) - 2;\r\n const pitchElement = nn(noteElement, 'pitch', null, '');\r\n nn(pitchElement, 'step', { letter: pitch.letter.toUpperCase() }, 'letter');\r\n nn(pitchElement, 'alter', { alter }, 'alter');\r\n nn(pitchElement, 'octave', pitch, 'octave');\r\n }\r\n /**\r\n * /score-partwise/measure/beam\r\n * @param noteElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static beamNote(noteElement: Element, smoState: SmoState) {\r\n if (!smoState.note) {\r\n return;\r\n }\r\n if (!smoState.voice) {\r\n return;\r\n }\r\n const nn = XmlHelpers.createTextElementChild;\r\n const note = smoState.note;\r\n const nextNote = (smoState.voiceTickIndex + 1) >= smoState.voice.notes.length ?\r\n null : smoState.voice.notes[smoState.voiceTickIndex + 1];\r\n const exceedTicks = smoState.beamTicks + note.tickCount >= note.beamBeats;\r\n // don't start a beam on a rest\r\n if (note.isRest() && smoState.beamState === SmoToXml.beamStates.none) {\r\n return;\r\n }\r\n let toBeam = SmoToXml.beamStates.none;\r\n if (note.tickCount <= 2048 && !exceedTicks) {\r\n // Explicit end beam, or no more notes to beam, so stop beam\r\n if (note.endBeam || nextNote === null) {\r\n if (smoState.beamState !== SmoToXml.beamStates.none) {\r\n toBeam = SmoToXml.beamStates.stop;\r\n }\r\n } else {\r\n // else if the next note is beamable, start or continue the beam\r\n if (nextNote.tickCount <= 2048) {\r\n toBeam = smoState.beamState === SmoToXml.beamStates.continue ?\r\n SmoToXml.beamStates.continue : SmoToXml.beamStates.start;\r\n }\r\n }\r\n }\r\n if (toBeam === SmoToXml.beamStates.start || toBeam === SmoToXml.beamStates.continue) {\r\n smoState.beamTicks += smoState.note.tickCount;\r\n } else {\r\n smoState.beamTicks = 0;\r\n }\r\n // slur is start/stop, beam is begin, end, gf\r\n if (toBeam === SmoToXml.beamStates.start) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'begin' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.continue;\r\n } else if (toBeam === SmoToXml.beamStates.continue) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'continue' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n } else if ((toBeam === SmoToXml.beamStates.stop) ||\r\n (toBeam === SmoToXml.beamStates.none && smoState.beamState !== SmoToXml.beamStates.none)) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'end' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/direction/direction-type\r\n * @param measureElement \r\n * @param smoState \r\n * @param beforeNote \r\n */\r\n static direction(measureElement: Element, smoState: SmoState, beforeNote: boolean) {\r\n let addDirection = false;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const directionElement = measureElement.ownerDocument.createElement('direction');\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const directionChildren: Element[] = [];\r\n const tempo = measure.getTempo();\r\n let displayTempo = false;\r\n if (smoState.tempo) {\r\n if (tempo.display && measure.measureNumber.measureIndex === 0 && smoState.measureTicks === 0) {\r\n displayTempo = true;\r\n } else if (tempo.display && !SmoTempoText.eq(smoState.tempo, tempo)) {\r\n displayTempo = true;\r\n }\r\n } else {\r\n displayTempo = true;\r\n }\r\n smoState.tempo = new SmoTempoText(tempo);\r\n if (beforeNote === true && smoState.staffPartIx === 0 && smoState.measureTicks === 0 && smoState.partStaves[0].staffId === 0) {\r\n const mark: SmoMeasureModifierBase | undefined = measure.getRehearsalMark();\r\n if (mark) {\r\n const rmtype = nn(directionElement, 'direction-type', null, '');\r\n const xmark = (mark as SmoRehearsalMark);\r\n const rElement = nn(rmtype, 'rehearsal', { mark: xmark.symbol }, 'mark');\r\n XmlHelpers.createAttribute(rElement, 'enclosure', 'square');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n addDirection = true;\r\n }\r\n }\r\n if (beforeNote === true && displayTempo) {\r\n addDirection = true;\r\n const tempoBpm = Math.round(tempo.bpm * tempo.beatDuration / 4096);\r\n const tempoElement = nn(directionElement, 'direction-type', null, '');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n let tempoText = tempo.tempoText;\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n tempoText = tempo.customText;\r\n }\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n nn(tempoElement, 'words', { words: tempoText }, 'words');\r\n } else if (tempo.tempoMode === SmoTempoText.tempoModes.customMode || tempo.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n const metronomeElement = nn(tempoElement, 'metronome', null, '');\r\n let durationType = 'quarter';\r\n let dotType = false;\r\n if (tempo.bpm >= 8192) {\r\n durationType = 'half';\r\n } else if (tempo.bpm < 4096) {\r\n durationType = 'eighth';\r\n }\r\n if (tempo.bpm === 6144 || tempo.bpm === 12288 || tempo.bpm === 3072) {\r\n dotType = true;\r\n }\r\n nn(metronomeElement, 'beat-unit', { beatUnit: durationType}, 'beatUnit');\r\n if (dotType) {\r\n nn(metronomeElement, 'beat-unit-dot', null, '');\r\n }\r\n nn(metronomeElement, 'per-minute', { tempo }, 'bpm');\r\n }\r\n // Sound is supposed to come last under 'direction' element\r\n const soundElement = measureElement.ownerDocument.createElement('sound');\r\n soundElement.setAttribute('tempo', tempoBpm.toString());\r\n directionChildren.push(soundElement);\r\n }\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n if (!beforeNote) {\r\n selector.tick -= 1;\r\n }\r\n const startWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n const endWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n if (endWedge && !beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n XmlHelpers.createAttributes(wedgeElement, { type: 'stop', spread: '20' });\r\n }\r\n if (startWedge && beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n const wedgeType = startWedge.hairpinType === SmoStaffHairpin.types.CRESCENDO ?\r\n 'crescendo' : 'diminuendo';\r\n XmlHelpers.createAttributes(wedgeElement, { type: wedgeType });\r\n }\r\n if (addDirection) {\r\n measureElement.appendChild(directionElement);\r\n directionChildren.forEach((el) => {\r\n directionElement.appendChild(el);\r\n })\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/note/lyric\r\n * @param noteElement \r\n * @param smoState \r\n */\r\n static lyric(noteElement: Element, smoState: SmoState) {\r\n const smoNote = smoState.note!;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const lyrics = smoNote.getTrueLyrics() as SmoLyric[];\r\n lyrics.forEach((lyric) => {\r\n let syllabic = 'single';\r\n if (lyric.isHyphenated() === false && lyric.isDash() === false) {\r\n if (smoState.lyricState[lyric.verse] === 'begin') {\r\n syllabic = 'end';\r\n } // else stays single\r\n } else {\r\n if (lyric.isHyphenated()) {\r\n syllabic = smoState.lyricState[lyric.verse] === 'begin' ?\r\n 'middle' : 'begin';\r\n } else if (lyric.isDash()) {\r\n syllabic = 'middle';\r\n }\r\n }\r\n smoState.lyricState[lyric.verse] = syllabic;\r\n const lyricElement = nn(noteElement, 'lyric', null, '');\r\n XmlHelpers.createAttribute(lyricElement, 'number', lyric.verse + 1);\r\n XmlHelpers.createAttribute(lyricElement, 'placement', 'below');\r\n XmlHelpers.createAttribute(lyricElement, 'default-y',\r\n -80 - 10 * lyric.verse);\r\n nn(lyricElement, 'syllabic', syllabic, '');\r\n nn(lyricElement, 'text', lyric.getText(), '');\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static note(measureElement: Element, measure: SmoMeasure, note: SmoNote, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let i = 0;\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n let j = 0;\r\n const noteElement = nn(measureElement, 'note', null, '');\r\n const isChord = i > 0;\r\n if (isChord) {\r\n nn(noteElement, 'chord', null, '');\r\n } else {\r\n }\r\n if (note.isRest()) {\r\n const restElement = nn(noteElement, 'rest', null, '');\r\n const step = { letter: note.pitches[i].letter.toUpperCase() };\r\n nn(restElement, 'display-step', step, 'letter');\r\n nn(restElement, 'display-octave', { ...note.pitches[i] }, 'octave');\r\n } else {\r\n SmoToXml.pitch(note.pitches[i], noteElement);\r\n }\r\n const duration = note.tickCount;\r\n smoState.measureTicks += duration;\r\n const tuplet = measure.getTupletForNote(note);\r\n nn(noteElement, 'duration', { duration }, 'duration');\r\n SmoToXml.tie(noteElement, smoState);\r\n nn(noteElement, 'voice', { voice: smoState.voiceIndex }, 'voice');\r\n let typeTickCount = note.tickCount;\r\n if (tuplet) {\r\n typeTickCount = tuplet.stemTicks;\r\n }\r\n nn(noteElement, 'type', { type: XmlHelpers.closestStemType(typeTickCount) },\r\n 'type');\r\n const dots = SmoMusic.smoTicksToVexDots(note.tickCount);\r\n for (j = 0; j < dots; ++j) {\r\n nn(noteElement, 'dot', null, '');\r\n }\r\n // time modification (tuplet) comes before notations which have tuplet beaming rules\r\n // also before stem\r\n if (tuplet) {\r\n SmoToXml.tupletTime(noteElement, tuplet, smoState);\r\n }\r\n if (note.flagState === SmoNote.flagStates.up) {\r\n nn(noteElement, 'stem', { direction: 'up' }, 'direction');\r\n }\r\n if (note.flagState === SmoNote.flagStates.down) {\r\n nn(noteElement, 'stem', { direction: 'down' }, 'direction');\r\n }\r\n // stupid musicxml requires beam to be last.\r\n const notationsElement = noteElement.ownerDocument.createElement('notations');\r\n // If a multi-part staff, we need to include 'staff' element\r\n if (smoState.partStaves.length > 1) {\r\n nn(noteElement, 'staff', { staffIx: smoState.staffPartIx + 1 }, 'staffIx');\r\n }\r\n if (!isChord) {\r\n SmoToXml.beamNote(noteElement, smoState);\r\n }\r\n if (!isChord) {\r\n SmoToXml.slur(notationsElement, smoState);\r\n }\r\n SmoToXml.tied(notationsElement, smoState);\r\n if (tuplet) {\r\n SmoToXml.tupletNotation(notationsElement, tuplet, note);\r\n }\r\n const ornaments = note.getOrnaments();\r\n if (ornaments.length) {\r\n const ornamentsElement = noteElement.ownerDocument.createElement('ornaments');\r\n ornamentsElement.textContent = '\\n';\r\n ornaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlOrnaments[ornament.ornament]) {\r\n const sub = nn(ornamentsElement, SmoOrnament.xmlOrnaments[ornament.ornament], null, '');\r\n XmlHelpers.createAttribute(sub, 'placement', 'above');\r\n }\r\n });\r\n if (ornamentsElement.children.length) {\r\n notationsElement.appendChild(ornamentsElement);\r\n }\r\n }\r\n const jazzOrnaments = note.getJazzOrnaments();\r\n const articulations = note.articulations;\r\n if (jazzOrnaments.length || articulations.length) {\r\n const articulationsElement = noteElement.ownerDocument.createElement('articulations');\r\n jazzOrnaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlJazz[ornament.ornament]) {\r\n nn(articulationsElement, SmoOrnament.xmlJazz[ornament.ornament], null, '');\r\n }\r\n });\r\n articulations.forEach((articulation) => {\r\n if (SmoArticulation.xmlArticulations[articulation.articulation]) {\r\n nn(articulationsElement, SmoArticulation.xmlArticulations[articulation.articulation], null, '');\r\n }\r\n });\r\n if (articulationsElement.children.length) {\r\n notationsElement.append(articulationsElement);\r\n }\r\n }\r\n if (notationsElement.children.length) {\r\n noteElement.appendChild(notationsElement);\r\n }\r\n // stupid musicxml requires beam to be laster.\r\n if (!isChord) {\r\n SmoToXml.lyric(noteElement, smoState);\r\n }\r\n }\r\n smoState.voiceTickIndex += 1;\r\n }\r\n /**\r\n * /score-partwise/measure/attributes/key\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static key(attributesElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n let fifths = 0;\r\n if (smoState.keySignature && measure.keySignature === smoState.keySignature) {\r\n return; // no key change\r\n }\r\n const flats = SmoMusic.getFlatsInKeySignature(measure.keySignature);\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (flats > 0) {\r\n fifths = -1 * flats;\r\n } else {\r\n fifths = SmoMusic.getSharpsInKeySignature(measure.keySignature);\r\n }\r\n const keyElement = nn(attributesElement, 'key', null, '');\r\n nn(keyElement, 'fifths', { fifths }, 'fifths');\r\n nn(keyElement, 'mode', { mode: 'major' }, 'major');\r\n smoState.keySignature = measure.keySignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/time\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static time(attributesElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const currentTs = (smoState.timeSignature as TimeSignature) ?? null;\r\n if (currentTs !== null && TimeSignature.equal(currentTs, measure.timeSignature)) {\r\n return;\r\n }\r\n smoState.timeSignature = measure.timeSignature;\r\n const time = { beats: measure.timeSignature.actualBeats, beatType: measure.timeSignature.beatDuration };\r\n const timeElement = nn(attributesElement, 'time', null, '');\r\n nn(timeElement, 'beats', time, 'beats');\r\n nn(timeElement, 'beat-type', time, 'beatType');\r\n smoState.timeSignature = measure.timeSignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/clef\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static clef(attributesElement: Element, smoState: SmoState) { \r\n smoState.partStaves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[smoState.measureIndex];\r\n let prevMeasure: SmoMeasure | null = null;\r\n let clefChange: Clef | null = null;\r\n if (smoState.measureIndex > 0) {\r\n prevMeasure = staff.measures[smoState.measureIndex - 1];\r\n }\r\n if (prevMeasure && prevMeasure.clef !== measure.clef) {\r\n clefChange = measure.clef;\r\n }\r\n // both clefs are defined in the first measure one time.\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n clefChange = measure.clef;\r\n }\r\n if (clefChange) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xmlClef = SmoMusic.clefSigns[clefChange];\r\n const clefElement = nn(attributesElement, 'clef', null, '');\r\n nn(clefElement, 'sign', xmlClef.sign, 'sign');\r\n if (typeof(xmlClef.line) !== 'undefined') {\r\n nn(clefElement, 'line', xmlClef, 'line');\r\n }\r\n if (typeof(xmlClef.octave) !== 'undefined') {\r\n nn(clefElement, 'clef-octave-change', xmlClef, 'octave');\r\n }\r\n XmlHelpers.createAttribute(clefElement, 'number', (staffIx + 1).toString());\r\n }\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static attributes(measureElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const attributesElement = measureElement.ownerDocument.createElement('attributes');\r\n if (smoState.divisions < 1) {\r\n nn(attributesElement, 'divisions', { divisions: 4096 }, 'divisions');\r\n smoState.divisions = 4096;\r\n }\r\n SmoToXml.key(attributesElement, measure, smoState);\r\n SmoToXml.time(attributesElement, smoState);\r\n // only call out number of staves in a part at the beginning of the part\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n SmoToXml.staves(attributesElement, smoState);\r\n }\r\n SmoToXml.clef(attributesElement, smoState);\r\n SmoToXml.transpose(attributesElement, smoState);\r\n if (attributesElement.children.length > 0) {\r\n // don't add an empty attributes element\r\n measureElement.appendChild(attributesElement);\r\n }\r\n }\r\n static staves(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const staffCount = staff.partInfo.stavesAfter > 0 ? 2 : 1;\r\n const nn = XmlHelpers.createTextElementChild;\r\n nn(attributesElement, 'staves', { staffCount: staffCount.toString() }, 'staffCount');\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/transpose\r\n * @param attributesElement\r\n * @param smoState \r\n * @returns \r\n */\r\n static transpose(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (measure.transposeIndex !== smoState.transposeOffset) {\r\n smoState.transposeOffset = measure.transposeIndex;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xposeElement = nn(attributesElement, 'transpose', null, '');\r\n const offset = (measure.transposeIndex * -1).toString();;\r\n nn(xposeElement, 'chromatic', { offset: offset }, 'offset');\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoArticulation, SmoNoteModifierBase, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch, PitchLetter } from '../data/common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBarline } from '../data/measureModifiers';\r\n\r\nexport interface XmlOrnamentData {\r\n ctor: string,\r\n params: Record\r\n}\r\nexport interface XmlSmoMap {\r\n xml: string, smo: string\r\n}\r\nexport interface XmlDurationAlteration {\r\n noteCount: number, noteDuration: number\r\n}\r\nexport interface XmlDuration {\r\n tickCount: number, duration: number, alteration: XmlDurationAlteration\r\n}\r\n/**\r\n * Store slur information when parsing xml\r\n */\r\nexport interface XmlSlurType {\r\n number: number, type: string, orientation: string, placement: string, controlX: number, controlY: number, selector: SmoSelector, yOffset: number\r\n}\r\n/**\r\n * Store tie information when parsing xml\r\n */\r\nexport interface XmlTieType {\r\n number: number, type: string, orientation: string, selector: SmoSelector, pitchIndex: number\r\n}\r\n/**\r\n * Store tuplet information when parsing xml\r\n */\r\nexport interface XmlTupletData {\r\n number: number, type: string\r\n}\r\nexport interface XmlEndingData {\r\n numbers: number[], type: string\r\n}\r\nexport type LyricSyllabic = 'begin' | 'end' | 'middle' | 'single';\r\n/**\r\n * Store lyric information when parsing xml\r\n */\r\nexport interface XmlLyricData {\r\n _text: string, verse: number | string, syllabic: LyricSyllabic\r\n}\r\n/**\r\n * Utilities for parsing and serialzing musicXML.\r\n * @category SmoToXml\r\n * */\r\nexport class XmlHelpers {\r\n /**\r\n * mxml note 'types', really s/b stem types.\r\n * For grace notes, we use the note type and not duration\r\n * to get the flag\r\n */\r\n static get noteTypesToSmoMap(): Record {\r\n return {\r\n 'breve': 8192 * 4,\r\n 'whole': 8192 * 2,\r\n 'half': 8192,\r\n 'quarter': 4096,\r\n 'eighth': 2048,\r\n '16th': 1024,\r\n '32nd': 512,\r\n '64th': 256,\r\n '128th': 128\r\n };\r\n }\r\n static readonly _ticksToNoteTypeMap: Record = smoSerialize.reverseMap(XmlHelpers.noteTypesToSmoMap) as Record;\r\n\r\n static get ticksToNoteTypeMap(): Record {\r\n return XmlHelpers._ticksToNoteTypeMap;\r\n }\r\n // ### closestStemType\r\n // smo infers the stem type from the duration, but other applications don't\r\n static closestStemType(ticks: number) {\r\n const nticks = SmoMusic.closestDurationTickLtEq(ticks);\r\n return XmlHelpers.ticksToNoteTypeMap[nticks];\r\n }\r\n static get beamStates(): Record {\r\n return {\r\n BEGIN: 1,\r\n END: 2,\r\n AUTO: 3\r\n };\r\n }\r\n static get ornamentXmlToSmoMap(): Record {\r\n return {\r\n staccato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.staccato } },\r\n tenuto: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.tenuto } },\r\n marcato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.marcato } },\r\n accent: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.accent } },\r\n doit: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.doitLong } },\r\n falloff: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.fall } },\r\n scoop: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.scoop } },\r\n 'delayed-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.after } },\r\n turn: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.on } },\r\n 'inverted-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turnInverted } },\r\n mordent: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordent } },\r\n 'inverted-mordent': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n shake: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n 'trill-mark': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.trill } },\r\n };\r\n }\r\n // ### createRootElement\r\n // Create score-partwise document with prelude\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=318086\r\n static createRootElement() {\r\n const doc = document.implementation.createDocument('', '', null);\r\n const rootElem = doc.createElement('score-partwise');\r\n const piElement = doc.createProcessingInstruction('xml', 'version=\"1.0\" encoding=\"UTF-8\"');\r\n rootElem.setAttribute('version', '3.1');\r\n doc.appendChild(rootElem);\r\n doc.insertBefore(piElement, rootElem);\r\n return doc;\r\n }\r\n // Parse an element whose child has a number in the textContent\r\n static getNumberFromElement(parent: Element, path: string, defaults: number): number {\r\n let rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const tval = XmlHelpers.getTextFromElement(parent, path, defaults);\r\n if (!tval) {\r\n return rv;\r\n }\r\n if (typeof (tval) === 'number') {\r\n return tval;\r\n }\r\n if (tval.indexOf('.')) {\r\n const tf = parseFloat(tval);\r\n rv = isNaN(tf) ? rv : tf;\r\n } else {\r\n const ff = parseInt(tval, 10);\r\n rv = isNaN(ff) ? rv : ff;\r\n }\r\n return rv;\r\n }\r\n // Parse an element whose child has a textContent\r\n static getTextFromElement(parent: Element, path: string, defaults: number | string | null): string {\r\n const rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const el = [...parent.getElementsByTagName(path)];\r\n if (!el.length) {\r\n return rv.toString();\r\n }\r\n return el[0].textContent as string;\r\n }\r\n static getNumberFromAttribute(node: Element, attribute: string, defaults: number) {\r\n const str = XmlHelpers.getTextFromAttribute(node, attribute, defaults.toString());\r\n const rv = parseInt(str, 10);\r\n if (isNaN(rv)) {\r\n return defaults;\r\n }\r\n return rv;\r\n }\r\n static getTextFromAttribute(node: Element, attribute: string, defaults: string): string {\r\n const rv = node.getAttribute(attribute);\r\n if (rv) {\r\n return rv;\r\n }\r\n return defaults;\r\n }\r\n // ### getChildrenFromPath\r\n // Like xpath, given ['foo', 'bar'] and parent element\r\n // 'moo' return any element /moo/foo/bar as an array of elements\r\n static getChildrenFromPath(parent: Element, pathAr: string[]): Element[] {\r\n let i = 0;\r\n let node = parent;\r\n const rv: Element[] = [];\r\n for (i = 0; i < pathAr.length; ++i) {\r\n const tag = pathAr[i];\r\n const nodes: Element[] = [...node.getElementsByTagName(tag)];\r\n if (nodes.length === 0) {\r\n return [];\r\n }\r\n if (i < pathAr.length - 1) {\r\n node = nodes[0];\r\n } else {\r\n nodes.forEach((nn: Element) => {\r\n rv.push(nn);\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n static getStemType(noteElement: Element) {\r\n const tt = XmlHelpers.getTextFromElement(noteElement, 'stem', '');\r\n if (tt === 'up') {\r\n return SmoNote.flagStates.up;\r\n } else if (tt === 'down') {\r\n return SmoNote.flagStates.down;\r\n }\r\n return SmoNote.flagStates.auto;\r\n }\r\n static getEnding(barlineNode: Element): XmlEndingData | null {\r\n const endingNodes = [...barlineNode.getElementsByTagName('ending')];\r\n if (!endingNodes.length) {\r\n return null;\r\n }\r\n const attrs = XmlHelpers.nodeAttributes(endingNodes[0]);\r\n if (attrs.number && attrs.type) {\r\n return {\r\n numbers: attrs.number.split(',').map((x) => parseInt(x, 10)),\r\n type: attrs.type\r\n };\r\n }\r\n return null;\r\n }\r\n static getBarline(barlineNode: Element): number {\r\n const rptNode = [...barlineNode.getElementsByTagName('repeat')];\r\n if (rptNode.length) {\r\n const repeatattr = XmlHelpers.nodeAttributes(rptNode[0]);\r\n return repeatattr.direction === 'forward' ? SmoBarline.barlines.startRepeat : SmoBarline.barlines.endRepeat;\r\n }\r\n const styleText = XmlHelpers.getTextFromElement(barlineNode, 'bar-style', '');\r\n if (styleText.length) {\r\n const double = styleText.indexOf('-') >= 0;\r\n const heavy = styleText.indexOf('heavy') >= 0;\r\n const light = styleText.indexOf('light') >= 0;\r\n if (double && heavy && light) {\r\n return SmoBarline.barlines.endBar;\r\n }\r\n if (double) {\r\n return SmoBarline.barlines.doubleBar;\r\n }\r\n }\r\n return SmoBarline.barlines.singleBar;\r\n }\r\n \r\n // ### assignDefaults\r\n // Map SMO layout data from xml layout data (default node)\r\n static assignDefaults(node: Element, defObj: any, parameters: XmlSmoMap[]) {\r\n parameters.forEach((param) => {\r\n if (!isNaN(parseInt(defObj[param.smo], 10))) {\r\n const smoParam = param.smo;\r\n const xmlParam = param.xml;\r\n defObj[smoParam] = XmlHelpers.getNumberFromElement(node, xmlParam, defObj[smoParam]);\r\n }\r\n });\r\n }\r\n // ### nodeAttributes\r\n // turn the attributes of an element into a JS hash\r\n static nodeAttributes(node: Element): Record {\r\n const rv: Record = {};\r\n node.getAttributeNames().forEach((attr) => {\r\n const aval: string | null = node.getAttribute(attr);\r\n if (aval) {\r\n rv[attr] = aval;\r\n }\r\n });\r\n return rv;\r\n }\r\n // Some measures have staff ID, some don't.\r\n // convert xml 1 index to array 0 index\r\n static getStaffId(node: Element) {\r\n const staff = [...node.getElementsByTagName('staff')];\r\n if (staff.length && staff[0].textContent) {\r\n return parseInt(staff[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static noteBeamState(noteNode: Element) {\r\n const beamNodes = [...noteNode.getElementsByTagName('beam')];\r\n if (!beamNodes.length) {\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n const beamText = beamNodes[0].textContent;\r\n if (beamText === 'begin') {\r\n return XmlHelpers.beamStates.BEGIN;\r\n } else if (beamText === 'end') {\r\n return XmlHelpers.beamStates.END;\r\n }\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n // same with notes and voices. same convert\r\n static getVoiceId(node: Element) {\r\n const voice = [...node.getElementsByTagName('voice')];\r\n if (voice.length && voice[0].textContent) {\r\n return parseInt(voice[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static smoPitchFromNote(noteNode: Element, defaultPitch: Pitch): Pitch {\r\n const accidentals = ['bb', 'b', 'n', '#', '##'];\r\n const letter: PitchLetter = XmlHelpers.getTextFromElement(noteNode, 'step', defaultPitch.letter).toLowerCase() as PitchLetter;\r\n const octave = XmlHelpers.getNumberFromElement(noteNode, 'octave', defaultPitch.octave);\r\n const xaccidental = XmlHelpers.getNumberFromElement(noteNode, 'alter', 0);\r\n return { letter, accidental: accidentals[xaccidental + 2], octave };\r\n }\r\n static isGrace(noteNode: Element) {\r\n const path = XmlHelpers.getChildrenFromPath(noteNode, ['grace']);\r\n return path?.length > 0;\r\n }\r\n static isSystemBreak(measureNode: Element) {\r\n const printNodes = measureNode.getElementsByTagName('print');\r\n if (printNodes.length) {\r\n const attrs = XmlHelpers.nodeAttributes(printNodes[0]);\r\n if (typeof (attrs['new-system']) !== 'undefined') {\r\n return attrs['new-system'] === 'yes';\r\n }\r\n }\r\n return false;\r\n }\r\n // ### durationFromType\r\n // Get the SMO tick duration of a note, based on the XML type element (quarter, etc)\r\n static durationFromType(noteNode: Element, def: number): number {\r\n const typeNodes = [...noteNode.getElementsByTagName('type')];\r\n if (typeNodes.length) {\r\n const txt = typeNodes[0].textContent;\r\n if (txt && XmlHelpers.noteTypesToSmoMap[txt]) {\r\n return XmlHelpers.noteTypesToSmoMap[txt];\r\n }\r\n }\r\n return def;\r\n }\r\n // ### durationFromNode\r\n // the true duration value, used to handle forward/backward\r\n static durationFromNode(noteNode: Element, def: number) {\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n const duration = parseInt(durationNodes[0].textContent, 10);\r\n return duration;\r\n }\r\n return def;\r\n }\r\n static ticksFromDuration(noteNode: Element, divisions: number, def: number): XmlDuration {\r\n const rv: XmlDuration = { tickCount: def, duration: def / divisions, alteration: { noteCount: 1, noteDuration: 1 } };\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n const timeAlteration = XmlHelpers.getTimeAlteration(noteNode);\r\n // different ways to declare note duration - from type is the graphical\r\n // type, SMO uses ticks for everything\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n rv.duration = parseInt(durationNodes[0].textContent, 10);\r\n rv.tickCount = 4096 * (rv.duration / divisions);\r\n } else {\r\n rv.tickCount = XmlHelpers.durationFromType(noteNode, def);\r\n rv.duration = (divisions / 4096) * rv.tickCount;\r\n }\r\n // If this is a tuplet, we adjust the note duration back to the graphical type\r\n // and SMO will create the tuplet after. We keep track of tuplet data though for beaming\r\n if (timeAlteration) {\r\n rv.tickCount = (rv.tickCount * timeAlteration.noteCount) / timeAlteration.noteDuration;\r\n rv.alteration = timeAlteration;\r\n }\r\n return rv;\r\n }\r\n \r\n static getTieData(noteNode: Element, selector: SmoSelector, pitchIndex: number): XmlTieType[] {\r\n const rv: XmlTieType[] = [];\r\n let number = 0;\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tied')];\r\n slurNodes.forEach((slurNode) => {\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orientation', 'auto');\r\n const type = slurNode.getAttribute('type') as string;\r\n number = XmlHelpers.getNumberFromAttribute(slurNode, 'number', 1);\r\n rv.push({ number, type, orientation, selector, pitchIndex });\r\n });\r\n });\r\n return rv;\r\n }\r\n static getSlurData(noteNode: Element, selector: SmoSelector): XmlSlurType[] {\r\n const rv: XmlSlurType[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('slur')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orienation', 'auto');\r\n const placement = XmlHelpers.getTextFromAttribute(slurNode, 'placement', 'auto');\r\n const controlX = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-x', 0);\r\n // Y coordinates are reversed from music XML to SVG, hence the -1\r\n const controlY = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-y', 15) * -1;\r\n const slurInfo = { number, type, orientation, placement, controlX, controlY, selector, invert: false, yOffset: 0 };\r\n rv.push(slurInfo);\r\n });\r\n });\r\n return rv;\r\n }\r\n static getCrescendoData(directionElement: Element) {\r\n let rv = {};\r\n const nNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n nNodes.forEach((nNode) => {\r\n rv = { type: nNode.getAttribute('type') };\r\n });\r\n return rv;\r\n }\r\n static getTupletData(noteNode: Element): XmlTupletData[] {\r\n const rv: XmlTupletData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tuplet')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n rv.push({ number, type });\r\n });\r\n });\r\n return rv;\r\n }\r\n static articulationsAndOrnaments(noteNode: Element): SmoNoteModifierBase[] {\r\n const rv: SmoNoteModifierBase[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n ['articulations', 'ornaments'].forEach((typ) => {\r\n const articulations = [...nNode.getElementsByTagName(typ)];\r\n articulations.forEach((articulation) => {\r\n Object.keys(XmlHelpers.ornamentXmlToSmoMap).forEach((key) => {\r\n if (articulation.getElementsByTagName(key).length) {\r\n const ctor = eval('globalThis.Smo.' + XmlHelpers.ornamentXmlToSmoMap[key].ctor);\r\n rv.push(new ctor(XmlHelpers.ornamentXmlToSmoMap[key].params));\r\n }\r\n });\r\n });\r\n });\r\n });\r\n return rv;\r\n }\r\n static lyrics(noteNode: Element): XmlLyricData[] {\r\n const rv: XmlLyricData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('lyric')];\r\n nNodes.forEach((nNode) => {\r\n let verse = nNode.getAttribute('number');\r\n const text = XmlHelpers.getTextFromElement(nNode, 'text', '_');\r\n const name = nNode.getAttribute('name') as string;\r\n const syllabic = XmlHelpers.getTextFromElement(nNode, 'syllabic', 'end') as LyricSyllabic;\r\n // Per xml spec, verse can be specified by a string (name), as in 'chorus'\r\n if (!verse) {\r\n verse = name;\r\n }\r\n const obj: XmlLyricData = { _text: text, verse, syllabic };\r\n rv.push(obj);\r\n });\r\n return rv;\r\n }\r\n\r\n static getTimeAlteration(noteNode: Element): XmlDurationAlteration | null {\r\n const timeNodes = XmlHelpers.getChildrenFromPath(noteNode, ['time-modification']);\r\n if (timeNodes.length) {\r\n return {\r\n noteCount: XmlHelpers.getNumberFromElement(timeNodes[0], 'actual-notes', 1),\r\n noteDuration: XmlHelpers.getNumberFromElement(timeNodes[0], 'normal-notes', 1)\r\n };\r\n }\r\n return null;\r\n }\r\n // ### createTextElementChild\r\n // In: ../parent\r\n // Out: ../parent/elementName/obj[field]\r\n // returns elementName element. If obj is null, just creates and returns child\r\n // if obj is a string, it uses it as the text value\r\n static createTextElementChild(parentElement: Element, elementName: string, obj: any, field: string): Element {\r\n const el = parentElement.ownerDocument.createElement(elementName);\r\n if (obj) {\r\n if (typeof (obj) === 'string') {\r\n el.textContent = obj;\r\n } else {\r\n el.textContent = obj[field];\r\n }\r\n }\r\n parentElement.appendChild(el);\r\n return el;\r\n }\r\n static createAttributes(element: Element, obj: any) {\r\n Object.keys(obj).forEach((key) => {\r\n const attr = element.ownerDocument.createAttribute(key);\r\n attr.value = obj[key];\r\n element.setAttributeNode(attr);\r\n });\r\n }\r\n static createAttribute(element: Element, name: string, value: any) {\r\n const obj: any = {};\r\n obj[name] = value;\r\n XmlHelpers.createAttributes(element, obj);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { XmlHelpers, XmlLyricData, XmlDurationAlteration, XmlTieType, XmlSlurType, XmlTupletData } from './xmlHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoSystemGroup, SmoFormattingManager } from '../data/scoreModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoTie, SmoStaffHairpin, SmoSlur, SmoSlurParams, SmoInstrument, SmoInstrumentParams, TieLine } from '../data/staffModifiers';\r\nimport { SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoTempoText } from '../data/measureModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoLyric, SmoDynamicText, SmoGraceNote } from '../data/noteModifiers';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { Clef } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\n\r\nexport interface XmlClefInfo {\r\n clef: string, staffId: number\r\n}\r\nexport interface XmlVoiceInfo {\r\n notes: SmoNote[],\r\n ticksUsed: number\r\n}\r\nexport interface XmlStaffInfo {\r\n clefInfo: XmlClefInfo,\r\n measure: SmoMeasure | null,\r\n voices: Record\r\n}\r\nexport interface XmlBeamGroupInfo {\r\n ticks: number, notes: number\r\n}\r\nexport interface XmlSystemInfo {\r\n startSelector: SmoSelector, endSelector: SmoSelector, leftConnector: number\r\n}\r\nexport interface XmlStaffGroupInfo {\r\n start: number, length: number\r\n}\r\n/**\r\n * Wedge is a hairpin/cresc.\r\n */\r\nexport interface XmlWedgeInfo {\r\n type: string\r\n}\r\nexport interface XmlWedgeState {\r\n type: string, start: number\r\n}\r\nexport interface XmlHairpinInfo {\r\n type: string, start: number, end: number\r\n}\r\nexport interface XmlDynamicInfo {\r\n dynamic: string, offset: number\r\n}\r\nexport interface XmlCompletedTies {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n fromPitch: number,\r\n toPitch: number\r\n}\r\nexport interface XmlCompletedTuplet {\r\n tuplet: SmoTuplet, staffId: number, voiceId: number\r\n}\r\nexport interface XmlTupletState {\r\n start: SmoSelector,\r\n end: SmoSelector\r\n}\r\nexport interface XmlEnding {\r\n start: number,\r\n end: number,\r\n number: number\r\n}\r\nexport interface XmlPartGroup {\r\n partNum: number,\r\n group: SmoSystemGroup,\r\n parts: number[]\r\n}\r\n/**\r\n * Keep state of musical objects while parsing music xml\r\n * @category SmoToXml\r\n * */\r\nexport class XmlState {\r\n static get defaults() {\r\n return {\r\n divisions: 4096, tempo: new SmoTempoText(SmoTempoText.defaults), timeSignature: '4/4', keySignature: 'C',\r\n clefInfo: [], staffGroups: [], smoStaves: []\r\n };\r\n }\r\n clefInfo: XmlClefInfo[] = [];\r\n systems: XmlSystemInfo[] = [];\r\n staffGroups: XmlStaffGroupInfo[] = [];\r\n smoStaves: SmoSystemStaff[] = [];\r\n slurs: Record = {};\r\n wedges: XmlWedgeState = {} as XmlWedgeState;\r\n hairpins: XmlHairpinInfo[] = [];\r\n instrument: SmoInstrumentParams = SmoInstrument.defaults;\r\n instrumentMap: Record = {};\r\n globalCursor = 0;\r\n staffVoiceHash: Record = {};\r\n endingMap: Record = {};\r\n startRepeatMap: Record = {};\r\n endRepeatMap: Record = {};\r\n startBarline: number = SmoBarline.barlines.singleBar;\r\n endBarline: number = SmoBarline.barlines.singleBar;\r\n measureIndex = -1;\r\n completedSlurs: SmoSlurParams[] = [];\r\n completedTies: XmlTieType[] = [];\r\n verseMap: Record = {};\r\n measureNumber: number = 0;\r\n formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n tuplets: Record = {};\r\n tickCursor: number = 0;\r\n tempo: SmoTempoText = new SmoTempoText(SmoTempoText.defaults);\r\n staffArray: XmlStaffInfo[] = [];\r\n staffIndex: number = 0;\r\n graceNotes: SmoGraceNote[] = [];\r\n currentDuration: number = 0;\r\n beamGroups: Record = {};\r\n dynamics: XmlDynamicInfo[] = [];\r\n previousNote: SmoNote = new SmoNote(SmoNote.defaults);\r\n completedTuplets: XmlCompletedTuplet[] = [];\r\n newTitle: boolean = false;\r\n divisions: number = 4096;\r\n keySignature: string = 'c';\r\n timeSignature: string = '4/4';\r\n voiceIndex: number = 0;\r\n pixelsPerTenth: number = 0.4;\r\n musicFontSize: number = 16;\r\n partId: string = '';\r\n rehearsalMark = '';\r\n rehearsalMarks: Record = {};\r\n parts: Record = {}; \r\n openPartGroup: XmlPartGroup | null = null;\r\n // Initialize things that persist throughout a staff\r\n // likc hairpins and slurs\r\n initializeForPart() {\r\n this.slurs = {};\r\n this.wedges = {} as XmlWedgeState;\r\n this.hairpins = [];\r\n this.globalCursor = 0;\r\n this.staffVoiceHash = {};\r\n this.measureIndex = -1;\r\n this.completedSlurs = [];\r\n this.verseMap = {};\r\n this.instrument.keyOffset = 0;\r\n this.instrumentMap = {};\r\n this.partId = '';\r\n this.clefInfo = [];\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n // ### initializeForMeasure\r\n // reset state for a new measure: beam groups, tuplets\r\n // etc. that don't cross measure boundaries\r\n initializeForMeasure(measureElement: Element) {\r\n const oldMeasure = this.measureNumber;\r\n this.measureNumber =\r\n parseInt(measureElement.getAttribute('number') as string, 10) - 1;\r\n if (isNaN(this.measureNumber)) {\r\n this.measureNumber = oldMeasure + 1;\r\n }\r\n this.tuplets = {};\r\n this.tickCursor = 0;\r\n this.tempo = SmoMeasureModifierBase.deserialize(this.tempo.serialize());\r\n this.tempo.display = false;\r\n this.staffArray = [];\r\n this.graceNotes = [];\r\n this.currentDuration = 0;\r\n this.beamGroups = {};\r\n this.completedTuplets = [];\r\n this.dynamics = [];\r\n this.startBarline = SmoBarline.barlines.singleBar;\r\n this.endBarline = SmoBarline.barlines.singleBar;\r\n this.previousNote = new SmoNote(SmoNote.defaults);\r\n this.measureIndex += 1;\r\n this.rehearsalMark = '';\r\n }\r\n // ### initializeStaff\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part, so we treat them as a hash.\r\n // staff IDs persist per part but are sequential.\r\n initializeStaff(staffIndex: number, voiceIndex: number) {\r\n // If no clef is specified, default to treble\r\n if (typeof (this.staffArray[staffIndex]) === 'undefined') {\r\n this.staffArray.push({ clefInfo: { clef: 'treble', staffId: this.staffIndex }, measure: null, voices: {} });\r\n }\r\n if (typeof (this.staffArray[staffIndex].voices[voiceIndex]) === 'undefined') {\r\n this.staffArray[staffIndex].voices[voiceIndex] = { notes: [], ticksUsed: 0 };\r\n // keep track of 0-indexed voice for slurs and other modifiers\r\n if (!this.staffVoiceHash[staffIndex]) {\r\n this.staffVoiceHash[staffIndex] = [];\r\n }\r\n if (this.staffVoiceHash[staffIndex].indexOf(voiceIndex) < 0) {\r\n this.staffVoiceHash[staffIndex].push(voiceIndex);\r\n }\r\n // The smo 0-indexed voice index, used in selectors\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n // ### updateStaffGroups\r\n // once everything is parsed, figure out how to group the staves\r\n updateStaffGroups() {\r\n this.systems = [];\r\n this.staffGroups.forEach((staffGroup) => {\r\n const len = this.smoStaves[staffGroup.start].measures.length;\r\n const startSelector = SmoSelector.default;\r\n startSelector.staff = staffGroup.start;\r\n startSelector.measure = 0;\r\n const endSelector = SmoSelector.default;\r\n endSelector.staff = staffGroup.start + (staffGroup.length - 1);\r\n endSelector.measure = len;\r\n const grpParams = SmoSystemGroup.defaults;\r\n grpParams.startSelector = startSelector;\r\n grpParams.endSelector = endSelector;\r\n grpParams.leftConnector = SmoSystemGroup.connectorTypes.brace;\r\n this.systems.push(\r\n new SmoSystemGroup(grpParams)\r\n );\r\n });\r\n }\r\n addLyric(note: SmoNote, lyricData: XmlLyricData) {\r\n if (typeof (this.verseMap[lyricData.verse]) === 'undefined') {\r\n const keys = Object.keys(this.verseMap);\r\n this.verseMap[lyricData.verse] = keys.length;\r\n }\r\n lyricData.verse = this.verseMap[lyricData.verse];\r\n const params = SmoLyric.defaults;\r\n params.text = lyricData._text;\r\n params.verse = lyricData.verse;\r\n if (lyricData.syllabic === 'begin' || lyricData.syllabic === 'middle') {\r\n params.text += '-';\r\n }\r\n const lyric = new SmoLyric(params);\r\n note.addLyric(lyric);\r\n }\r\n /**\r\n * process a wedge aka hairpin dynamic\r\n * @param wedgeInfo \r\n */\r\n processWedge(wedgeInfo: XmlWedgeInfo) {\r\n if (wedgeInfo.type) {\r\n // If we already know about this wedge, it must have been\r\n // started, so complete it\r\n if (this.wedges.type) {\r\n this.hairpins.push({\r\n type: this.wedges.type,\r\n start: this.wedges.start,\r\n end: this.tickCursor + this.globalCursor\r\n });\r\n this.wedges = {} as XmlWedgeState;\r\n } else {\r\n this.wedges.type = wedgeInfo.type;\r\n this.wedges.start = this.tickCursor + this.globalCursor;\r\n }\r\n }\r\n }\r\n // ### backtrackHairpins\r\n // For the measure just parsed, find the correct tick for the\r\n // beginning and end of hairpins, if a hairpin stop directive\r\n // was received. These are not associated with a staff or voice, so\r\n // we use the first one in the measure element for both\r\n backtrackHairpins(smoStaff: SmoSystemStaff, staffId: number) {\r\n this.hairpins.forEach((hairpin) => {\r\n let hpMeasureIndex = this.measureIndex;\r\n let hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n let startTick = hpMeasure.voices[0].notes.length - 1;\r\n let hpTickCount = this.globalCursor; // All ticks read so far\r\n const endSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0,\r\n tick: -1, pitches: []\r\n };\r\n while (hpMeasureIndex >= 0 && hpTickCount > hairpin.start) {\r\n if (endSelector.tick < 0 && hpTickCount <= hairpin.end) {\r\n endSelector.tick = startTick;\r\n }\r\n hpTickCount -= hpMeasure.voices[0].notes[startTick].ticks.numerator;\r\n if (hpTickCount > hairpin.start) {\r\n startTick -= 1;\r\n if (startTick < 0) {\r\n hpMeasureIndex -= 1;\r\n hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n startTick = hpMeasure.voices[0].notes.length - 1;\r\n }\r\n }\r\n }\r\n\r\n const params = SmoStaffHairpin.defaults;\r\n params.startSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0, tick: startTick, pitches: []\r\n };\r\n params.endSelector = endSelector;\r\n params.hairpinType = hairpin.type === 'crescendo' ? SmoStaffHairpin.types.CRESCENDO : SmoStaffHairpin.types.DECRESCENDO;\r\n const smoHp = new SmoStaffHairpin(params);\r\n smoStaff.modifiers.push(smoHp);\r\n });\r\n this.hairpins = [];\r\n }\r\n\r\n // ### updateDynamics\r\n // Based on note just parsed, put the dynamics on the closest\r\n // note, based on the offset of dynamic\r\n updateDynamics() {\r\n const smoNote = this.previousNote;\r\n const tickCursor = this.tickCursor;\r\n const newArray: XmlDynamicInfo[] = [];\r\n this.dynamics.forEach((dynamic) => {\r\n if (tickCursor >= dynamic.offset) {\r\n const modParams = SmoDynamicText.defaults;\r\n modParams.text = dynamic.dynamic;\r\n // TODO: change the smonote name of this interface\r\n smoNote.addDynamic(new SmoDynamicText(modParams));\r\n } else {\r\n newArray.push(dynamic);\r\n }\r\n });\r\n this.dynamics = newArray;\r\n }\r\n // For the given voice, beam the notes according to the\r\n // note beam length\r\n backtrackBeamGroup(voice: XmlVoiceInfo, beamGroup: XmlBeamGroupInfo) {\r\n let i = 0;\r\n for (i = 0; i < beamGroup.notes; ++i) {\r\n const note = voice.notes[voice.notes.length - (i + 1)];\r\n if (!note) {\r\n console.warn('no note for beam group');\r\n return;\r\n }\r\n note.endBeam = i === 0;\r\n note.beamBeats = beamGroup.ticks;\r\n }\r\n }\r\n // ### updateBeamState\r\n // Keep track of beam instructions found while parsing note element\r\n // includes time alteration from tuplets\r\n updateBeamState(beamState: number, alteration: XmlDurationAlteration, voice: XmlVoiceInfo, voiceIndex: number) {\r\n const note = voice.notes[voice.notes.length - 1];\r\n if (beamState === XmlHelpers.beamStates.BEGIN) {\r\n this.beamGroups[voiceIndex] = {\r\n ticks: (note.tickCount * alteration.noteCount) / alteration.noteDuration,\r\n notes: 1\r\n };\r\n } else if (this.beamGroups[voiceIndex]) {\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).ticks += note.tickCount;\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).notes += 1;\r\n if (beamState === XmlHelpers.beamStates.END) {\r\n this.backtrackBeamGroup(voice, this.beamGroups[voiceIndex] as XmlBeamGroupInfo);\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n }\r\n updateTieStates(tieInfos: XmlTieType[]) {\r\n tieInfos.forEach((tieInfo) => {\r\n // tieInfo = { number, type, orientation, selector, pitchIndex }\r\n if (tieInfo.type === 'start') {\r\n this.completedTies.push(tieInfo);\r\n }\r\n });\r\n }\r\n updateEndings(barlineNode: Element) {\r\n const findStartEnding = (endingNumber: number, ix: number): XmlEnding | null | undefined => {\r\n const endingIx = Object.keys(this.endingMap).map((xx) => parseInt(xx, 10));\r\n let gt = -1;\r\n let rv: XmlEnding | null = null;\r\n endingIx.forEach((ee) => {\r\n if (ee > gt && ee <= ix) {\r\n const endings = this.endingMap[ee];\r\n const txt = endings.find((xx: XmlEnding) => xx.number === endingNumber);\r\n if (txt) {\r\n gt = ee;\r\n rv = txt;\r\n }\r\n if (endings.findIndex((xx: XmlEnding) => xx.number === endingNumber) >= 0) {\r\n gt = ee;\r\n }\r\n }\r\n });\r\n if (gt >= 0) {\r\n return rv;\r\n } else {\r\n return null;\r\n }\r\n };\r\n const ending = XmlHelpers.getEnding(barlineNode);\r\n if (ending) {\r\n if (ending.type === 'start') {\r\n const numbers = ending.numbers;\r\n numbers.forEach((nn) => {\r\n const endings: XmlEnding[] | undefined = this.endingMap[this.measureIndex];\r\n if (!endings) {\r\n this.endingMap[this.measureIndex] = [];\r\n }\r\n const inst = this.endingMap[this.measureIndex].find((ee) => ee.number === nn);\r\n if (!inst) {\r\n this.endingMap[this.measureIndex].push({\r\n start: this.measureIndex,\r\n end: -1,\r\n number: nn\r\n });\r\n }\r\n });\r\n } else {\r\n ending.numbers.forEach((nn) => {\r\n const inst = findStartEnding(nn, this.measureIndex);\r\n if (!inst) {\r\n console.warn('bad ending ' + nn + ' at ' + this.measureIndex);\r\n } else {\r\n inst.end = this.measureIndex;\r\n }\r\n });\r\n }\r\n }\r\n const barline = XmlHelpers.getBarline(barlineNode);\r\n if (barline === SmoBarline.barlines.startRepeat) {\r\n this.startBarline = barline;\r\n } else {\r\n this.endBarline = barline;\r\n }\r\n }\r\n\r\n /**\r\n * While parsing a measure,\r\n * on a slur element, either complete a started\r\n * slur or start a new one.\r\n * @param slurInfos \r\n */\r\n updateSlurStates(slurInfos: XmlSlurType[]) {\r\n const clef: Clef = this.staffArray[this.staffIndex].clefInfo.clef as Clef;\r\n const note = this.previousNote;\r\n const getForcedSlurDirection = (smoParams: SmoSlurParams, xmlStart: XmlSlurType, xmlEnd: XmlSlurType | null) => {\r\n // If the slur direction is specified, otherwise use autor.\r\n if (xmlStart.placement === 'above' || xmlEnd?.placement === 'above') {\r\n smoParams.position_end = SmoSlur.positions.ABOVE;\r\n smoParams.position = SmoSlur.positions.ABOVE;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n } else if (xmlStart.placement === 'below' || xmlEnd?.placement === 'below') {\r\n smoParams.position_end = SmoSlur.positions.BELOW;\r\n smoParams.position = SmoSlur.positions.BELOW;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n }\r\n };\r\n slurInfos.forEach((slurInfo) => {\r\n // slurInfo = { number, type, selector }\r\n if (slurInfo.type === 'start') {\r\n const slurParams = SmoSlur.defaults;\r\n // if start and stop come out of order\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'stop') {\r\n slurParams.endSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.startSelector = slurInfo.selector;\r\n slurParams.cp1x = slurInfo.controlX;\r\n slurParams.cp1y = slurInfo.controlY;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n // We no longer try to pick the slur direction until the score is complete.\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n } else if (slurInfo.type === 'stop') {\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'start') {\r\n const slurData = this.slurs[slurInfo.number] as XmlSlurType;\r\n const slurParams = SmoSlur.defaults;\r\n slurParams.startSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.endSelector = slurInfo.selector;\r\n slurParams.cp2x = slurInfo.controlX;\r\n slurParams.cp2y = slurInfo.controlY;\r\n slurParams.yOffset = slurData.yOffset;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n // console.log('complete slur ' + slurInfo.number + JSON.stringify(slurParams, null, ' '));\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n }\r\n });\r\n }\r\n assignRehearsalMarks() {\r\n Object.keys(this.rehearsalMarks).forEach((rm) => {\r\n const measureIx = parseInt(rm, 10);\r\n this.smoStaves.forEach((staff) => {\r\n const mark = new SmoRehearsalMark(SmoRehearsalMark.defaults);\r\n staff.addRehearsalMark(measureIx, mark);\r\n });\r\n });\r\n }\r\n /**\r\n * After reading in a measure, update any completed slurs and make them\r\n * into SmoSlur and add them to the SmoSystemGroup objects.\r\n * staffIndexOffset is the offset from the xml staffId and the score staff Id\r\n * (i.e. the staves that have already been parsed in other parts)\r\n */\r\n completeSlurs() {\r\n this.completedSlurs.forEach((slur) => { \r\n const smoSlur = new SmoSlur(slur);\r\n this.smoStaves[slur.startSelector.staff].addStaffModifier(smoSlur);\r\n });\r\n }\r\n /**\r\n * Go through saved start ties, try to find the endpoint of the tie. Ties in music xml\r\n * are a little ambiguous, we assume we are tying to the same pitch\r\n * @param score \r\n */\r\n completeTies(score: SmoScore) {\r\n this.completedTies.forEach((tieInfo) => {\r\n const startSelection: SmoSelection | null = SmoSelection.noteFromSelector(score, tieInfo.selector);\r\n if (startSelection && startSelection.note) {\r\n const startNote = startSelection.note;\r\n const endSelection = SmoSelection.nextNoteSelectionFromSelector(score, startSelection.selector);\r\n const endNote = endSelection?.note;\r\n const pitches: TieLine[] = [];\r\n if (endSelection && endNote) {\r\n startNote.pitches.forEach((spitch, ix) => {\r\n endNote.pitches.forEach((epitch, jx) => {\r\n if (SmoMusic.smoPitchToInt(spitch) === SmoMusic.smoPitchToInt(epitch)) {\r\n pitches.push({ from: ix, to: jx });\r\n }\r\n });\r\n });\r\n }\r\n if (pitches.length && endSelection) {\r\n const params = SmoTie.defaults;\r\n params.startSelector = startSelection.selector;\r\n params.endSelector = endSelection.selector;\r\n params.lines = pitches;\r\n const smoTie = new SmoTie(params);\r\n score.staves[smoTie.startSelector.staff].addStaffModifier(smoTie);\r\n }\r\n }\r\n });\r\n }\r\n // ### backtrackTuplets\r\n // If we received a tuplet end, go back through the voice\r\n // and construct the SmoTuplet.\r\n backtrackTuplets(voice: XmlVoiceInfo, tupletNumber: number, staffId: number, voiceId: number) {\r\n const tupletState = this.tuplets[tupletNumber];\r\n let i = tupletState.start.tick;\r\n const notes = [];\r\n const durationMap = [];\r\n while (i < voice.notes.length) {\r\n const note = voice.notes[i];\r\n notes.push(note);\r\n if (i === tupletState.start.tick) {\r\n durationMap.push(1.0);\r\n } else {\r\n const prev = voice.notes[i - 1];\r\n durationMap.push(note.ticks.numerator / prev.ticks.numerator);\r\n }\r\n i += 1;\r\n }\r\n const tp = SmoTuplet.defaults;\r\n tp.notes = notes;\r\n tp.durationMap = durationMap;\r\n tp.voice = voiceId;\r\n const tuplet = new SmoTuplet(tp);\r\n // Store the tuplet with the staff ID and voice so we\r\n // can add it to the right measure when it's created.\r\n this.completedTuplets.push({ tuplet, staffId, voiceId });\r\n }\r\n // ### updateTupletStates\r\n // react to a tuplet start or stop directive\r\n updateTupletStates(tupletInfos: XmlTupletData[], voice: XmlVoiceInfo, staffIndex: number, voiceIndex: number) {\r\n const tick = voice.notes.length - 1;\r\n tupletInfos.forEach((tupletInfo) => {\r\n if (tupletInfo.type === 'start') {\r\n this.tuplets[tupletInfo.number] = {\r\n start: { staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: [] },\r\n end: SmoSelector.default\r\n };\r\n } else if (tupletInfo.type === 'stop') {\r\n this.tuplets[tupletInfo.number].end = {\r\n staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: []\r\n };\r\n this.backtrackTuplets(voice, tupletInfo.number, staffIndex, voiceIndex);\r\n }\r\n });\r\n }\r\n addTupletsToMeasure(smoMeasure: SmoMeasure, staffId: number, voiceId: number) {\r\n const completed: XmlCompletedTuplet[] = [];\r\n this.completedTuplets.forEach((tuplet) => {\r\n if (tuplet.voiceId === voiceId && tuplet.staffId === staffId) {\r\n smoMeasure.tuplets.push(tuplet.tuplet);\r\n } else {\r\n completed.push(tuplet);\r\n }\r\n });\r\n this.completedTuplets = completed;\r\n }\r\n getSystems(): SmoSystemGroup[] {\r\n const rv: SmoSystemGroup[] = [];\r\n this.systems.forEach((system) => {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = system.startSelector;\r\n params.endSelector = system.endSelector;\r\n params.leftConnector = system.leftConnector;\r\n rv.push(new SmoSystemGroup(params));\r\n });\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Logic to convert music XML (finale) to Smo internal format\r\n * @module XmlToSmo\r\n */\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { XmlVoiceInfo, XmlState, XmlWedgeInfo } from './xmlState';\r\nimport { SmoLayoutManager, SmoPageLayout, SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, SmoVolta, SmoBarline } from '../data/measureModifiers';\r\nimport { SmoScore, isEngravingFont } from '../data/score';\r\nimport { SmoMeasure, SmoMeasureParams } from '../data/measure';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoGraceNote, SmoOrnament, SmoArticulation } from '../data/noteModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoNote, SmoNoteParams } from '../data/note';\r\nimport { Pitch, PitchKey, Clef } from '../data/common';\r\nimport { SmoOperation } from '../xform/operations';\r\nimport { SmoInstrument, SmoSlur, SmoTie, TieLine } from '../data/staffModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\n\r\n/**\r\n * A class that takes a music XML file and outputs a {@link SmoScore}\r\n * @category SmoToXml\r\n */\r\nexport class XmlToSmo {\r\n static get mmPerPixel() {\r\n return 0.264583;\r\n }\r\n /**\r\n * Vex renders everything as if the font size were 39\r\n */\r\n static get vexFontSize() {\r\n return 39;\r\n }\r\n static get customProportionDefault(): number {\r\n return SmoScore.defaults.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n static get pageLayoutMap() {\r\n return [\r\n { xml: 'page-height', smo: 'pageHeight' },\r\n { xml: 'page-width', smo: 'pageWidth' }\r\n ];\r\n }\r\n static get pageMarginMap() {\r\n return [\r\n { xml: 'left-margin', smo: 'leftMargin' },\r\n { xml: 'right-margin', smo: 'rightMargin' },\r\n { xml: 'top-margin', smo: 'topMargin' },\r\n { xml: 'bottom-margin', smo: 'bottomMargin' }\r\n ];\r\n }\r\n static get scoreInfoFields() {\r\n return ['title', 'subTitle', 'composer', 'copyright'];\r\n }\r\n /**\r\n * Convert music XML file from parsed xml to a {@link SmoScore}\r\n * @param xmlDoc \r\n * @returns\r\n */\r\n static convert(xmlDoc: Document): SmoScore {\r\n try {\r\n const scoreRoots = [...xmlDoc.getElementsByTagName('score-partwise')];\r\n if (!scoreRoots.length) {\r\n // no score node\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n\r\n const scoreRoot = scoreRoots[0];\r\n const rv: SmoScore = new SmoScore(SmoScore.defaults);\r\n rv.staves = [];\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.5;\r\n layoutDefaults.globalLayout.zoomScale = 1.0;\r\n const xmlState = new XmlState();\r\n xmlState.newTitle = false;\r\n rv.scoreInfo.name = 'Imported Smoosic';\r\n XmlToSmo.scoreInfoFields.forEach((field) => {\r\n (rv.scoreInfo as any)[field] = '';\r\n });\r\n const childNodes = [...scoreRoot.children];\r\n childNodes.forEach((scoreElement) => {\r\n if (scoreElement.tagName === 'work') {\r\n const scoreNameNode = [...scoreElement.getElementsByTagName('work-title')];\r\n if (scoreNameNode.length && scoreNameNode[0].textContent) {\r\n rv.scoreInfo.title = scoreNameNode[0].textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'identification') {\r\n const creators = [...scoreElement.getElementsByTagName('creator')];\r\n creators.forEach((creator) => {\r\n if (creator.getAttribute('type') === 'composer' && creator.textContent) {\r\n rv.scoreInfo.composer = creator.textContent;\r\n }\r\n });\r\n } else if (scoreElement.tagName === 'movement-title') {\r\n if (xmlState.newTitle && scoreElement.textContent) {\r\n rv.scoreInfo.subTitle = scoreElement.textContent;\r\n } else if (scoreElement.textContent) {\r\n rv.scoreInfo.title = scoreElement.textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'defaults') {\r\n XmlToSmo.defaults(scoreElement, rv, layoutDefaults, xmlState);\r\n } else if (scoreElement.tagName === 'part') {\r\n xmlState.initializeForPart();\r\n XmlToSmo.part(scoreElement, xmlState);\r\n } else if (scoreElement.tagName === 'part-list') {\r\n XmlToSmo.partList(scoreElement, rv, xmlState);\r\n }\r\n });\r\n // The entire score is parsed and xmlState now contains the staves.\r\n rv.formattingManager = xmlState.formattingManager;\r\n rv.staves = xmlState.smoStaves;\r\n xmlState.updateStaffGroups();\r\n rv.systemGroups = xmlState.getSystems();\r\n\r\n // Fix tempo to be column mapped\r\n rv.staves[0].measures.forEach((measure) => {\r\n const tempoStaff = rv.staves.find((ss) => ss.measures[measure.measureNumber.measureIndex].tempo.display === true);\r\n if (tempoStaff) {\r\n const tempo = tempoStaff.measures[measure.measureNumber.measureIndex].tempo;\r\n rv.staves.forEach((ss) => {\r\n ss.measures[measure.measureNumber.measureIndex].tempo =\r\n SmoMeasureModifierBase.deserialize(tempo);\r\n });\r\n }\r\n });\r\n const lm: SmoLayoutManager = rv.layoutManager as SmoLayoutManager;\r\n if (rv.scoreInfo.title) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.TITLE, rv.scoreInfo.title, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.subTitle) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.SUBTITLE, rv.scoreInfo.subTitle, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.composer) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.COMPOSER, rv.scoreInfo.composer, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n XmlToSmo.setSlurDefaults(rv);\r\n xmlState.completeTies(rv);\r\n \r\n rv.preferences.showPiano = false;\r\n XmlToSmo.setVoltas(rv, xmlState);\r\n rv.staves.forEach((staff) => {\r\n\r\n });\r\n return rv;\r\n } catch (exc) {\r\n console.warn(exc);\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n /**\r\n * when building the slurs, we don't always know which direction the beams will go or what other\r\n * voices there will be.\r\n * @param score\r\n */\r\n static setSlurDefaults(score: SmoScore) {\r\n score.staves.forEach((staff) => {\r\n const slurs = staff.modifiers.filter((mm) =>mm.ctor === 'SmoSlur');\r\n slurs.forEach((ss) => {\r\n const slur = (ss as any) as SmoSlur;\r\n let slurPosition = SmoSlur.positions.AUTO;\r\n if (slur.position === slur.position_end) {\r\n slurPosition = slur.position;\r\n }\r\n const slurParams = SmoOperation.getDefaultSlurDirection(score, ss.startSelector, ss.endSelector, slurPosition, slur.orientation);\r\n slur.position = slurParams.position;\r\n slur.position_end = slurParams.position_end;\r\n slur.invert = slurParams.invert;\r\n slur.yOffset = slurParams.yOffset;\r\n slur.cp1y = slurParams.cp1y;\r\n slur.cp2y = slurParams.cp2y;\r\n slur.xOffset = slurParams.xOffset;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * After parsing the XML, resolve the voltas we've saved\r\n * @param score \r\n * @param state \r\n */\r\n static setVoltas(score: SmoScore, state: XmlState) {\r\n const endingMeasures = Object.keys(state.endingMap).map((k) => parseInt(k, 10));\r\n endingMeasures.forEach((em) => {\r\n const endings = state.endingMap[em];\r\n endings.forEach((ending) => {\r\n const defs = SmoVolta.defaults;\r\n defs.number = ending.number;\r\n defs.startBar = ending.start;\r\n defs.endBar = ending.end >= 0 ? ending.end : ending.start;\r\n const volta = new SmoVolta(defs);\r\n SmoOperation.addEnding(score, volta);\r\n });\r\n });\r\n }\r\n static partList(partList: Element, score: SmoScore, state: XmlState) {\r\n const children = partList.children;\r\n let partIndex = 0;\r\n var i = 0;\r\n for (i = 0;i < children.length; ++i) {\r\n const child = children[i];\r\n if (child.tagName === 'score-part') {\r\n const partElement = child;\r\n const partData = new SmoPartInfo(SmoPartInfo.defaults);\r\n partData.partName = XmlHelpers.getTextFromElement(partElement, 'part-name', 'part ' + i);\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', i.toString());\r\n if (state.openPartGroup) {\r\n state.openPartGroup.parts.push(partIndex);\r\n }\r\n partIndex += 1;\r\n state.parts[partId] = partData;\r\n partData.partAbbreviation = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', 'p.');\r\n partData.midiDevice = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', null);\r\n // it seems like musicxml doesn't allow for different music font size in parts vs. score\r\n // partData.layoutManager.globalLayout.svgScale = 0.55;\r\n partData.layoutManager.globalLayout.svgScale = state.musicFontSize / XmlToSmo.vexFontSize;\r\n const midiElements = partElement.getElementsByTagName('midi-instrument');\r\n if (midiElements.length) {\r\n const midiElement = midiElements[0];\r\n partData.midiInstrument = {\r\n channel: XmlHelpers.getNumberFromElement(midiElement, 'midi-channel', 1),\r\n program: XmlHelpers.getNumberFromElement(midiElement, 'midi-program', 1),\r\n volume: XmlHelpers.getNumberFromElement(midiElement, 'volume', 80),\r\n pan: XmlHelpers.getNumberFromElement(midiElement, 'pan', 0)\r\n };\r\n }\r\n } else if (child.tagName === 'part-group') {\r\n const groupElement = child;\r\n if (state.openPartGroup) {\r\n const staffGroup = state.openPartGroup.group;\r\n state.openPartGroup.parts.forEach((part) => {\r\n if (staffGroup.startSelector.staff === 0 || staffGroup.startSelector.staff > part) {\r\n staffGroup.startSelector.staff = part;\r\n }\r\n if (staffGroup.endSelector.staff < part) {\r\n staffGroup.endSelector.staff = part;\r\n }\r\n });\r\n score.systemGroups.push(staffGroup);\r\n state.openPartGroup = null;\r\n } else {\r\n const staffGroup = new SmoSystemGroup(SmoSystemGroup.defaults); \r\n const groupNum = XmlHelpers.getNumberFromAttribute(groupElement, 'number', 1);\r\n const xmlSymbol = XmlHelpers.getTextFromElement(groupElement, 'group-symbol', 'single');\r\n if (xmlSymbol === 'single') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['single'];\r\n } else if (xmlSymbol === 'brace') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['brace'];\r\n } if (xmlSymbol === 'bracket') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['bracket'];\r\n } if (xmlSymbol === 'square') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['double'];\r\n }\r\n state.openPartGroup = {\r\n partNum: groupNum,\r\n parts: [],\r\n group: staffGroup\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n /**\r\n * page-layout element occurs in a couple of places\r\n * @param defaultsElement\r\n * @param layoutDefaults \r\n * @param xmlState \r\n */\r\n static pageSizeFromLayout(defaultsElement: Element, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n const pageLayoutNode = defaultsElement.getElementsByTagName('page-layout');\r\n if (pageLayoutNode.length) {\r\n XmlHelpers.assignDefaults(pageLayoutNode[0], layoutDefaults.globalLayout, XmlToSmo.pageLayoutMap);\r\n layoutDefaults.globalLayout.pageHeight *= xmlState.pixelsPerTenth;\r\n layoutDefaults.globalLayout.pageWidth *= xmlState.pixelsPerTenth;\r\n }\r\n const pageMarginNode = XmlHelpers.getChildrenFromPath(defaultsElement,\r\n ['page-layout', 'page-margins']);\r\n if (pageMarginNode.length) {\r\n XmlHelpers.assignDefaults(pageMarginNode[0], layoutDefaults.pageLayouts[0], XmlToSmo.pageMarginMap);\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n layoutDefaults.pageLayouts[0][attr] *= xmlState.pixelsPerTenth;\r\n });\r\n }\r\n }\r\n /**\r\n * /score-partwise/defaults\r\n * @param defaultsElement \r\n * @param score \r\n * @param layoutDefaults \r\n */\r\n static defaults(defaultsElement: Element, score: SmoScore, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n // Default scale for mxml\r\n let scale = 1 / 7;\r\n const currentScale = layoutDefaults.getGlobalLayout().svgScale;\r\n const scaleNode = defaultsElement.getElementsByTagName('scaling');\r\n if (scaleNode.length) {\r\n const mm = XmlHelpers.getNumberFromElement(scaleNode[0], 'millimeters', 1);\r\n const tn = XmlHelpers.getNumberFromElement(scaleNode[0], 'tenths', 7);\r\n if (tn > 0 && mm > 0) {\r\n scale = mm / tn;\r\n }\r\n }\r\n const fontNode = defaultsElement.getElementsByTagName('music-font');\r\n // All musicxml sizes are given in 'tenths'. Smoosic and vex use pixels. so find the ratio and \r\n // normalize all values.\r\n xmlState.pixelsPerTenth = scale / XmlToSmo.mmPerPixel;\r\n if (fontNode.length) {\r\n const fontString = fontNode[0].getAttribute('font-size');\r\n if (fontString) {\r\n xmlState.musicFontSize = parseInt(fontString, 10);\r\n }\r\n const fontFamily = fontNode[0].getAttribute('font-family');\r\n if (fontFamily && isEngravingFont(fontFamily)) {\r\n score.engravingFont =fontFamily;\r\n }\r\n }\r\n XmlToSmo.pageSizeFromLayout(defaultsElement, layoutDefaults, xmlState);\r\n \r\n // svgScale is the ratio of music font size to the default Vex font size (39).\r\n layoutDefaults.globalLayout.svgScale = xmlState.musicFontSize / XmlToSmo.vexFontSize;\r\n score.scaleTextGroups(currentScale / layoutDefaults.globalLayout.svgScale);\r\n }\r\n\r\n /**\r\n * /score-partwise/part\r\n * @param partElement \r\n * @param xmlState \r\n */\r\n static part(partElement: Element, xmlState: XmlState) {\r\n let staffId = xmlState.smoStaves.length;\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', '');\r\n console.log('part ' + partId);\r\n xmlState.initializeForPart();\r\n xmlState.partId = partId;\r\n const stavesForPart: SmoSystemStaff[] = [];\r\n const measureElements = [...partElement.getElementsByTagName('measure')];\r\n measureElements.forEach((measureElement) => {\r\n // Parse the measure element, populate staffArray of xmlState with the\r\n // measure data\r\n XmlToSmo.measure(measureElement, xmlState);\r\n const newStaves = xmlState.staffArray;\r\n if (newStaves.length > 1 && stavesForPart.length <= newStaves[0].clefInfo.staffId) {\r\n xmlState.staffGroups.push({ start: staffId, length: newStaves.length });\r\n }\r\n xmlState.globalCursor += (newStaves[0].measure as SmoMeasure).getMaxTicksVoice();\r\n newStaves.forEach((staffMeasure) => {\r\n if (stavesForPart.length <= staffMeasure.clefInfo.staffId) {\r\n const params = SmoSystemStaff.defaults;\r\n params.staffId = staffId;\r\n params.measureInstrumentMap = xmlState.instrumentMap;\r\n const newStaff = new SmoSystemStaff(params);\r\n if (xmlState.parts[partId]) {\r\n console.log('putting part ' + partId + ' in staff ' + newStaff.staffId);\r\n newStaff.partInfo = new SmoPartInfo(xmlState.parts[partId]);\r\n }\r\n console.log('createing stave ' + newStaff.staffId);\r\n stavesForPart.push(newStaff);\r\n staffId += 1;\r\n }\r\n const smoStaff = stavesForPart[staffMeasure.clefInfo.staffId];\r\n smoStaff.measures.push(staffMeasure.measure as SmoMeasure);\r\n });\r\n const oldStaffId = staffId - stavesForPart.length;\r\n xmlState.backtrackHairpins(stavesForPart[0], oldStaffId + 1);\r\n });\r\n if (stavesForPart.length > 1) {\r\n stavesForPart[0].partInfo.stavesAfter = 1;\r\n stavesForPart[0].partInfo.stavesBefore = 0;\r\n console.log('part has stave after ' + stavesForPart[0].staffId);\r\n stavesForPart[1].partInfo.stavesAfter = 0;\r\n stavesForPart[1].partInfo.stavesBefore = 1;\r\n console.log('part has stave before ' + stavesForPart[1].staffId);\r\n }\r\n xmlState.smoStaves = xmlState.smoStaves.concat(stavesForPart);\r\n xmlState.completeSlurs();\r\n xmlState.assignRehearsalMarks();\r\n }\r\n /**\r\n * /score-partwise/measure/direction/sound:tempo\r\n * @param element \r\n * @returns \r\n */\r\n static tempo(element: Element) {\r\n let tempoText = '';\r\n let customText = tempoText;\r\n const rv: { staffId: number, tempo: SmoTempoText }[] = [];\r\n const soundNodes = XmlHelpers.getChildrenFromPath(element,\r\n ['sound']);\r\n soundNodes.forEach((sound) => {\r\n let tempoMode = SmoTempoText.tempoModes.durationMode;\r\n tempoText = sound.getAttribute('tempo') as string;\r\n if (tempoText) {\r\n const bpm = parseInt(tempoText, 10);\r\n const wordNode =\r\n [...element.getElementsByTagName('words')];\r\n tempoText = wordNode.length ? wordNode[0].textContent as string :\r\n tempoText.toString();\r\n if (isNaN(parseInt(tempoText, 10))) {\r\n if (SmoTempoText.tempoTexts[tempoText.toLowerCase()]) {\r\n tempoMode = SmoTempoText.tempoModes.textMode;\r\n } else {\r\n tempoMode = SmoTempoText.tempoModes.customMode;\r\n customText = tempoText;\r\n }\r\n }\r\n const params = SmoTempoText.defaults;\r\n params.tempoMode = tempoMode;\r\n params.bpm = bpm;\r\n params.tempoText = tempoText;\r\n params.customText = customText;\r\n params.display = true;\r\n const tempo = new SmoTempoText(params);\r\n const staffId = XmlHelpers.getStaffId(element);\r\n rv.push({ staffId, tempo });\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * /score-partwise/measure/direction/dynamics\r\n * @param element \r\n * @returns \r\n */\r\n static dynamics(directionElement: Element, xmlState: XmlState) {\r\n let offset = 1;\r\n const dynamicNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'dynamics']);\r\n const rehearsalNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'rehearsal']);\r\n const offsetNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['offset']);\r\n if (offsetNodes.length) {\r\n offset = parseInt(offsetNodes[0].textContent as string, 10);\r\n }\r\n if (rehearsalNodes.length) {\r\n const rm = rehearsalNodes[0].textContent;\r\n if (rm) {\r\n xmlState.rehearsalMark = rm;\r\n }\r\n }\r\n dynamicNodes.forEach((dynamic) => {\r\n xmlState.dynamics.push({\r\n dynamic: dynamic.children[0].tagName,\r\n offset: (offset / xmlState.divisions) * 4096\r\n });\r\n });\r\n }\r\n\r\n // ### attributes\r\n // /score-partwise/part/measure/attributes\r\n static attributes(measureElement: Element, xmlState: XmlState) {\r\n let smoKey: PitchKey = {} as PitchKey;\r\n const attributesNodes = XmlHelpers.getChildrenFromPath(measureElement, ['attributes']);\r\n if (!attributesNodes.length) {\r\n return;\r\n }\r\n const attributesNode = attributesNodes[0];\r\n xmlState.divisions =\r\n XmlHelpers.getNumberFromElement(attributesNode, 'divisions', xmlState.divisions);\r\n\r\n const keyNode = XmlHelpers.getChildrenFromPath(attributesNode, ['key']);\r\n // MusicXML expresses keys in 'fifths' from C.\r\n if (keyNode.length) {\r\n const fifths = XmlHelpers.getNumberFromElement(keyNode[0], 'fifths', 0);\r\n if (fifths < 0) {\r\n smoKey = SmoMusic.circleOfFifths[SmoMusic.circleOfFifths.length + fifths];\r\n } else {\r\n smoKey = SmoMusic.circleOfFifths[fifths];\r\n }\r\n xmlState.keySignature = smoKey.letter.toUpperCase();\r\n if (smoKey.accidental !== 'n') {\r\n xmlState.keySignature += smoKey.accidental;\r\n }\r\n }\r\n const transposeNode = XmlHelpers.getChildrenFromPath(attributesNode, ['transpose']);\r\n if (transposeNode.length) {\r\n const offset = XmlHelpers.getNumberFromElement(transposeNode[0], 'chromatic', 0);\r\n if (offset !== xmlState.instrument.keyOffset) {\r\n xmlState.instrument.keyOffset = -1 * offset;\r\n if (xmlState.instrumentMap[xmlState.measureIndex]) {\r\n xmlState.instrumentMap[xmlState.measureIndex].keyOffset = xmlState.instrument.keyOffset;\r\n } else {\r\n const params = xmlState.instrument;\r\n xmlState.instrumentMap[xmlState.measureIndex] = new SmoInstrument(params);\r\n }\r\n }\r\n }\r\n\r\n const currentTime = xmlState.timeSignature.split('/');\r\n const timeNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['time']);\r\n if (timeNodes.length) {\r\n const timeNode = timeNodes[0];\r\n const num = XmlHelpers.getNumberFromElement(timeNode, 'beats', parseInt(currentTime[0], 10));\r\n const den = XmlHelpers.getNumberFromElement(timeNode, 'beat-type', parseInt(currentTime[1], 10));\r\n xmlState.timeSignature = '' + num + '/' + den;\r\n }\r\n\r\n const clefNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['clef']);\r\n if (clefNodes.length) {\r\n // We expect the number of clefs to equal the number of staves in each measure\r\n clefNodes.forEach((clefNode) => {\r\n let clefNum = 0;\r\n let clef = 'treble';\r\n const clefAttrs = XmlHelpers.nodeAttributes(clefNode);\r\n if (typeof (clefAttrs.number) !== 'undefined') {\r\n // staff numbers index from 1 in mxml\r\n clefNum = parseInt(clefAttrs.number, 10) - 1;\r\n }\r\n const clefType = XmlHelpers.getTextFromElement(clefNode, 'sign', 'G');\r\n const clefLine = XmlHelpers.getNumberFromElement(clefNode, 'line', 2);\r\n // mxml supports a zillion clefs, just implement the basics.\r\n if (clefType === 'F') {\r\n clef = 'bass';\r\n } else if (clefType === 'C') {\r\n if (clefLine === 4) {\r\n clef = 'alto';\r\n } else if (clefLine === 3) {\r\n clef = 'tenor';\r\n } else if (clefLine === 1) {\r\n clef = 'soprano';\r\n }\r\n } else if (clefType === 'percussion') {\r\n clef = 'percussion';\r\n }\r\n if (xmlState.clefInfo.length <= clefNum) {\r\n xmlState.clefInfo.push({ clef, staffId: clefNum });\r\n } else {\r\n xmlState.clefInfo[clefNum].clef = clef;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### wedge (hairpin)\r\n // /score-partwise/part/measure/direction/direction-type/wedge\r\n static wedge(directionElement: Element, xmlState: XmlState) {\r\n let crescInfo: XmlWedgeInfo | null = null;\r\n const wedgeNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n wedgeNodes.forEach((wedgeNode) => {\r\n crescInfo = { type: wedgeNode.getAttribute('type') as string };\r\n });\r\n // If this is a start hairpin, start it. If an end hairpin, add it to the\r\n // hairpin array with the type and start/stop ticks\r\n if (crescInfo !== null) {\r\n xmlState.processWedge(crescInfo);\r\n }\r\n }\r\n // ### direction\r\n // /score-partwise/part/measure/direction\r\n static direction(directionElement: Element, xmlState: XmlState) {\r\n const tempo = XmlToSmo.tempo(directionElement);\r\n // Only display tempo if changes.\r\n if (tempo.length) {\r\n // TODO: staff ID is with tempo, but tempo is per column in SMO\r\n if (!SmoTempoText.eq(xmlState.tempo, tempo[0].tempo)) {\r\n xmlState.tempo = tempo[0].tempo;\r\n xmlState.tempo.display = true;\r\n }\r\n }\r\n // parse dynamic node and add to xmlState\r\n XmlToSmo.dynamics(directionElement, xmlState);\r\n\r\n // parse wedge (hairpin)\r\n XmlToSmo.wedge(directionElement, xmlState);\r\n }\r\n // ### note\r\n // /score-partwise/part/measure/note\r\n static note(noteElement: Element, xmlState: XmlState) {\r\n let grIx = 0;\r\n const staffIndex: number = XmlHelpers.getStaffId(noteElement);\r\n xmlState.staffIndex = staffIndex;\r\n // We assume the clef information from attributes comes before the notes\r\n // xmlState.staffArray[staffIndex] = { clefInfo: { clef }, voices[voiceIndex]: notes[] }\r\n if (xmlState.staffArray.length <= staffIndex) {\r\n // mxml has measures for all staves in a part interleaved. In SMO they are\r\n // each in a separate stave object. Base the staves we expect based on\r\n // the number of clefs in the xml state object\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} as Record });\r\n });\r\n }\r\n const chordNode = XmlHelpers.getChildrenFromPath(noteElement, ['chord']);\r\n if (chordNode.length === 0) {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(noteElement, 0);\r\n }\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part (same with staff IDs). Update XML state if these are new\r\n // staves\r\n const voiceIndex = XmlHelpers.getVoiceId(noteElement);\r\n xmlState.voiceIndex = voiceIndex;\r\n xmlState.initializeStaff(staffIndex, voiceIndex);\r\n const voice = xmlState.staffArray[staffIndex].voices[voiceIndex];\r\n // Calculate the tick and staff index for selectors\r\n const tickIndex = chordNode.length < 1 ? voice.notes.length : voice.notes.length - 1;\r\n const smoVoiceIndex = xmlState.staffVoiceHash[staffIndex].indexOf(voiceIndex);\r\n const pitchIndex = chordNode.length ? xmlState.previousNote.pitches.length : 0;\r\n const smoStaffIndex = xmlState.smoStaves.length + staffIndex;\r\n const selector = {\r\n staff: smoStaffIndex, measure: xmlState.measureIndex, voice: smoVoiceIndex,\r\n tick: tickIndex, pitches: []\r\n };\r\n const divisions = xmlState.divisions;\r\n const printText = noteElement.getAttribute('print-object');\r\n const hideNote = typeof (printText) === 'string' && printText === 'no';\r\n const isGrace = XmlHelpers.isGrace(noteElement);\r\n const restNode = XmlHelpers.getChildrenFromPath(noteElement, ['rest']);\r\n const noteType = restNode.length ? 'r' : 'n';\r\n const durationData = XmlHelpers.ticksFromDuration(noteElement, divisions, 4096);\r\n const tickCount = durationData.tickCount;\r\n if (chordNode.length === 0) {\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed += tickCount;\r\n }\r\n xmlState.tickCursor = (xmlState.currentDuration / divisions) * 4096;\r\n const beamState = XmlHelpers.noteBeamState(noteElement);\r\n const slurInfos = XmlHelpers.getSlurData(noteElement, selector);\r\n const tieInfos = XmlHelpers.getTieData(noteElement, selector, pitchIndex);\r\n const tupletInfos = XmlHelpers.getTupletData(noteElement);\r\n const ornaments = XmlHelpers.articulationsAndOrnaments(noteElement);\r\n const lyrics = XmlHelpers.lyrics(noteElement);\r\n const flagState = XmlHelpers.getStemType(noteElement);\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const pitch: Pitch = XmlHelpers.smoPitchFromNote(noteElement,\r\n SmoMeasure.defaultPitchForClef[clefString]);\r\n if (isGrace === false) {\r\n if (chordNode.length) {\r\n // If this is a note in a chord, just add the pitch to previous note.\r\n xmlState.previousNote.pitches.push(pitch);\r\n xmlState.updateTieStates(tieInfos);\r\n } else {\r\n // Create a new note\r\n const noteData: SmoNoteParams = SmoNote.defaults;\r\n noteData.noteType = noteType;\r\n noteData.pitches = [pitch];\r\n // If this is a non-grace note, add any grace notes to the note since SMO\r\n // treats them as note modifiers\r\n noteData.ticks = { numerator: tickCount, denominator: 1, remainder: 0 };\r\n noteData.flagState = flagState;\r\n noteData.clef = clefString;\r\n xmlState.previousNote = new SmoNote(noteData);\r\n if (hideNote) {\r\n xmlState.previousNote.makeHidden(true);\r\n }\r\n xmlState.updateDynamics();\r\n ornaments.forEach((ornament) => {\r\n if (ornament.ctor === 'SmoOrnament') {\r\n xmlState.previousNote.toggleOrnament(ornament as SmoOrnament);\r\n } else if (ornament.ctor === 'SmoArticulation') {\r\n xmlState.previousNote.toggleArticulation(ornament as SmoArticulation);\r\n }\r\n });\r\n lyrics.forEach((lyric) => {\r\n xmlState.addLyric(xmlState.previousNote, lyric);\r\n });\r\n for (grIx = 0; grIx < xmlState.graceNotes.length; ++grIx) {\r\n xmlState.previousNote.addGraceNote(xmlState.graceNotes[grIx], grIx);\r\n }\r\n xmlState.graceNotes = []; // clear the grace note array\r\n // If this note starts later than the cursor due to forward, pad with rests\r\n if (xmlState.tickCursor > xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed) {\r\n const pads = SmoMusic.splitIntoValidDurations(\r\n xmlState.tickCursor - xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed);\r\n console.log(`padding ${pads.length} before ${xmlState.staffIndex}-${xmlState.measureIndex}-${xmlState.voiceIndex}-${tickIndex}`);\r\n pads.forEach((pad) => {\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const padNote = SmoMeasure.createRestNoteWithDuration(pad,\r\n clefString);\r\n padNote.makeHidden(true);\r\n voice.notes.push(padNote); \r\n });\r\n // slurs and ties use selector, so this affects them, also\r\n selector.tick += pads.length;\r\n // then reset the cursor since we are now in sync\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed = xmlState.tickCursor;\r\n }\r\n /* slurInfos.forEach((slurInfo) => {\r\n console.log(`xml slur: ${slurInfo.selector.staff}-${slurInfo.selector.measure}-${slurInfo.selector.voice}-${slurInfo.selector.tick} ${slurInfo.type} ${slurInfo.number}`);\r\n console.log(` ${slurInfo.placement}`);\r\n });*/\r\n /* tieInfos.forEach((tieInfo) => {\r\n console.log(`xml tie: ${tieInfo.selector.staff}-${tieInfo.selector.measure}-${tieInfo.selector.voice}-${tieInfo.selector.tick} ${tieInfo.type} `);\r\n console.log(` pitch ${tieInfo.pitchIndex} orient ${tieInfo.orientation} num ${tieInfo.number}`);\r\n });*/\r\n \r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n voice.notes.push(xmlState.previousNote);\r\n xmlState.updateBeamState(beamState, durationData.alteration, voice, voiceIndex);\r\n xmlState.updateTupletStates(tupletInfos, voice,\r\n staffIndex, voiceIndex);\r\n }\r\n } else {\r\n if (chordNode.length) {\r\n xmlState.graceNotes[xmlState.graceNotes.length - 1].pitches.push(pitch);\r\n } else {\r\n // grace note durations don't seem to have explicit duration, so\r\n // get it from note type\r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n xmlState.graceNotes.push(new SmoGraceNote({\r\n pitches: [pitch],\r\n ticks: { numerator: tickCount, denominator: 1, remainder: 0 }\r\n }));\r\n }\r\n }\r\n }\r\n static print(printElement: Element, xmlState: XmlState) {\r\n if (xmlState.parts[xmlState.partId]) {\r\n XmlToSmo.pageSizeFromLayout(printElement, xmlState.parts[xmlState.partId].layoutManager, xmlState);\r\n }\r\n }\r\n /**\r\n * /score-partwise/part/measure\r\n * A measure in music xml might represent several measures in SMO at the same\r\n * column in the score\r\n * @param measureElement \r\n * @param xmlState \r\n */\r\n static measure(measureElement: Element, xmlState: XmlState) {\r\n xmlState.initializeForMeasure(measureElement);\r\n const elements = [...measureElement.children];\r\n let hasNotes = false;\r\n elements.forEach((element) => { \r\n if (element.tagName === 'backup') {\r\n xmlState.currentDuration -= XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'forward') {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'attributes') {\r\n // update the running state of the XML with new information from this measure\r\n // if an XML attributes element is present\r\n XmlToSmo.attributes(measureElement, xmlState);\r\n } else if (element.tagName === 'direction') {\r\n XmlToSmo.direction(element, xmlState);\r\n } else if (element.tagName === 'note') {\r\n XmlToSmo.note(element, xmlState);\r\n hasNotes = true;\r\n } else if (element.tagName === 'barline') {\r\n xmlState.updateEndings(element);\r\n } else if (element.tagName === 'print') {\r\n XmlToSmo.print(element, xmlState);\r\n }\r\n });\r\n // If a measure has no notes, just make one with the defaults\r\n if (hasNotes === false && xmlState.staffArray.length < 1 && xmlState.clefInfo.length >= 1) {\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} });\r\n });\r\n }\r\n if (xmlState.rehearsalMark.length) {\r\n xmlState.rehearsalMarks[xmlState.measureIndex] = xmlState.rehearsalMark;\r\n }\r\n xmlState.staffArray.forEach((staffData) => {\r\n const clef = staffData.clefInfo.clef as Clef;\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n params.transposeIndex = xmlState.instrument.keyOffset;\r\n params.clef = clef;\r\n const smoMeasure = SmoMeasure.getDefaultMeasure(params);\r\n smoMeasure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n smoMeasure.format.measureIndex = xmlState.measureNumber;\r\n smoMeasure.format.systemBreak = XmlHelpers.isSystemBreak(measureElement);\r\n smoMeasure.tempo = xmlState.tempo;\r\n smoMeasure.format.proportionality = XmlToSmo.customProportionDefault;\r\n xmlState.formattingManager.updateMeasureFormat(smoMeasure.format);\r\n smoMeasure.keySignature = xmlState.keySignature;\r\n smoMeasure.timeSignature = SmoMeasure.convertLegacyTimeSignature(xmlState.timeSignature);\r\n smoMeasure.measureNumber.localIndex = xmlState.measureNumber;\r\n smoMeasure.measureNumber.measureIndex = xmlState.measureIndex;\r\n smoMeasure.measureNumber.staffId = staffData.clefInfo.staffId + xmlState.smoStaves.length;\r\n const startBarDefs = SmoBarline.defaults;\r\n startBarDefs.position = SmoBarline.positions.start;\r\n startBarDefs.barline = xmlState.startBarline;\r\n const endBarDefs = SmoBarline.defaults;\r\n endBarDefs.position = SmoBarline.positions.end;\r\n endBarDefs.barline = xmlState.endBarline;\r\n smoMeasure.setBarline(new SmoBarline(startBarDefs));\r\n smoMeasure.setBarline(new SmoBarline(endBarDefs));\r\n // voices not in array, put them in an array\r\n Object.keys(staffData.voices).forEach((voiceKey) => {\r\n const voice = staffData.voices[voiceKey];\r\n xmlState.addTupletsToMeasure(smoMeasure, staffData.clefInfo.staffId,\r\n parseInt(voiceKey, 10));\r\n voice.notes.forEach((note) => {\r\n if (!note.clef) {\r\n note.clef = smoMeasure.clef;\r\n }\r\n });\r\n smoMeasure.voices.push(voice);\r\n });\r\n if (smoMeasure.voices.length === 0) {\r\n smoMeasure.voices.push({ notes: SmoMeasure.getDefaultNotes(smoMeasure) });\r\n }\r\n staffData.measure = smoMeasure;\r\n });\r\n // Pad incomplete measures/voices with rests\r\n const maxTicks = xmlState.staffArray.map((staffData) => (staffData.measure as SmoMeasure).getMaxTicksVoice())\r\n .reduce((a, b) => a > b ? a : b);\r\n xmlState.staffArray.forEach((staffData) => {\r\n let i = 0;\r\n let j = 0;\r\n const measure = staffData.measure as SmoMeasure;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const curTicks = measure.getTicksFromVoice(i);\r\n if (curTicks < maxTicks) {\r\n const tickAr = SmoMusic.splitIntoValidDurations(maxTicks - curTicks);\r\n for (j = 0; j < tickAr.length; ++j) {\r\n measure.voices[i].notes.push(\r\n SmoMeasure.createRestNoteWithDuration(tickAr[j], measure.clef)\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoDynamicText, SmoMicrotone } from '../data/noteModifiers';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoStaffHairpin, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoTempoText, SmoBarline, SmoVolta } from '../data/measureModifiers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch } from '../data/common';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoAudioPitch } from '../data/music';\r\n\r\nexport interface SmoAudioRepeat {\r\n startRepeat: number,\r\n endRepeat?: number,\r\n voltas: SmoAudioVolta[]\r\n}\r\nexport interface SmoAudioVolta {\r\n measureIndex: number,\r\n ending: number\r\n}\r\nexport interface SmoAudioRepeatMap {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\nexport interface SmoAudioHairpin {\r\n hairpinType: number,\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n delta: number,\r\n ticks: number\r\n}\r\nexport interface SmoAudioTie {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoAudioNote {\r\n pitches: Pitch[],\r\n frequencies: number[],\r\n noteType: string,\r\n duration: number,\r\n offset: number,\r\n selector: SmoSelector,\r\n volume: number,\r\n padding?: boolean\r\n}\r\nexport interface SmoAudioTimeSignature {\r\n numerator: number,\r\n denominator: number\r\n}\r\nexport interface SmoAudioTrack {\r\n lastMeasure: number,\r\n notes: SmoAudioNote[],\r\n tempoMap: Record,\r\n measureNoteMap: Record,\r\n keyMap: Record,\r\n timeSignatureMap: Record,\r\n hairpins: SmoAudioHairpin[],\r\n volume: number,\r\n tiedNotes: SmoAudioTie[],\r\n repeats: []\r\n}\r\nexport interface AudioTracks {\r\n tracks: SmoAudioTrack[],\r\n repeats: SmoAudioRepeat[],\r\n repeatMap: SmoAudioRepeatMap[],\r\n measureBeats: number[],\r\n tempoMap: number[]\r\n}\r\n/** \r\n * Convert a score into a JSON structure that can be rendered to audio.\r\n * the return value looks like this:\r\n * ` { tracks, repeats, repeatMap} `\r\n * repeatMap is just an array of tuples with start/end measures.\r\n * each track contains:\r\n * ` { lastMeasure, notes, tempoMap, timeSignatureMap, hairpins, volume, tiedNotes } `\r\n * where each note might contain:\r\n * `{ pitches, noteType, duration, selector, volume }`\r\n * _Note_: pitches are smo pitches, durations are adjusted for beatTime\r\n * (beatTime === 4096 uses Smo/Vex ticks, 128 is midi tick default)\r\n * volume is normalized 0-1\r\n * @category SmoTransform\r\n */\r\nexport class SmoAudioScore {\r\n // ### dynamicVolumeMap\r\n // normalized dynamic\r\n static get dynamicVolumeMap(): Record {\r\n // matches SmoDynamicText.dynamics\r\n return {\r\n pp: 0.3,\r\n p: 0.4,\r\n mp: 0.5,\r\n mf: 0.6,\r\n f: 0.7,\r\n ff: 0.8\r\n };\r\n }\r\n static get emptyTrack(): SmoAudioTrack {\r\n return {\r\n lastMeasure: 0,\r\n notes: [],\r\n tempoMap: {},\r\n timeSignatureMap: {},\r\n hairpins: [],\r\n measureNoteMap: {},\r\n keyMap: {},\r\n volume: 0,\r\n tiedNotes: [],\r\n repeats: []\r\n };\r\n }\r\n timeDiv: number;\r\n score: SmoScore;\r\n beatTime: number;\r\n volume: number = 0;\r\n constructor(score: SmoScore, beatTime: number) {\r\n this.timeDiv = 4096 / beatTime;\r\n this.score = score;\r\n this.beatTime = beatTime;\r\n }\r\n // ### volumeFromNote\r\n // Return a normalized volume from the dynamic setting of the note\r\n // or supplied default if none exists\r\n static volumeFromNote(smoNote: SmoNote, def?: number): number {\r\n if (typeof (def) === 'undefined' || def === 0) {\r\n def = SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.PP];\r\n }\r\n const dynamic: SmoDynamicText[] = smoNote.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n if (dynamic.length < 1) {\r\n return def;\r\n }\r\n if (dynamic[0].text === SmoDynamicText.dynamics.SFZ) {\r\n return SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.F];\r\n }\r\n if (typeof (SmoAudioScore.dynamicVolumeMap[dynamic[0].text]) === 'undefined') {\r\n return def;\r\n }\r\n return SmoAudioScore.dynamicVolumeMap[dynamic[0].text];\r\n }\r\n getVoltas(repeat: SmoAudioRepeat, measureIndex: number): SmoAudioVolta[] {\r\n let v1 = measureIndex;\r\n let endings = null;\r\n let currentEnding = -1;\r\n const rv: SmoAudioVolta[] = [];\r\n const staff = this.score.staves[0];\r\n while (v1 > repeat.startRepeat) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (endings.length && endings[0].endSelector) {\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = endings[0].endSelector.measure + 1;\r\n break;\r\n }\r\n v1--;\r\n }\r\n if (currentEnding < 0 || !staff?.measures) {\r\n return rv;\r\n }\r\n while (endings?.length && v1 < staff.measures.length) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (!endings.length) {\r\n break;\r\n }\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = (endings[0].endSelector as SmoSelector).measure + 1;\r\n }\r\n rv.sort((a: SmoAudioVolta, b: SmoAudioVolta) => a.ending - b.ending);\r\n return rv;\r\n }\r\n // ### ticksFromSelection\r\n // return the count of ticks between the selectors, adjusted for\r\n // beatTime\r\n ticksFromSelection(startSelector: SmoSelector, endSelector: SmoSelector): number {\r\n const selection = SmoSelection.selectionFromSelector(this.score, startSelector);\r\n const note = selection?.note as SmoNote;\r\n let ticks: number = note.tickCount;\r\n let nextSelection: SmoSelection | null = SmoSelection.nextNoteSelectionFromSelector(this.score, startSelector);\r\n while (nextSelection && nextSelection.note && !SmoSelector.gt(nextSelection.selector, endSelector)) {\r\n ticks += nextSelection.note.tickCount;\r\n nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, nextSelection.selector);\r\n }\r\n return ticks / this.timeDiv;\r\n }\r\n // ### getHairpinInfo\r\n // Get any hairpin starting at this selection, and calculate its\r\n // effect on the overall volume\r\n getHairpinInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const staff: SmoSystemStaff = selection.staff;\r\n const selector: SmoSelector = selection.selector;\r\n const cp = (x: SmoSelector) => JSON.parse(JSON.stringify(x));\r\n const hps: StaffModifierBase[] = staff.getModifiersAt(selector)\r\n .filter((hairpin) => hairpin.ctor === 'SmoStaffHairpin' &&\r\n SmoSelector.eq(hairpin.startSelector, selector));\r\n const rv: SmoAudioHairpin[] = [];\r\n // clear out old hairpins.\r\n // usually there will only be a single hairpin per voice, except\r\n // in the case of overlapping.\r\n track.hairpins.forEach((hairpin: SmoAudioHairpin) => {\r\n if (SmoSelector.gteq(selection.selector, hairpin.startSelector) &&\r\n SmoSelector.lteq(selection.selector, hairpin.endSelector)) {\r\n rv.push(hairpin);\r\n }\r\n });\r\n track.hairpins = rv;\r\n\r\n hps.forEach((hairpin) => {\r\n const ch = hairpin as SmoStaffHairpin;\r\n let endDynamic = 0;\r\n const trackHairpin: SmoAudioHairpin = {\r\n hairpinType: ch.hairpinType,\r\n startSelector: cp(hairpin.startSelector),\r\n endSelector: cp(hairpin.endSelector),\r\n delta: 0,\r\n ticks: 0\r\n };\r\n // For a hairpin, try to calculate the volume difference from start to end,\r\n // as a function of ticks\r\n const endSelection: SmoSelection | null = SmoSelection.selectionFromSelector(this.score, hairpin.endSelector);\r\n if (endSelection !== null && typeof (endSelection.note) !== 'undefined') {\r\n const endNote = endSelection.note as SmoNote;\r\n const curNote = selection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(endNote);\r\n const startDynamic = SmoAudioScore.volumeFromNote(curNote, track.volume);\r\n if (startDynamic === endDynamic) {\r\n const nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, hairpin.endSelector);\r\n if (nextSelection) {\r\n const nextNote = nextSelection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(nextNote);\r\n }\r\n }\r\n if (startDynamic === endDynamic) {\r\n const offset = (hairpin as SmoStaffHairpin).hairpinType === SmoStaffHairpin.types.CRESCENDO ? 0.1 : -0.1;\r\n endDynamic = Math.max(endDynamic + offset, 0.1);\r\n endDynamic = Math.min(endDynamic, 1.0);\r\n }\r\n trackHairpin.delta = endDynamic - startDynamic;\r\n trackHairpin.ticks = this.ticksFromSelection(hairpin.startSelector, hairpin.endSelector);\r\n track.hairpins.push(trackHairpin);\r\n }\r\n });\r\n }\r\n // ### computeVolume\r\n // come up with a current normalized volume based on dynamics\r\n // that appear in the music\r\n computeVolume(track: SmoAudioTrack, selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n if (track.volume === 0) {\r\n track.volume = SmoAudioScore.volumeFromNote(note,\r\n SmoAudioScore.dynamicVolumeMap.p);\r\n return;\r\n }\r\n if (track.hairpins.length) {\r\n const hp = track.hairpins[0];\r\n const coff = (note.tickCount / this.timeDiv) / hp.ticks;\r\n track.volume += hp.delta * coff;\r\n } else {\r\n track.volume = SmoAudioScore.volumeFromNote(note, track.volume);\r\n }\r\n }\r\n getSlurInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const tn: SmoAudioTie[] = [];\r\n const cp = (x: any) => JSON.parse(JSON.stringify(x));\r\n track.tiedNotes.forEach((tie) => {\r\n if (SmoSelector.gteq(selection.selector, tie.startSelector) && SmoSelector.lteq(selection.selector, tie.endSelector)) { \r\n tn.push(tie);\r\n }\r\n });\r\n track.tiedNotes = tn;\r\n const tieStart = selection.staff.getTiesStartingAt(selection.selector);\r\n tieStart.forEach((tie) => {\r\n tn.push({\r\n startSelector: cp(tie.startSelector),\r\n endSelector: cp(tie.endSelector)\r\n });\r\n });\r\n }\r\n isTiedPitch(track: SmoAudioTrack, selection: SmoSelection, noteIx: number): boolean {\r\n if (noteIx < 1) {\r\n return false;\r\n }\r\n if (!track.tiedNotes.length) {\r\n return false;\r\n }\r\n if (track.notes[noteIx - 1].noteType !== 'n') {\r\n return false;\r\n }\r\n // Don't do this for first note of nth endings, because it will mess up\r\n // other endings.\r\n if (selection.selector.tick === 0) {\r\n const endings = selection.measure.getNthEndings();\r\n if (endings.length) {\r\n return false;\r\n }\r\n }\r\n // the first note should be played, not tied\r\n if (SmoSelector.eq(track.tiedNotes[0].startSelector, selection.selector)) {\r\n return false;\r\n }\r\n return SmoMusic.pitchArraysMatch(track.notes[noteIx - 1].pitches, (selection.note as SmoNote).pitches);\r\n }\r\n static updateMeasureIndexMap(note: SmoAudioNote, measureIndexMap: Record>) {\r\n if (note.noteType !== 'n') {\r\n return;\r\n }\r\n const selector = note.selector;\r\n if (typeof (measureIndexMap[selector.measure]) === 'undefined') {\r\n measureIndexMap[selector.measure] = {} as Record;\r\n }\r\n const measureIndex = measureIndexMap[selector.measure];\r\n if (typeof (measureIndex[selector.tick]) === 'undefined') {\r\n measureIndex[selector.tick] = [];\r\n }\r\n if (note.noteType === 'n') {\r\n measureIndex[selector.tick].push(note);\r\n }\r\n }\r\n updateMeasureNoteMap(track: SmoAudioTrack, measureIndex: number, note: SmoAudioNote) {\r\n if (!track.measureNoteMap[measureIndex]) {\r\n track.measureNoteMap[measureIndex] = [];\r\n }\r\n track.measureNoteMap[measureIndex].push(note)\r\n }\r\n createTrackNote(track: SmoAudioTrack, selection: SmoSelection, duration: number, runningDuration: number, measureIndexMap: Record>) {\r\n const noteIx = track.notes.length;\r\n if (this.isTiedPitch(track, selection, noteIx)) {\r\n track.notes[noteIx - 1].duration += duration;\r\n const restPad = this.createTrackRest(track, duration, runningDuration, selection.selector, measureIndexMap);\r\n // Indicate this rest is just padding for a previous tied note. Midi and audio render this\r\n // differently\r\n restPad.padding = true;\r\n track.notes.push(restPad);\r\n return;\r\n }\r\n const tpitches: Pitch[] = [];\r\n const frequencies: number[] = [];\r\n const xpose = selection.measure.transposeIndex;\r\n const smoNote = selection.note as SmoNote;\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n tpitches.push(SmoMusic.smoIntToPitch(\r\n SmoMusic.smoPitchToInt(pitch) - xpose));\r\n const mtone: SmoMicrotone | null = smoNote.getMicrotone(pitchIx) ?? null;\r\n frequencies.push(SmoAudioPitch.smoPitchToFrequency(pitch, -1 * xpose, mtone));\r\n });\r\n const pitchArray = JSON.parse(JSON.stringify(tpitches));\r\n const note: SmoAudioNote = {\r\n pitches: pitchArray,\r\n noteType: 'n',\r\n duration,\r\n offset: runningDuration,\r\n selector: selection.selector,\r\n volume: track.volume,\r\n frequencies\r\n };\r\n this.updateMeasureNoteMap(track, selection.selector.measure, note);\r\n track.notes.push(note);\r\n SmoAudioScore.updateMeasureIndexMap(note, measureIndexMap);\r\n }\r\n createTrackRest(track: SmoAudioTrack, duration: number, runningDuration: number, selector: SmoSelector, \r\n measureIndexMap: Record>): SmoAudioNote {\r\n const rest: SmoAudioNote = {\r\n duration,\r\n offset: runningDuration,\r\n noteType: 'r',\r\n selector,\r\n volume: 0,\r\n pitches: [],\r\n frequencies: []\r\n };\r\n SmoAudioScore.updateMeasureIndexMap(rest, measureIndexMap);\r\n this.updateMeasureNoteMap(track, selector.measure, rest); \r\n return rest;\r\n }\r\n createRepeatMap(repeats: SmoAudioRepeat[]): SmoAudioRepeatMap[] {\r\n let startm = 0;\r\n let j = 0;\r\n const staff = this.score.staves[0];\r\n const repeatMap: SmoAudioRepeatMap[] = [];\r\n const endm = staff.measures.length - 1;\r\n repeats.forEach((repeat) => {\r\n // Include the current start to start of repeat, unless there is no start repeat\r\n if (repeat.startRepeat > 0) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: repeat.startRepeat - 1 });\r\n }\r\n // Include first time through\r\n if (repeat.endRepeat) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n }\r\n startm = repeat.startRepeat;\r\n // nth time through, go to the start of volta 0, then to the start of volta n\r\n if (repeat.endRepeat && repeat.voltas.length < 1) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n startm = repeat.endRepeat + 1;\r\n }\r\n for (j = 1; j < repeat.voltas.length; ++j) {\r\n const volta = repeat.voltas[j];\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.voltas[0].measureIndex - 1 });\r\n // If there are more endings, repeat to first volta\r\n if (j + 1 < repeat.voltas.length) {\r\n repeatMap.push({ startMeasure: volta.measureIndex, endMeasure: repeat.voltas[j + 1].measureIndex - 1 });\r\n } else {\r\n startm = volta.measureIndex;\r\n }\r\n }\r\n });\r\n if (startm <= endm) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: endm });\r\n }\r\n return repeatMap;\r\n }\r\n normalizeVolume(measureIndexMap: Record>) {\r\n let i = 0;\r\n let j = 0;\r\n let runningSum = -1;\r\n const measureKeys = Object.keys(measureIndexMap);\r\n for (i = 0; i < measureKeys.length; ++i) {\r\n const measureNotes = measureIndexMap[i];\r\n if (typeof (measureNotes) === 'undefined') {\r\n continue;\r\n }\r\n const tickKeys = Object.keys(measureNotes);\r\n for (j = 0; j < tickKeys.length; ++j) {\r\n let volumeSum = 0;\r\n let normalize = 1.0;\r\n const tickNotes = measureNotes[parseInt(tickKeys[j], 10)];\r\n if (typeof (tickNotes) === 'undefined') {\r\n continue;\r\n }\r\n volumeSum = tickNotes.map((nn) => nn.volume).reduce((a, b) => a + b);\r\n if (volumeSum > 1.0) {\r\n normalize = 1.0 / volumeSum;\r\n volumeSum = 1.0;\r\n }\r\n if (runningSum < 0) {\r\n runningSum = volumeSum;\r\n }\r\n const diff = Math.abs(runningSum - volumeSum);\r\n if (diff > 0.6) {\r\n const avg = (volumeSum * 3 + runningSum) / 4;\r\n normalize = normalize * avg;\r\n }\r\n runningSum = volumeSum * normalize;\r\n tickNotes.forEach((nn) => {\r\n nn.volume *= normalize;\r\n });\r\n runningSum = volumeSum;\r\n }\r\n }\r\n }\r\n convert(): AudioTracks {\r\n let measureIx = 0;\r\n const trackHash: Record = {};\r\n const measureBeats: number[] = [];\r\n const measureIndexMap = {};\r\n const repeats: SmoAudioRepeat[] = [];\r\n let startRepeat = 0;\r\n const tempoMap: number[] = [];\r\n this.score.staves.forEach((staff, staffIx) => {\r\n let runningKey = staff.measures[0].keySignature;\r\n this.volume = 0;\r\n for (measureIx = 0; measureIx < staff.measures.length; ++measureIx) {\r\n const measure = staff.measures[measureIx];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let duration = 0;\r\n const trackKey = (this.score.staves.length * voiceIx) + staffIx;\r\n if (typeof (trackHash[trackKey]) === 'undefined') {\r\n trackHash[trackKey] = SmoAudioScore.emptyTrack;\r\n }\r\n const measureSelector = SmoSelector.default;\r\n measureSelector.staff = staffIx;\r\n measureSelector.measure = measureIx;\r\n const track: SmoAudioTrack = trackHash[trackKey];\r\n if (!measure.tempo) {\r\n measure.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n const tempo = measure.tempo.bpm * (measure.tempo.beatDuration / 4096);\r\n // staff 0/voice 0, set track values for the measure\r\n if (voiceIx === 0) {\r\n if (staffIx === 0) {\r\n track.keyMap[0] = runningKey;\r\n measureBeats.push(measure.getMaxTicksVoice() / this.timeDiv);\r\n const startBar = measure.getStartBarline();\r\n const endBar = measure.getEndBarline();\r\n if (startBar.barline === SmoBarline.barlines.startRepeat) {\r\n startRepeat = measureIx;\r\n }\r\n if (endBar.barline === SmoBarline.barlines.endRepeat) {\r\n const repeat: SmoAudioRepeat = { startRepeat, endRepeat: measureIx, voltas: [] };\r\n repeat.voltas = this.getVoltas(repeat, measureIx);\r\n repeats.push(repeat);\r\n }\r\n tempoMap.push(tempo);\r\n }\r\n\r\n const selectorKey = SmoSelector.getMeasureKey(measureSelector);\r\n track.tempoMap[selectorKey] = Math.round(tempo);\r\n if (measure.keySignature !== runningKey) {\r\n runningKey = measure.keySignature;\r\n track.keyMap[measureIx] = runningKey;\r\n }\r\n track.timeSignatureMap[selectorKey] = {\r\n numerator: measure.timeSignature.actualBeats,\r\n denominator: measure.timeSignature.beatDuration\r\n };\r\n }\r\n // If this voice is not in every measure, fill in the space\r\n // in its own channel.\r\n while (track.lastMeasure < measureIx) {\r\n track.notes.push(this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff: staffIx, measure: track.lastMeasure, voice: voiceIx, tick: 0, pitches: [] },\r\n measureIndexMap,\r\n ));\r\n track.lastMeasure += 1;\r\n }\r\n let tupletTicks = 0;\r\n let runningDuration = 0;\r\n voice.notes.forEach((note, noteIx) => {\r\n const selector = {\r\n staff: staffIx, measure: measureIx, voice: voiceIx, tick: noteIx, pitches: []\r\n };\r\n const selection = SmoSelection.selectionFromSelector(this.score, selector) as SmoSelection;\r\n // update staff features of slur/tie/cresc.\r\n this.getSlurInfo(track, selection);\r\n this.getHairpinInfo(track, selection);\r\n const tuplet = measure.getTupletForNote(note);\r\n if (tuplet && tuplet.getIndexOfNote(note) === 0) {\r\n tupletTicks = tuplet.tickCount / this.timeDiv;\r\n }\r\n if (tupletTicks) {\r\n // tuplet likely won't fit evenly in ticks, so\r\n // use remainder in last tuplet note.\r\n if (tuplet && tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) {\r\n duration = tupletTicks;\r\n tupletTicks = 0;\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n tupletTicks -= duration;\r\n }\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n }\r\n if (note.isRest() || note.isSlash()) {\r\n track.notes.push(this.createTrackRest(track, duration, runningDuration, selector, measureIndexMap));\r\n } else {\r\n this.computeVolume(track, selection);\r\n this.createTrackNote(track, selection, duration, runningDuration, measureIndexMap);\r\n }\r\n runningDuration += duration;\r\n });\r\n track.lastMeasure += 1;\r\n });\r\n }\r\n });\r\n // For voices that don't fill out the full piece, fill them in with rests\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key]);\r\n const maxMeasure = tracks[0].lastMeasure;\r\n tracks.forEach((track) => {\r\n while (track.lastMeasure < maxMeasure) {\r\n const staff = track.notes[0].selector.staff;\r\n const voice = track.notes[0].selector.voice;\r\n const rest: SmoAudioNote = this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff, measure: track.lastMeasure, voice, tick: 0, pitches: [] }, measureIndexMap\r\n );\r\n track.notes.push(rest);\r\n track.lastMeasure += 1;\r\n }\r\n });\r\n const repeatMap = this.createRepeatMap(repeats);\r\n this.normalizeVolume(measureIndexMap);\r\n return { tracks, repeats, repeatMap, measureBeats, tempoMap };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoAttrs, getId } from '../data/common';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../data/measure';\r\nimport { TickMap } from './tickMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n\r\nexport interface SmoBeamGroupParams {\r\n notes: SmoNote[],\r\n voice: number\r\n}\r\n\r\n/**\r\n * Contain a group of {@link SmoNote} used for beaming.\r\n * @internal\r\n */\r\nclass SmoBeamGroup implements ISmoBeamGroup {\r\n notes: SmoNote[];\r\n attrs: SmoAttrs;\r\n voice: number = 0;\r\n constructor(params: SmoBeamGroupParams) {\r\n let i = 0;\r\n this.voice = params.voice;\r\n this.notes = params.notes;\r\n smoSerialize.vexMerge(this, params);\r\n\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoBeamGroup'\r\n };\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (note.tickCount < 4096) {\r\n note.beam_group = this.attrs;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply the beam policy set up in node and measure to group the notes into beam groups\r\n * @category SmoTransform\r\n */\r\nexport class SmoBeamer {\r\n static applyBeams(measure: SmoMeasure) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const beamer = new SmoBeamer(measure, i);\r\n const tickmap = measure.tickmapForVoice(i);\r\n for (j = 0; j < tickmap.durationMap.length; ++j) {\r\n beamer.beamNote(tickmap, j, measure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n measure: SmoMeasure;\r\n duration: number;\r\n meterNumbers: number[];\r\n beamBeats: number;\r\n skipNext: number;\r\n currentGroup: SmoNote[];\r\n constructor(measure: SmoMeasure, voice: number) {\r\n this.measure = measure;\r\n this._removeVoiceBeam(measure, voice);\r\n this.duration = 0;\r\n this.meterNumbers = [measure.timeSignature.actualBeats, measure.timeSignature.beatDuration];\r\n // beam on 1/4 notes in most meter, triple time dotted quarter\r\n this.beamBeats = 2 * 2048;\r\n if (this.meterNumbers[0] % 3 === 0) {\r\n this.beamBeats = 3 * 2048;\r\n }\r\n this.skipNext = 0;\r\n this.currentGroup = [];\r\n }\r\n\r\n get beamGroups() {\r\n return this.measure.beamGroups;\r\n }\r\n _removeVoiceBeam(measure: SmoMeasure, voice: number) {\r\n const beamGroups: ISmoBeamGroup[] = [];\r\n measure.beamGroups.forEach((gr: ISmoBeamGroup) => {\r\n if (gr.voice !== voice) {\r\n beamGroups.push(gr);\r\n }\r\n });\r\n measure.beamGroups = beamGroups;\r\n }\r\n\r\n _completeGroup(voice: number) {\r\n const nrCount: SmoNote[] = this.currentGroup.filter((nn: SmoNote) =>\r\n nn.isRest() === false\r\n );\r\n // don't beam groups of 1\r\n if (nrCount.length > 1) {\r\n this.measure.beamGroups.push(new SmoBeamGroup({\r\n notes: this.currentGroup,\r\n voice\r\n }));\r\n }\r\n }\r\n\r\n _advanceGroup() {\r\n this.currentGroup = [];\r\n this.duration = 0;\r\n }\r\n\r\n // ### _isRemainingTicksBeamable\r\n // look ahead, and see if we need to beam the tuplet now or if we\r\n // can combine current beam with future notes.\r\n _isRemainingTicksBeamable(tickmap: TickMap, index: number) {\r\n let acc = 0;\r\n let i = 0;\r\n if (this.duration >= this.beamBeats) {\r\n return false;\r\n }\r\n acc = this.duration;\r\n for (i = index + 1; i < tickmap.deltaMap.length; ++i) {\r\n acc += tickmap.deltaMap[i];\r\n if (acc === this.beamBeats) {\r\n return true;\r\n }\r\n if (acc > this.beamBeats) {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n beamNote(tickmap: TickMap, index: number, note: SmoNote) {\r\n this.beamBeats = note.beamBeats;\r\n this.duration += tickmap.deltaMap[index];\r\n if (note.noteType === '/') {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // beam tuplets\r\n if (note.isTuplet) {\r\n const tuplet = this.measure.getTupletForNote(note);\r\n // The underlying notes must have been deleted.\r\n if (!tuplet) {\r\n return;\r\n }\r\n const ult = tuplet.notes[tuplet.notes.length - 1];\r\n const first = tuplet.notes[0];\r\n\r\n if (first.endBeam) {\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // is this beamable length-wise\r\n const stemTicks = SmoMusic.closestDurationTickLtEq(note.tickCount);\r\n if (note.noteType === 'n' && stemTicks < 4096) {\r\n this.currentGroup.push(note);\r\n }\r\n // Ultimate note in tuplet\r\n if (ult.attrs.id === note.attrs.id && !this._isRemainingTicksBeamable(tickmap, index)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n return;\r\n }\r\n\r\n // don't beam > 1/4 note in 4/4 time. Don't beam rests.\r\n if (tickmap.deltaMap[index] >= 4096 || (note.isRest() && this.currentGroup.length === 0)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n this.currentGroup.push(note);\r\n if (note.endBeam) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n\r\n if (this.duration === this.beamBeats) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // If this does not align on a beat, don't beam it\r\n if (this.duration > this.beamBeats) {\r\n this._advanceGroup();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from './selections';\r\nimport { SmoNote, TupletInfo } from '../data/note';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { TickMap } from './tickMap';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { getId } from '../data/common';\r\n\r\ninterface PasteNote {\r\n note: SmoNote,\r\n selector: SmoSelector,\r\n originalKey: string\r\n}\r\ninterface ModifierPlacement {\r\n modifier: StaffModifierBase,\r\n ticksToStart: number\r\n}\r\n/**\r\n * PasteBuffer holds copied music, and handles the action of pasting the music to\r\n * a different point in the score. It does this by serializing the measure(s) from the source\r\n * and then creating handling the overlap with existing music when deserializaing it.\r\n * @category SmoTransform\r\n */\r\nexport class PasteBuffer {\r\n notes: PasteNote[];\r\n noteIndex: number;\r\n measures: SmoMeasure[];\r\n measureIndex: number;\r\n remainder: number;\r\n replacementMeasures: SmoSelection[];\r\n score: SmoScore | null = null;\r\n tupletNoteMap: Record = { };\r\n modifiers: StaffModifierBase[] = [];\r\n modifiersToPlace: ModifierPlacement[] = [];\r\n destination: SmoSelector = SmoSelector.default;\r\n staffSelectors: SmoSelector[] = [];\r\n constructor() {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.measures = [];\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n this.replacementMeasures = [];\r\n }\r\n\r\n setScore(score: SmoScore) {\r\n this.score = score;\r\n }\r\n setSelections(score: SmoScore, selections: SmoSelection[]) {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.score = score;\r\n if (selections.length < 1) {\r\n return;\r\n }\r\n this.tupletNoteMap = {};\r\n const first = selections[0];\r\n const last = selections[selections.length - 1];\r\n if (!first.note || !last.note) {\r\n return;\r\n }\r\n\r\n const startTuplet: SmoTuplet | null = first.measure.getTupletForNote(first.note);\r\n if (startTuplet) {\r\n if (startTuplet.getIndexOfNote(first.note) !== 0) {\r\n return; // can't paste from the middle of a tuplet\r\n }\r\n }\r\n const endTuplet: SmoTuplet | null = last.measure.getTupletForNote(last.note);\r\n if (endTuplet) {\r\n if (endTuplet.getIndexOfNote(last.note) !== endTuplet.notes.length - 1) {\r\n return; // can't paste part of a tuplet.\r\n }\r\n }\r\n this._populateSelectArray(selections);\r\n }\r\n // ### _populateSelectArray\r\n // copy the selected notes into the paste buffer with their original locations.\r\n _populateSelectArray(selections: SmoSelection[]) {\r\n let selector: SmoSelector = SmoSelector.default;\r\n this.modifiers = [];\r\n selections.forEach((selection) => {\r\n selector = JSON.parse(JSON.stringify(selection.selector));\r\n const mod: StaffModifierBase[] = selection.staff.getModifiersAt(selector);\r\n if (mod.length) {\r\n mod.forEach((modifier: StaffModifierBase) => {\r\n const cp: StaffModifierBase = StaffModifierBase.deserialize(modifier.serialize());\r\n cp.attrs.id = getId().toString();\r\n this.modifiers.push(cp);\r\n });\r\n }\r\n const isTuplet: boolean = selection?.note?.isTuplet ?? false;\r\n // We store copy in concert pitch. The originalKey is the original key of the copy.\r\n // the destKey is the originalKey in concert pitch.\r\n const originalKey = selection.measure.keySignature;\r\n const keyOffset = -1 * selection.measure.transposeIndex;\r\n const destKey = SmoMusic.vexKeySignatureTranspose(originalKey, keyOffset).toLocaleLowerCase();\r\n if (isTuplet) {\r\n const tuplet = (selection.measure.getTupletForNote(selection.note) as SmoTuplet);\r\n const index = tuplet.getIndexOfNote(selection.note);\r\n if (index === 0) {\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet);\r\n this.tupletNoteMap[ntuplet.attrs.id] = ntuplet;\r\n ntuplet.notes.forEach((nnote) => {\r\n const xposeNote = SmoNote.transpose(SmoNote.clone(nnote),\r\n [], -1 * selection.measure.transposeIndex, selection.measure.keySignature, destKey) as SmoNote;\r\n this.notes.push({ selector, note: xposeNote, originalKey: destKey });\r\n selector = JSON.parse(JSON.stringify(selector));\r\n selector.tick += 1;\r\n });\r\n }\r\n } else if (selection.note) {\r\n const note = SmoNote.transpose(SmoNote.clone(selection.note),\r\n [], keyOffset, selection.measure.keySignature, destKey) as SmoNote;\r\n this.notes.push({ selector, note, originalKey: destKey });\r\n }\r\n });\r\n this.notes.sort((a, b) =>\r\n SmoSelector.gt(a.selector, b.selector) ? 1 : -1\r\n );\r\n }\r\n\r\n clearSelections() {\r\n this.notes = [];\r\n }\r\n\r\n _findModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.startSelector));\r\n return (rv && rv.length) ? rv[0] : null;\r\n }\r\n _findPlacedModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.endSelector));\r\n return (typeof(rv) !== 'undefined' && rv.length) ? rv[0] : null;\r\n }\r\n\r\n // ### _populateMeasureArray\r\n // Before pasting, populate an array of existing measures from the paste destination\r\n // so we know how to place the notes.\r\n _populateMeasureArray() {\r\n if (!this.score || !this.destination) {\r\n return;\r\n }\r\n let measureSelection = SmoSelection.measureSelection(this.score, this.destination.staff, this.destination.measure);\r\n if (!measureSelection) {\r\n return;\r\n }\r\n const measure = measureSelection.measure;\r\n while (measure.voices.length <= this.destination.voice) {\r\n measure.populateVoice(measure.voices.length);\r\n }\r\n const tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let currentDuration = tickmap.durationMap[this.destination.tick];\r\n this.measures = [];\r\n this.staffSelectors = [];\r\n this.measures.push(measure);\r\n this.notes.forEach((selection: PasteNote) => {\r\n if (currentDuration + selection.note.tickCount > tickmap.totalDuration && measureSelection !== null) {\r\n // If this note will overlap the measure boundary, the note will be split in 2 with the\r\n // remainder going to the next measure. If they line up exactly, the remainder is 0.\r\n const remainder = (currentDuration + selection.note.tickCount) - tickmap.totalDuration;\r\n currentDuration = remainder;\r\n\r\n measureSelection = SmoSelection.measureSelection(this.score as SmoScore,\r\n measureSelection.selector.staff,\r\n measureSelection.selector.measure + 1);\r\n\r\n // If the paste buffer overlaps the end of the score, we can't paste (TODO: add a measure in this case)\r\n if (measureSelection != null) {\r\n this.measures.push(measureSelection.measure);\r\n }\r\n } else if (measureSelection != null) {\r\n currentDuration += selection.note.tickCount;\r\n }\r\n });\r\n }\r\n\r\n // ### _populatePre\r\n // When we paste, we replace entire measures. Populate the first measure up until the start of pasting.\r\n _populatePre(voiceIndex: number, measure: SmoMeasure, startTick: number, tickmap: TickMap) {\r\n const voice: SmoVoice = {\r\n notes: []\r\n };\r\n let i = 0;\r\n let j = 0;\r\n let ticksToFill = tickmap.durationMap[startTick];\r\n // TODO: bug here, need to handle tuplets in pre-part, create new tuplet\r\n for (i = 0; i < measure.voices[voiceIndex].notes.length; ++i) {\r\n const note = measure.voices[voiceIndex].notes[i];\r\n // If this is a tuplet, clone all the notes at once.\r\n if (note.isTuplet && ticksToFill >= note.tickCount) {\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n continue; // we remove the tuplet after first iteration\r\n }\r\n const ntuplet: SmoTuplet = SmoTuplet.cloneTuplet(tuplet);\r\n voice.notes = voice.notes.concat(ntuplet.notes as SmoNote[]);\r\n measure.removeTupletForNote(note);\r\n measure.tuplets.push(ntuplet);\r\n ticksToFill -= tuplet.tickCount;\r\n } else if (ticksToFill >= note.tickCount) {\r\n ticksToFill -= note.tickCount;\r\n voice.notes.push(SmoNote.clone(note));\r\n } else {\r\n const duration = note.tickCount - ticksToFill;\r\n const durMap = SmoMusic.gcdMap(duration);\r\n for (j = 0; j < durMap.length; ++j) {\r\n const dd = durMap[j];\r\n SmoNote.cloneWithDuration(note, {\r\n numerator: dd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n }\r\n ticksToFill = 0;\r\n }\r\n if (ticksToFill < 1) {\r\n break;\r\n }\r\n }\r\n return voice;\r\n }\r\n\r\n // ### _populateVoice\r\n // ### Description:\r\n // Create a new voice for a new measure in the paste destination\r\n _populateVoice(voiceIndex: number): SmoVoice[] {\r\n this._populateMeasureArray();\r\n const measures = this.measures;\r\n let measure = measures[0];\r\n let tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let voice = this._populatePre(voiceIndex, measure, this.destination.tick, tickmap);\r\n let startSelector = JSON.parse(JSON.stringify(this.destination));\r\n this.measureIndex = 0;\r\n const measureVoices = [];\r\n measureVoices.push(voice);\r\n while (this.measureIndex < measures.length) {\r\n measure = measures[this.measureIndex];\r\n while (measure.voices.length <= this.destination.voice) {\r\n const nvoice = { notes : SmoMeasure.getDefaultNotes(measure) };\r\n measure.voices.push(nvoice);\r\n }\r\n tickmap = measure.tickmapForVoice(this.destination.voice);\r\n this._populateNew(voice, measure, tickmap, startSelector);\r\n if (this.noteIndex < this.notes.length && this.measureIndex < measures.length) {\r\n voice = {\r\n notes: []\r\n };\r\n measureVoices.push(voice);\r\n startSelector = {\r\n staff: startSelector.staff,\r\n measure: startSelector.measure,\r\n voice: voiceIndex,\r\n tick: 0\r\n };\r\n this.measureIndex += 1;\r\n startSelector.measure += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n this._populatePost(voice, voiceIndex, measure, tickmap);\r\n return measureVoices;\r\n }\r\n\r\n static _countTicks(voice: SmoVoice): number {\r\n let voiceTicks = 0;\r\n voice.notes.forEach((note) => {\r\n voiceTicks += note.tickCount;\r\n });\r\n return voiceTicks;\r\n }\r\n\r\n /**\r\n * If the source contains a staff modifier that ends on the source selection, copy the modifier\r\n * @param srcSelector \r\n * @param destSelector \r\n * @param staff \r\n * @returns \r\n */\r\n _populateModifier(srcSelector: SmoSelector, destSelector: SmoSelector, staff: SmoSystemStaff) {\r\n const mod = this._findPlacedModifier(srcSelector);\r\n if (mod && this.score) {\r\n // Don't copy modifiers that cross staff boundaries outside the source staff b/c it's not clear what\r\n // the dest staff should be\r\n if (mod.startSelector.staff !== mod.endSelector.staff && srcSelector.staff !== destSelector.staff) {\r\n return;\r\n }\r\n const repl = StaffModifierBase.deserialize(mod.serialize());\r\n repl.endSelector = JSON.parse(JSON.stringify(destSelector));\r\n const tickOffset = SmoSelection.countTicks(this.score, mod.startSelector, mod.endSelector);\r\n this.modifiersToPlace.push({\r\n modifier: repl,\r\n ticksToStart: tickOffset\r\n });\r\n }\r\n }\r\n /**\r\n * Figure out if the tuplet overlaps an existing tuplet in the target measure\r\n * @param t1 \r\n * @param measure \r\n * @returns \r\n */\r\n static tupletOverlapIndex(t1: SmoTuplet, measure: SmoMeasure) {\r\n for (var i = 0; i < measure.tuplets.length; ++i) {\r\n const tt = measure.tuplets[i];\r\n // TODO: what about other kinds of overlap?\r\n if (tt.startIndex === t1.startIndex) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n /**\r\n * Start copying the paste buffer into the destination by copying the notes and working out\r\n * the measure overlap\r\n * \r\n * @param voice \r\n * @param measure \r\n * @param tickmap \r\n * @param startSelector \r\n * @returns \r\n */\r\n _populateNew(voice: SmoVoice, measure: SmoMeasure, tickmap: TickMap, startSelector: SmoSelector) {\r\n let currentDuration = tickmap.durationMap[startSelector.tick];\r\n let i = 0;\r\n let j = 0;\r\n let tupletsPushed = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (currentDuration < totalDuration && this.noteIndex < this.notes.length) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const selection = this.notes[this.noteIndex];\r\n const note = selection.note;\r\n if (note.noteType === 'n') {\r\n const pitchAr: number[] = [];\r\n note.pitches.forEach((pitch, ix) => {\r\n pitchAr.push(ix);\r\n });\r\n SmoNote.transpose(note, pitchAr, measure.transposeIndex, selection.originalKey, measure.keySignature);\r\n }\r\n this._populateModifier(selection.selector, startSelector, this.score.staves[selection.selector.staff]);\r\n if (note.isTuplet) {\r\n const tuplet = this.tupletNoteMap[(note.tuplet as TupletInfo).id];\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet);\r\n ntuplet.startIndex = voice.notes.length;\r\n this.noteIndex += ntuplet.notes.length;\r\n startSelector.tick += ntuplet.notes.length;\r\n currentDuration += tuplet.tickCount;\r\n for (i = 0; i < ntuplet.notes.length; ++i) {\r\n const tn = ntuplet.notes[i];\r\n tn.clef = measure.clef;\r\n voice.notes.push(tn);\r\n }\r\n const tix = PasteBuffer.tupletOverlapIndex(ntuplet, measure);\r\n // If this is overlapping an existing tuplet in the target measure, replace it\r\n if (tix >= 0) {\r\n measure.tuplets[tix] = ntuplet;\r\n } else {\r\n measure.tuplets.push(ntuplet);\r\n }\r\n } else if (currentDuration + note.tickCount <= totalDuration && this.remainder === 0) {\r\n // The whole note fits in the measure, paste it.\r\n const nnote = SmoNote.clone(note);\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += note.tickCount;\r\n this.noteIndex += 1;\r\n startSelector.tick += 1;\r\n } else if (this.remainder > 0) {\r\n // This is a note that spilled over the last measure\r\n const nnote = SmoNote.cloneWithDuration(note, {\r\n numerator: this.remainder,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += this.remainder;\r\n this.remainder = 0;\r\n } else {\r\n // The note won't fit, so we split it in 2 and paste the remainder in the next measure.\r\n // TODO: tie the last note to this one.\r\n const partial = totalDuration - currentDuration;\r\n const dar = SmoMusic.gcdMap(partial);\r\n for (j = 0; j < dar.length; ++j) {\r\n const ddd = dar[j];\r\n const vnote = SmoNote.cloneWithDuration(note, {\r\n numerator: ddd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n voice.notes.push(vnote);\r\n }\r\n currentDuration += partial;\r\n\r\n // Set the remaining length of the current note, this will be added to the\r\n // next measure with the previous note's pitches\r\n this.remainder = note.tickCount - partial;\r\n }\r\n }\r\n }\r\n\r\n // ### _populatePost\r\n // When we paste, we replace entire measures. Populate the last measure from the end of paste to the\r\n // end of the measure with notes in the existing measure.\r\n _populatePost(voice: SmoVoice, voiceIndex: number, measure: SmoMeasure, tickmap: TickMap) {\r\n let startTicks = PasteBuffer._countTicks(voice);\r\n let existingIndex = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (startTicks < totalDuration) {\r\n // Find the point in the music where the paste area runs out, or as close as we can get.\r\n existingIndex = tickmap.durationMap.indexOf(startTicks);\r\n existingIndex = (existingIndex < 0) ? measure.voices[voiceIndex].notes.length - 1 : existingIndex;\r\n const note = measure.voices[voiceIndex].notes[existingIndex];\r\n if (note.isTuplet) {\r\n const tuplet = measure.getTupletForNote(note) as SmoTuplet;\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet);\r\n startTicks += tuplet.tickCount;\r\n voice.notes = voice.notes.concat(ntuplet.notes);\r\n measure.tuplets.push(ntuplet);\r\n measure.removeTupletForNote(note);\r\n } else {\r\n const ticksLeft = totalDuration - startTicks;\r\n if (ticksLeft >= note.tickCount) {\r\n startTicks += note.tickCount;\r\n voice.notes.push(SmoNote.clone(note));\r\n } else {\r\n const remainder = totalDuration - startTicks;\r\n voice.notes.push(SmoNote.cloneWithDuration(note, {\r\n numerator: remainder,\r\n denominator: 1,\r\n remainder: 0\r\n }));\r\n startTicks = totalDuration;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _pasteVoiceSer(ser: any, vobj: any, voiceIx: number) {\r\n const voices: any[] = [];\r\n let ix = 0; \r\n ser.voices.forEach((vc: any) => {\r\n if (ix !== voiceIx) {\r\n voices.push(vc);\r\n } else {\r\n voices.push(vobj);\r\n }\r\n ix += 1;\r\n });\r\n // If we are pasting into a measure that doesn't contain this voice, add the voice\r\n if (ser.voices.length <= voiceIx) {\r\n voices.push(vobj);\r\n }\r\n ser.voices = voices;\r\n }\r\n\r\n pasteSelections(selector: SmoSelector) {\r\n let i = 0;\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n const maxCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const minCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const backupNotes: PasteNote[] = [];\r\n this.notes.forEach((bb) => {\r\n const note = (SmoNote.deserialize(bb.note.serialize()));\r\n const selector = JSON.parse(JSON.stringify(bb.selector));\r\n backupNotes.push({ note, selector, originalKey: bb.originalKey });\r\n });\r\n this.destination = selector;\r\n if (minCutVoice === maxCutVoice && minCutVoice > this.destination.voice) {\r\n this.destination.voice = minCutVoice;\r\n \r\n }\r\n this.modifiersToPlace = [];\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n if (!this.score) {\r\n return;\r\n }\r\n this.noteIndex = 0;\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n const voices = this._populateVoice(this.destination.voice);\r\n const measureSel = JSON.parse(JSON.stringify(this.destination));\r\n const selectors: SmoSelector[] = [];\r\n for (i = 0; i < this.measures.length && i < voices.length; ++i) {\r\n const measure: SmoMeasure = this.measures[i];\r\n const nvoice: SmoVoice = voices[i];\r\n const ser: any = measure.serialize();\r\n // Make sure the key is concert pitch, it is what measure constructor expects\r\n ser.transposeIndex = measure.transposeIndex; // default values are undefined, make sure the transpose is valid\r\n ser.keySignature = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n ser.timeSignature = measure.timeSignature.serialize();\r\n ser.tempo = measure.tempo.serialize();\r\n const vobj: any = {\r\n notes: []\r\n };\r\n nvoice.notes.forEach((note: SmoNote) => {\r\n vobj.notes.push(note.serialize());\r\n });\r\n\r\n // TODO: figure out how to do this with multiple voices\r\n this._pasteVoiceSer(ser, vobj, this.destination.voice);\r\n const nmeasure = SmoMeasure.deserialize(ser);\r\n // If this is the non-display buffer, don't try to reset the display rectangles.\r\n // Q: Is this even required since we are going to re-render?\r\n // A: yes, because until we do, the replaced measure needs the formatting info\r\n if (measure.svg.logicalBox && measure.svg.logicalBox.width > 0) {\r\n nmeasure.setBox(SvgHelpers.smoBox(measure.svg.logicalBox), 'copypaste');\r\n nmeasure.setX(measure.svg.logicalBox.x, 'copyPaste');\r\n nmeasure.setWidth(measure.svg.logicalBox.width, 'copypaste');\r\n nmeasure.setY(measure.svg.logicalBox.y, 'copypaste');\r\n nmeasure.svg.element = measure.svg.element;\r\n }\r\n ['forceClef', 'forceKeySignature', 'forceTimeSignature', 'forceTempo'].forEach((flag) => {\r\n (nmeasure as any)[flag] = (measure.svg as any)[flag];\r\n });\r\n this.score.replaceMeasure(measureSel, nmeasure);\r\n measureSel.measure += 1;\r\n selectors.push(\r\n { staff: selector.staff, measure: nmeasure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] }\r\n );\r\n }\r\n this.replacementMeasures = [];\r\n selectors.forEach((selector: SmoSelector) => {\r\n const nsel: SmoSelection | null = SmoSelection.measureSelection(this.score as SmoScore, selector.staff, selector.measure);\r\n if (nsel) {\r\n this.replacementMeasures.push(nsel);\r\n }\r\n });\r\n this.modifiersToPlace.forEach((mod) => {\r\n let selection = SmoSelection.selectionFromSelector(this.score!, mod.modifier.endSelector);\r\n while (selection && mod.ticksToStart !== 0) {\r\n if (mod.ticksToStart < 0) {\r\n selection = SmoSelection.nextNoteSelectionFromSelector(this.score!, selection.selector);\r\n } else {\r\n selection = SmoSelection.lastNoteSelectionFromSelector(this.score!, selection.selector);\r\n }\r\n mod.ticksToStart -= 1 * Math.sign(mod.ticksToStart);\r\n }\r\n if (selection) {\r\n mod.modifier.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n selection.staff.addStaffModifier(mod.modifier);\r\n }\r\n });\r\n this.notes = backupNotes;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Pitch, PitchLetter, Clef, getId } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasureParams, SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff, SmoSystemStaffParams } from '../data/systemStaff';\r\nimport { SmoArticulation, SmoGraceNote, SmoLyric, SmoMicrotone, SmoOrnament,\r\n SmoDynamicText } from '../data/noteModifiers';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureText, SmoVolta, SmoMeasureFormat, SmoTempoText, SmoBarline,\r\n TimeSignature, SmoRepeatSymbol\r\n} from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie, StaffModifierBase, SmoTieParams, SmoInstrument, SmoStaffHairpinParams,\r\n SmoSlurParams, SmoInstrumentMeasure, SmoStaffTextBracket, SmoStaffTextBracketParams } from '../data/staffModifiers';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from './selections';\r\nimport {\r\n SmoDuration, SmoContractNoteActor, SmoStretchNoteActor, SmoMakeTupletActor,\r\n SmoUnmakeTupletActor, SmoContractTupletActor\r\n} from './tickDuration';\r\nimport { SmoBeamer } from './beamers';\r\n/**\r\n * supported operations for {@link SmoOperation.batchSelectionOperation} to change a note's duration\r\n */\r\nexport type BatchSelectionOperation = 'dotDuration' | 'undotDuration' | 'doubleDuration' | 'halveDuration' |\r\n 'doubleGraceNoteDuration' | 'halveGraceNoteDuration';\r\n\r\n/**\r\n * SmoOperation is a collection of static methods that operate on/change/transform the music. Most methods\r\n * take the score, a selection or selection array, and the parameters of the operation.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoOperation {\r\n static setMeasureFormat(score: SmoScore, selection: SmoSelection, value: SmoMeasureFormat) {\r\n if (!score.formattingManager) {\r\n return;\r\n }\r\n score.staves.forEach((staff: SmoSystemStaff) => {\r\n value.formatMeasure(staff.measures[selection.selector.measure]);\r\n });\r\n score.formattingManager.updateMeasureFormat(value);\r\n }\r\n\r\n static addKeySignature(score: SmoScore, selection: SmoSelection, keySignature: string) {\r\n score.addKeySignature(selection.selector.measure, keySignature);\r\n }\r\n static addConnectorDown(score: SmoScore, selections: SmoSelection[], parameters: SmoSystemGroup) {\r\n const msel = SmoSelection.getMeasureList(selections);\r\n const len = msel.length - 1;\r\n if (score.staves.length <= msel[len].selector.staff) {\r\n return;\r\n }\r\n const existing = score.getSystemGroupForStaff(msel[0]);\r\n if (existing && existing.endSelector.staff < selections[len].selector.staff) {\r\n existing.endSelector.staff = msel[len].selector.staff + 1;\r\n } else {\r\n parameters.startSelector = SmoSelector.default;\r\n parameters.startSelector.staff = msel[0].selector.staff;\r\n parameters.startSelector.measure = msel[0].selector.measure;\r\n parameters.endSelector = SmoSelector.default;\r\n parameters.endSelector.staff = msel[len].selector.staff + 1;\r\n parameters.endSelector.measure = msel[len].selector.measure;\r\n score.addOrReplaceSystemGroup(new SmoSystemGroup(parameters));\r\n }\r\n }\r\n static toggleBeamGroup(noteSelection: SmoSelection) {\r\n if (!noteSelection.note) {\r\n return;\r\n }\r\n noteSelection.note.endBeam = !(noteSelection.note.endBeam);\r\n }\r\n static setActiveVoice(score: SmoScore, voiceIx: number) {\r\n score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n measure.setActiveVoice(voiceIx);\r\n });\r\n });\r\n }\r\n\r\n static addRemoveMicrotone(ignore: any, selections: SmoSelection[], tone: SmoMicrotone) {\r\n selections.forEach((sel) => {\r\n const note = sel.note;\r\n if (note) {\r\n const oldTone = note.getMicrotone(tone.pitchIndex);\r\n if (oldTone) {\r\n note.removeMicrotone(oldTone);\r\n } else {\r\n note.addMicrotone(tone);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static moveStaffUpDown(score: SmoScore, selection: SmoSelection, index: number) {\r\n const index1 = selection.selector.staff;\r\n const index2 = selection.selector.staff + index;\r\n if (index2 < score.staves.length && index2 >= 0) {\r\n score.swapStaves(index1, index2);\r\n }\r\n }\r\n\r\n static depopulateVoice(selection: SmoSelection, voiceIx: number) {\r\n let ix = 0;\r\n const voices: SmoVoice[] = [];\r\n const measure = selection.measure;\r\n measure.voices.forEach((voice) => {\r\n if (measure.voices.length < 2 || ix !== voiceIx) {\r\n voices.push(voice);\r\n }\r\n ix += 1;\r\n });\r\n measure.voices = voices;\r\n\r\n if (measure.getActiveVoice() >= measure.voices.length) {\r\n measure.setActiveVoice(0);\r\n }\r\n }\r\n\r\n static populateVoice(selection: SmoSelection, voiceIx: number) {\r\n selection.measure.populateVoice(voiceIx);\r\n }\r\n\r\n static setTimeSignature(score: SmoScore, selections: SmoSelection[], timeSignature: TimeSignature) {\r\n const selectors: SmoSelector[] = [];\r\n let i = 0;\r\n // change the time signature for each stave in the score\r\n selections.forEach((selection) => {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measureSel: SmoSelector = SmoSelector.measureSelector(i, selection.selector.measure);\r\n selectors.push(measureSel);\r\n }\r\n });\r\n selectors.forEach((selector: SmoSelector) => {\r\n const rowSelection: SmoSelection = (SmoSelection.measureSelection(score, selector.staff, selector.measure) as SmoSelection);\r\n rowSelection.measure.timeSignature = new TimeSignature(timeSignature);\r\n rowSelection.measure.alignNotesWithTimeSignature();\r\n });\r\n }\r\n\r\n static batchSelectionOperation(score: SmoScore, selections: SmoSelection[], operation: BatchSelectionOperation) {\r\n var measureTicks: { selector: SmoSelector, tickOffset: number }[] = [];\r\n selections.forEach((selection) => {\r\n const tm = selection.measure.tickmapForVoice(selection.selector.voice);\r\n const tickOffset = tm.durationMap[selection.selector.tick];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n measureTicks.push({\r\n selector,\r\n tickOffset\r\n });\r\n });\r\n measureTicks.forEach((measureTick) => {\r\n const selection = SmoSelection.measureSelection(score, measureTick.selector.staff, measureTick.selector.measure) as SmoSelection;\r\n const tickmap = selection.measure.tickmapForVoice(measureTick.selector.voice);\r\n const ix = tickmap.durationMap.indexOf(measureTick.tickOffset);\r\n if (ix >= 0) {\r\n const nsel = SmoSelection.noteSelection(score, measureTick.selector.staff, measureTick.selector.measure,\r\n measureTick.selector.voice, ix);\r\n (SmoOperation as any)[operation](nsel);\r\n }\r\n });\r\n }\r\n // ## doubleDuration\r\n // ## Description\r\n // double the duration of a note in a measure, at the expense of the following\r\n // note, if possible. Works on tuplets also.\r\n static doubleDuration(selection: SmoSelection) {\r\n const note = selection.note;\r\n const measure = selection.measure;\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n SmoDuration.doubleDurationNonTuplet(selection);\r\n } else {\r\n SmoDuration.doubleDurationTuplet(selection);\r\n }\r\n return true;\r\n }\r\n\r\n // ## halveDuration\r\n // ## Description\r\n // Replace the note with 2 notes of 1/2 duration, if possible\r\n // Works on tuplets also.\r\n static halveDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n let divisor = 2;\r\n const measure = selection.measure;\r\n const tuplet = measure.getTupletForNote(note);\r\n if (measure.timeSignature.actualBeats % 3 === 0 && note.tickCount === 6144) {\r\n // special behavior, if this is dotted 1/4 in 6/8, split to 3\r\n divisor = 3;\r\n }\r\n if (!tuplet) {\r\n const nticks = note.tickCount / divisor;\r\n if (!SmoMusic.validDurations[nticks]) {\r\n return;\r\n }\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: selection.measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n SmoBeamer.applyBeams(measure);\r\n } else {\r\n const startIndex = measure.tupletIndex(tuplet) + tuplet.getIndexOfNote(note);\r\n SmoContractTupletActor.apply({\r\n changeIndex: startIndex,\r\n measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n }\r\n\r\n // ## makeTuplet\r\n // ## Description\r\n // Makes a non-tuplet into a tuplet of equal value.\r\n static makeTuplet(selection: SmoSelection, numNotes: number) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n if (measure.getTupletForNote(note)) {\r\n return;\r\n }\r\n const nticks = note.tickCount;\r\n SmoMakeTupletActor.apply({\r\n index: selection.selector.tick,\r\n totalTicks: nticks,\r\n numNotes,\r\n measure: selection.measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n static addStaffModifier(selection: SmoSelection, modifier: StaffModifierBase) {\r\n selection.staff.addStaffModifier(modifier);\r\n }\r\n static toggleRest(selection: SmoSelection) {\r\n selection.note?.toggleRest();\r\n }\r\n static toggleSlash(selection: SmoSelection) {\r\n selection.note?.toggleSlash();\r\n }\r\n\r\n static makeRest(selection: SmoSelection) {\r\n selection.note?.makeRest();\r\n }\r\n static makeNote(selection: SmoSelection) {\r\n selection.note?.makeNote();\r\n }\r\n static setNoteHead(selections: SmoSelection[], noteHead: string) {\r\n selections.forEach((selection: SmoSelection) => {\r\n selection.note?.setNoteHead(noteHead);\r\n });\r\n }\r\n\r\n static addGraceNote(selection: SmoSelection, g: SmoGraceNote, offset: number) {\r\n selection.note?.addGraceNote(g, offset);\r\n }\r\n\r\n static removeGraceNote(selection: SmoSelection, offset: number) {\r\n selection.note?.removeGraceNote(offset);\r\n }\r\n\r\n static doubleGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator * 2;\r\n });\r\n }\r\n static halveGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator / 2;\r\n });\r\n }\r\n\r\n static toggleGraceNoteCourtesy(selection: any, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n mm.pitches.forEach((pitch: Pitch) => {\r\n // eslint-disable-next-line\r\n pitch.cautionary = pitch.cautionary ? false : true;\r\n });\r\n });\r\n }\r\n static toggleGraceNoteEnharmonic(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.pitches.forEach((pitch) => {\r\n SmoNote.toggleEnharmonic(pitch);\r\n });\r\n });\r\n }\r\n\r\n static transposeGraceNotes(selection: SmoSelection, modifiers: SmoGraceNote[], offset: number) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n const par: Pitch[] = [];\r\n if (!mm) {\r\n console.warn('bad modifier grace note');\r\n return;\r\n }\r\n mm.pitches.forEach((pitch) => {\r\n par.push(SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset));\r\n });\r\n mm.pitches = par;\r\n });\r\n }\r\n\r\n static slashGraceNotes(selections: ModifierTab[] | ModifierTab) {\r\n if (!Array.isArray(selections)) {\r\n selections = [selections];\r\n }\r\n // TODO: modifiers on artifacts should be typed\r\n selections.forEach((mm: any) => {\r\n if (mm.modifier && mm.modifier.ctor === 'SmoGraceNote') {\r\n mm.modifier.slash = !mm.modifier.slash;\r\n }\r\n });\r\n }\r\n\r\n // ## unmakeTuplet\r\n // ## Description\r\n // Makes a tuplet into a single with the duration of the whole tuplet\r\n static unmakeTuplet(selection: SmoSelection) {\r\n const note = selection.note;\r\n const measure = selection.measure;\r\n if (!measure.getTupletForNote(note)) {\r\n return;\r\n }\r\n const tuplet = measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return;\r\n }\r\n const startIndex = measure.tupletIndex(tuplet);\r\n const endIndex = tuplet.notes.length + startIndex - 1;\r\n\r\n SmoUnmakeTupletActor.apply({\r\n startIndex,\r\n endIndex,\r\n measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n\r\n // ## dotDuration\r\n // ## Description\r\n // Add a dot to a note, if possible, and make the note ahead of it shorter\r\n // to compensate.\r\n static dotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const nticks = SmoMusic.getNextDottedLevel(note.tickCount);\r\n if (nticks === note.tickCount) {\r\n return;\r\n }\r\n // Don't dot if the thing on the right of the . is too small\r\n const dotCount = SmoMusic.smoTicksToVexDots(nticks);\r\n const multiplier = Math.pow(2, dotCount);\r\n const baseDot = SmoMusic.closestDurationTickLtEq(nticks) / (multiplier * 2);\r\n if (baseDot <= 128) {\r\n return;\r\n }\r\n // If this is the ultimate note in the measure, we can't increase the length\r\n if (selection.selector.tick + 1 === selection.measure.voices[selection.selector.voice].notes.length) {\r\n return;\r\n }\r\n if (selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount > note.tickCount) {\r\n console.log('too long');\r\n return;\r\n }\r\n // is dot too short?\r\n if (!SmoMusic.validDurations[selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount / 2]) {\r\n return;\r\n }\r\n SmoStretchNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n }\r\n\r\n // ## undotDuration\r\n // ## Description\r\n // Add the value of the last dot to the note, increasing length and\r\n // reducing the number of dots.\r\n static undotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const nticks = SmoMusic.getPreviousDottedLevel(note.tickCount);\r\n if (nticks === note.tickCount) {\r\n return;\r\n }\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n }\r\n\r\n static transposeScore(score: SmoScore, offset: number) {\r\n score.staves.forEach((staff, staffIx) => {\r\n staff.measures.forEach((measure, measureIx) => {\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note, tickIx) => {\r\n const selection = SmoSelection.noteSelection(\r\n score,staffIx, measureIx, voiceIx, tickIx);\r\n if (selection) {\r\n this.transpose(selection, offset);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n // ## transpose\r\n // ## Description\r\n // Transpose the selected note, trying to find a key-signature friendly value\r\n static transpose(selection: SmoSelection, offset: number) {\r\n let trans: Pitch;\r\n let transInt: number = 0;\r\n let i: number = 0;\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n selection.selector.pitches = [];\r\n }\r\n const measure = selection.measure;\r\n const note = selection.note;\r\n if (measure && note) {\r\n const pitchar: Pitch[] = [];\r\n note.pitches.forEach((opitch, pitchIx) => {\r\n // Only translate selected pitches\r\n const shouldXpose = selection.selector.pitches.length === 0 ||\r\n selection.selector.pitches.indexOf(pitchIx) >= 0;\r\n\r\n // Translate the pitch, ignoring enharmonic\r\n trans = shouldXpose ? SmoMusic.getKeyOffset(opitch, offset)\r\n : JSON.parse(JSON.stringify(opitch));\r\n if (shouldXpose) {\r\n trans = SmoMusic.getEnharmonicInKey(trans, measure.keySignature);\r\n if (!trans.accidental) {\r\n trans.accidental = 'n';\r\n }\r\n transInt = SmoMusic.smoPitchToInt(trans);\r\n\r\n // Look through the earlier notes in the measure and try\r\n // to find an equivalent note, and convert it if it exists.\r\n measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n // eslint-disable-next-line\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n const prevInt = SmoMusic.smoPitchToInt(prevPitch);\r\n if (prevInt === transInt) {\r\n trans = JSON.parse(JSON.stringify(prevPitch));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n pitchar.push(trans as Pitch);\r\n });\r\n note.pitches = pitchar;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // ## setPitch\r\n // ## Description:\r\n // pitches can be either an array, a single pitch, or a letter. In the latter case,\r\n // the letter value appropriate for the key signature is used, e.g. c in A major becomes\r\n // c#\r\n static setPitch(selection: SmoSelection, pitches: Pitch[]) {\r\n let i = 0;\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n if (typeof (note) === 'undefined') {\r\n console.warn('set Pitch on invalid note');\r\n return;\r\n }\r\n note.makeNote();\r\n // TODO allow hint for octave\r\n const octave = note.pitches[0].octave;\r\n note.pitches = [];\r\n if (!Array.isArray(pitches)) {\r\n pitches = [pitches];\r\n }\r\n const earlierAccidental = (pitch: Pitch) => {\r\n selection.measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n if (prevNote === null || prevNote.pitches === null) {\r\n console.log('this will die null');\r\n }\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n if (prevNote.noteType === 'n' && prevPitch.letter === pitch.letter) {\r\n pitch.accidental = prevPitch.accidental;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n pitches.forEach((pitch) => {\r\n if (typeof (pitch) === 'string') {\r\n const letter = SmoMusic.getKeySignatureKey(pitch[0], measure.keySignature);\r\n pitch = {\r\n letter: letter[0] as PitchLetter,\r\n accidental: letter.length > 1 ? letter.substring(1) : '',\r\n octave\r\n };\r\n }\r\n earlierAccidental(pitch);\r\n note.pitches.push(pitch);\r\n });\r\n }\r\n\r\n static toggleCourtesyAccidental(selection: SmoSelection) {\r\n let toBe: boolean = false;\r\n const note = selection.note as SmoNote;\r\n if (!selection.selector.pitches || selection.selector.pitches.length === 0) {\r\n const ps: Pitch[] = [];\r\n note.pitches.forEach((pitch) => {\r\n const p = JSON.parse(JSON.stringify(pitch));\r\n ps.push(p);\r\n p.cautionary = !(pitch.cautionary);\r\n });\r\n note.pitches = ps;\r\n } else {\r\n toBe = !(note.pitches[selection.selector.pitches[0]].cautionary);\r\n }\r\n SmoOperation.courtesyAccidental(selection, toBe);\r\n }\r\n\r\n static courtesyAccidental(pitchSelection: SmoSelection, toBe: boolean) {\r\n pitchSelection.selector.pitches.forEach((pitchIx) => {\r\n (pitchSelection.note as SmoNote).pitches[pitchIx].cautionary = toBe;\r\n });\r\n }\r\n\r\n static toggleEnharmonic(pitchSelection: SmoSelection) {\r\n if (pitchSelection.selector.pitches.length === 0) {\r\n pitchSelection.selector.pitches.push(0);\r\n }\r\n const pitch = (pitchSelection.note as SmoNote).pitches[pitchSelection.selector.pitches[0]];\r\n SmoNote.toggleEnharmonic(pitch);\r\n }\r\n\r\n static addDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).addDynamic(dynamic);\r\n }\r\n\r\n static removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).removeDynamic(dynamic);\r\n }\r\n\r\n static beamSelections(score: SmoScore, selections: SmoSelection[]) {\r\n const start = selections[0].selector;\r\n let cur = selections[0].selector;\r\n const beamGroup: SmoNote[] = [];\r\n let ticks = 0;\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n if (SmoSelector.sameNote(start, selection.selector) ||\r\n (SmoSelector.sameMeasure(selection.selector, cur) &&\r\n cur.tick === selection.selector.tick - 1)) {\r\n ticks += note.tickCount;\r\n cur = selection.selector;\r\n beamGroup.push(note);\r\n }\r\n });\r\n if (beamGroup.length) {\r\n beamGroup.forEach((note) => {\r\n note.beamBeats = ticks;\r\n note.endBeam = false;\r\n });\r\n beamGroup[beamGroup.length - 1].endBeam = true;\r\n // Make sure the last note of the previous beam is the end of this beam group.\r\n if (selections[0].selector.tick > 0) {\r\n const ps = JSON.parse(JSON.stringify(selections[0].selector));\r\n ps.tick -= 1;\r\n const previous: SmoSelection | null = SmoSelection.noteFromSelector(score, ps);\r\n if (previous?.note && previous.note.tickCount < 4096) {\r\n previous.note.endBeam = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static toggleBeamDirection(selections: SmoSelection[]) {\r\n const note0 = selections[0].note as SmoNote;\r\n note0.toggleFlagState();\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n note.flagState = note0.flagState;\r\n });\r\n }\r\n\r\n static toggleOrnament(selection: SmoSelection, ornament: SmoOrnament) {\r\n (selection.note as SmoNote).toggleOrnament(ornament);\r\n }\r\n\r\n static toggleArticulation(selection: SmoSelection, articulation: SmoArticulation) {\r\n (selection.note as SmoNote).toggleArticulation(articulation);\r\n }\r\n\r\n static addEnding(score: SmoScore, parameters: SmoVolta) {\r\n let m = 0;\r\n let s = 0;\r\n const startMeasure = parameters.startBar;\r\n const endMeasure = parameters.endBar;\r\n\r\n // Ending ID ties all the instances of an ending across staves\r\n parameters.endingId = getId().toString();\r\n score.staves.forEach((staff) => {\r\n m = 0;\r\n staff.measures.forEach((measure) => {\r\n if (m === startMeasure) {\r\n const pp = JSON.parse(JSON.stringify(parameters));\r\n pp.startSelector = {\r\n staff: s,\r\n measure: startMeasure\r\n };\r\n pp.endSelector = {\r\n staff: s,\r\n measure: endMeasure\r\n };\r\n const ending = new SmoVolta(pp);\r\n measure.addNthEnding(ending);\r\n }\r\n m += 1;\r\n });\r\n s += 1;\r\n });\r\n }\r\n\r\n static removeEnding(score: SmoScore, ending: SmoVolta) {\r\n let i = 0;\r\n score.staves.forEach((staff) => {\r\n // bug\r\n // Due to deleted measures, volta might not match up so look through all measures.\r\n for (i = 0; i < staff.measures.length; ++i) {\r\n staff.measures[i].removeNthEnding(ending);\r\n }\r\n });\r\n }\r\n\r\n static addTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.addTextGroup(textGroup);\r\n }\r\n\r\n static removeTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.removeTextGroup(textGroup);\r\n }\r\n\r\n static addMeasureText(score: SmoScore, selection: SmoSelection, measureText: SmoMeasureText) {\r\n const current = selection.measure.getMeasureText();\r\n // TODO: should we allow multiples per position\r\n current.forEach((mod) => {\r\n selection.measure.removeMeasureText(mod.attrs.id);\r\n });\r\n selection.measure.addMeasureText(measureText);\r\n }\r\n\r\n static removeMeasureText(score: SmoScore, selection: SmoSelection, mt: SmoMeasureText) {\r\n selection.measure.removeMeasureText(mt.attrs.id);\r\n }\r\n\r\n static removeRehearsalMark(score: SmoScore, selection: SmoSelection) {\r\n score.staves.forEach((staff) => {\r\n staff.removeRehearsalMark(selection.selector.measure);\r\n });\r\n }\r\n\r\n static addRehearsalMark(score: SmoScore, selection: SmoSelection, rehearsalMark: SmoRehearsalMark) {\r\n score.staves.forEach((staff) => {\r\n const mt = new SmoRehearsalMark(rehearsalMark.serialize());\r\n staff.addRehearsalMark(selection.selector.measure, mt);\r\n });\r\n }\r\n\r\n static addTempo(score: SmoScore, selection: SmoSelection, tempo: SmoTempoText) {\r\n score.staves.forEach((staff) => {\r\n staff.addTempo(tempo, selection.selector.measure);\r\n });\r\n }\r\n\r\n static setMeasureBarline(score: SmoScore, selection: SmoSelection, barline: SmoBarline) {\r\n const mm = selection.selector.measure;\r\n let ix = 0;\r\n score.staves.forEach(() => {\r\n const s2: SmoSelection | null = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setBarline(barline);\r\n ix += 1;\r\n });\r\n }\r\n\r\n static setRepeatSymbol(score: SmoScore, selection: SmoSelection, sym: SmoRepeatSymbol) {\r\n let ix = 0;\r\n const mm = selection.selector.measure;\r\n score.staves.forEach(() => {\r\n const s2 = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setRepeatSymbol(sym);\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ## interval\r\n // Add a pitch at the specified interval to the chord in the selection.\r\n static interval(selection: SmoSelection, interval: number) {\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n let pitch: Pitch = {} as Pitch;\r\n\r\n // TODO: figure out which pitch is selected\r\n pitch = note.pitches[0];\r\n if (interval > 0) {\r\n pitch = note.pitches[note.pitches.length - 1];\r\n }\r\n pitch = SmoMusic.getIntervalInKey(pitch, measure.keySignature, interval);\r\n if (pitch) {\r\n note.pitches.push(pitch);\r\n note.pitches.sort((x, y) =>\r\n SmoMusic.smoPitchToInt(x) - SmoMusic.smoPitchToInt(y)\r\n );\r\n return true;\r\n }\r\n return false;\r\n }\r\n static addOrReplaceBracket(modifier: SmoStaffTextBracket, fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n fromSelection.staff.addTextBracket(modifier);\r\n }\r\n static ritard(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.RITARD;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static accelerando(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.ACCEL;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static crescendoBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static dimenuendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static crescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.CRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n\r\n static decrescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.DECRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n static tie(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n // By default, just tie all the pitches to all the other pitches in order\r\n const lines = SmoTie.createLines(fromSelection.note as SmoNote, toSelection.note as SmoNote);\r\n const params: SmoTieParams = SmoTie.defaults;\r\n params.startSelector = fromSelection.selector;\r\n params.endSelector = toSelection.selector;\r\n params.lines = lines;\r\n const modifier = new SmoTie(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n\r\n static getSlurDefaultParameters(selections: SmoSelection[]) {\r\n const lastIndex = selections.length - 1;\r\n const note1 = selections[0].note;\r\n const note2 = selections[lastIndex].note;\r\n const inners = [];\r\n let minLine = -1;\r\n let maxLine = 0;\r\n if (selections.length > 2) {\r\n for (var i = 1; i < selections.length - 1; ++i) {\r\n inners.push(selections[i]);\r\n }\r\n }\r\n if (note1 === null || note2 === null) {\r\n throw('no note in slur selections');\r\n } \r\n }\r\n /**\r\n * Heuristically determine how a slur should be formatted based on the notes. Determine control points,\r\n * offset, and alignment\r\n * \r\n * ## Note: Vexflow slurs consider `top` to mean the furthest point from the note head, which could be the top\r\n * or the bottom of the note. It also considers yoffset to be negative if inverted is set. Head means close to the\r\n * note head.\r\n * @param score \r\n * @param fromSelection \r\n * @param toSelection \r\n * @returns \r\n */\r\n static getDefaultSlurDirection(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector, \r\n forcePosition: number, forceOrientation: number):SmoSlurParams {\r\n const params: SmoSlurParams = SmoSlur.defaults;\r\n const sels = SmoSelector.order(fromSelector, toSelector);\r\n params.startSelector = JSON.parse(JSON.stringify(sels[0]));\r\n params.endSelector = JSON.parse(JSON.stringify(sels[1]));\r\n const fromSelection = SmoSelection.noteFromSelector(score, fromSelector);\r\n if (!fromSelection) {\r\n return params;\r\n }\r\n // Get all selections within the slur\r\n const selections = SmoSelection.innerSelections(score, sels[0], sels[1]).filter((ff) => ff.selector.voice === fromSelection.selector.voice);\r\n const dirs: Record = {};\r\n const beamGroups: Record = {};\r\n let startDir = SmoNote.flagStates.up;\r\n let mixed = false;\r\n let endDir = SmoNote.flagStates.up;\r\n let firstGap = 0;\r\n let lastGap = 0;\r\n if (selections.length < 1) {\r\n return new SmoSlur(params);\r\n }\r\n \r\n selections.forEach((selection, selectionIx) => {\r\n const note = selection.note!;\r\n if (note.beam_group) {\r\n beamGroups[note.beam_group.id] = true;\r\n } else {\r\n beamGroups[note.attrs.id] = true;\r\n }\r\n // Find the gap between the first and second note, and also between last 2. If they are far apart,\r\n // increase the control points so the slurs don't run into the notes\r\n if (selectionIx === 1) {\r\n const lastNote = selections[0].note!;\r\n firstGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(lastNote.clef as Clef, lastNote.pitches[0]));\r\n }\r\n if (selectionIx === selections.length - 2 && selections.length > 2) {\r\n const nextNote = selections[selectionIx + 1].note!;\r\n lastGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(nextNote.clef as Clef, nextNote.pitches[0]));\r\n }\r\n const fstate = SmoMusic.flagStateFromNote(note.clef as Clef, note);\r\n // Keep track of the number of stem directions, so we can determine if the flags are mixed direction\r\n // the rules are a little different for mixed - we always try to put the slur on (the real) top of the staff.\r\n dirs[fstate] = true;\r\n if (selectionIx === 0) {\r\n startDir = fstate;\r\n }\r\n if (selectionIx === selections.length - 1) {\r\n endDir = fstate;\r\n }\r\n });\r\n params.invert = false;\r\n mixed = Object.keys(dirs).length > 1;\r\n // If the notes are beamed together, we assume the beams point in the same direction\r\n if (Object.keys(beamGroups).length < 2) {\r\n mixed = false;\r\n }\r\n if (forcePosition === SmoSlur.positions.ABOVE) {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n if (startDir === SmoNote.flagStates.up && forceOrientation !== SmoSlur.orientations.DOWN) {\r\n params.invert = true;\r\n }\r\n } else if (forcePosition === SmoSlur.positions.BELOW) {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.HEAD : SmoSlur.positions.TOP;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.HEAD : SmoSlur.positions.TOP;\r\n if (startDir === SmoNote.flagStates.down && forceOrientation !== SmoSlur.orientations.UP) {\r\n params.invert = true;\r\n }\r\n } else {\r\n if (mixed) {\r\n // special case: slur 2 notes, note heads close, connect the note heads\r\n // to keep a flat arc\r\n if (selections.length === 2 && firstGap < 3) {\r\n params.position = SmoSlur.positions.HEAD;\r\n params.position_end = SmoSlur.positions.HEAD;\r\n params.xOffset = 5;\r\n } else {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n if (firstGap >= 3 || lastGap >= 3) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n }\r\n }\r\n params.invert = endDir === SmoNote.flagStates.up;\r\n } \r\n if (!mixed) {\r\n params.position = SmoSlur.positions.HEAD;\r\n params.position_end = SmoSlur.positions.HEAD;\r\n if (firstGap >= 2 || lastGap >= 2) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n params.yOffset += 10;\r\n } else {\r\n params.yOffset += 10;\r\n }\r\n }\r\n }\r\n if (selections.length === 2) {\r\n params.xOffset = 0;\r\n }\r\n return params;\r\n }\r\n static slur(score: SmoScore, fromSelection: SmoSelection, toSelection: SmoSelection): SmoSlurParams {\r\n const params = SmoOperation.getDefaultSlurDirection(score, fromSelection.selector, toSelection.selector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n const modifier: SmoSlur = new SmoSlur(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n static addStaff(score: SmoScore, parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n return score.addStaff(parameters);\r\n }\r\n static removeStaff(score: SmoScore, index: number) {\r\n score.removeStaff(index);\r\n }\r\n\r\n static transposeChords(smoNote: SmoNote, offset: number, key: string) {\r\n const chords = smoNote.getModifiers('SmoLyric');\r\n chords.forEach((ll) => {\r\n const lyric = ll as SmoLyric;\r\n if (lyric.parser === SmoLyric.parsers.chord) {\r\n const tx = lyric.getText();\r\n // Look for something that looks like a key name\r\n if (tx.length >= 1 && (tx[0].toUpperCase() >= 'A'\r\n && tx[0].toUpperCase() <= 'G')) {\r\n // toffset is 2 if the key has b or # in it\r\n let toffset = 1;\r\n let newText = tx[0];\r\n if (tx.length > 0 && tx[1] === 'b' || tx[1] === '#') {\r\n newText += tx[1];\r\n toffset = 2;\r\n }\r\n // Transpose the key, as if it were a key signature (octave has no meaning)\r\n let nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(\r\n SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(newText))) + offset);\r\n nkey = JSON.parse(JSON.stringify(SmoMusic.getEnharmonicInKey(nkey, key)));\r\n newText = nkey.letter.toUpperCase();\r\n\r\n // new key may have different length, e.g. Bb to B natural\r\n if (nkey.accidental !== 'n') {\r\n newText += nkey.accidental;\r\n }\r\n newText += tx.substr(toffset, tx.length - toffset);\r\n lyric.setText(newText);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Compute new map based on current instrument selections, adjusting existing instruments as required\r\n * @param instrument\r\n * @param selections\r\n */\r\n static changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]) {\r\n const measureSel = SmoSelection.getMeasureList(selections);\r\n const measureIndex = measureSel[0].selector.measure;\r\n const measureEnd = measureIndex + (measureSel.length - 1);\r\n instrument.startSelector = JSON.parse(JSON.stringify(measureSel[0].selector));\r\n instrument.endSelector = JSON.parse(JSON.stringify(measureSel[measureSel.length - 1].selector));\r\n const instMap: Record = {};\r\n const staffArray: SmoInstrumentMeasure[] = SmoSystemStaff.getStaffInstrumentArray(measureSel[0].staff.measureInstrumentMap);\r\n instMap[measureIndex] = instrument;\r\n staffArray.forEach((ar) => {\r\n if (ar.instrument.endSelector.measure < measureIndex || ar.instrument.startSelector.measure > measureEnd) {\r\n // No overlap, juse use the original instrument\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.startSelector.measure < measureIndex) {\r\n // overlap on left\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = ar.instrument.startSelector.measure;\r\n instMap[split1.startSelector.measure] = split1;\r\n split1.endSelector.measure = measureIndex - 1;\r\n if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on left and right\r\n const split2 = new SmoInstrument(ar.instrument);\r\n split2.startSelector.measure = measureEnd + 1;\r\n split2.endSelector.measure = ar.instrument.endSelector.measure;\r\n instMap[split2.startSelector.measure] = split2;\r\n }\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on right only\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = measureEnd + 1;\r\n instMap[split1.startSelector.measure] = split1;\r\n }\r\n });\r\n selections[0].staff.measureInstrumentMap = instMap;\r\n selections[0].staff.updateInstrumentOffsets();\r\n }\r\n static computeMultipartRest(score: SmoScore) {\r\n let i = 0;\r\n let j = 0;\r\n const measureRanges: Record = {};\r\n const measureCount = score.staves[0].measures.length;\r\n if (score.staves[0].partInfo.expandMultimeasureRests === true) {\r\n return;\r\n }\r\n while (i < measureCount) {\r\n let forceRest = score.staves[0].measures[i].format.forceRest;\r\n if (score.isMultimeasureRest(i, true, forceRest)) {\r\n for (j = i + 1; j < measureCount; ++j) {\r\n const restBreak = score.staves[0].measures[j].format.restBreak;\r\n forceRest = score.staves[0].measures[j].format.forceRest; \r\n if (!score.isMultimeasureRest(j, false, forceRest) || restBreak) {\r\n break; \r\n }\r\n }\r\n if (j - i >= 2) {\r\n measureRanges[i] = j;\r\n }\r\n i = j;\r\n } else {\r\n const startMeasure = i;\r\n score.staves.forEach((staff) => {\r\n staff.measures[startMeasure].svg.hideMultimeasure = false;\r\n });\r\n i += 1;\r\n }\r\n }\r\n const multiKeys = Object.keys(measureRanges).map((x) => parseInt(x, 10));\r\n multiKeys.forEach((key) => {\r\n const endMeasure = measureRanges[key];\r\n score.staves.forEach((staff) => {\r\n const mmLength = endMeasure - key;\r\n const svg = staff.measures[key].svg;\r\n svg.multimeasureLength = mmLength;\r\n if (svg.multimeasureLength > 1) {\r\n svg.multimeasureEndBarline = staff.measures[endMeasure - 1].getEndBarline().barline;\r\n }\r\n staff.measures[key].svg.hideMultimeasure = false;\r\n for (i = key + 1; i < endMeasure; ++i) {\r\n staff.measures[i].svg.hideMultimeasure = true;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Editing operations are performed on selections. A selection can be different things, from a single pitch\r\n * to many notes. These classes standardize some standard selection operations.\r\n * SmoSelector\r\n * @module /smo/xform/selections\r\n */\r\nimport { SmoScore, SmoModifier } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SvgBox, SvgPoint } from '../data/common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n/**\r\n * Modifier tab is a modifier and its bounding box, that can be tabbed to with the keyboard\r\n */\r\n export interface ModifierTab {\r\n modifier: SmoModifier,\r\n selection: SmoSelection | null,\r\n box: SvgBox,\r\n index: number\r\n}\r\n\r\n/**\r\n * There are 2 parts to a selection: the actual musical bits that are selected, and the\r\n * indices that define what was selected. This is the latter. The actual object does not\r\n * have any methods so there is no constructor.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelector {\r\n static get default(): SmoSelector {\r\n return {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n }\r\n staff: number = 0;\r\n measure: number = 0;\r\n voice: number = 0;\r\n tick: number = -1;\r\n pitches: number[] = [];\r\n\r\n static measureSelector(staff: number, measure: number): SmoSelector {\r\n return { staff, measure, voice: 0, tick: 0, pitches: [] };\r\n }\r\n\r\n // TODO: tick in selector s/b tickIndex\r\n static sameNote(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice\r\n && sel1.tick === sel2.tick);\r\n }\r\n static sameMeasure(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure);\r\n }\r\n\r\n static sameStaff(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return sel1.staff === sel2.staff;\r\n }\r\n /**\r\n * Return gt, not considering the voice (e.g. gt in time)\r\n * @param sel1 \r\n * @param sel2 \r\n */\r\n static gtInTime(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.measure > sel2.measure) ||\r\n (sel1.measure === sel2.measure && sel1.tick > sel2.tick);\r\n }\r\n\r\n // ## return true if sel1 > sel2.\r\n static gt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n // Note: voice is not considered b/c it's more of a vertical component\r\n // Note further: sometimes we need to consider voice\r\n return (sel1.staff > sel2.staff) ||\r\n (sel1.staff === sel2.staff && sel1.measure > sel2.measure) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice > sel2.voice) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice && sel1.tick > sel2.tick);\r\n }\r\n\r\n static eq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.voice === sel2.voice && sel1.measure === sel2.measure && sel1.tick === sel2.tick);\r\n }\r\n static neq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return !(SmoSelector.eq(sel1, sel2));\r\n }\r\n\r\n static lt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel2, sel1);\r\n }\r\n\r\n static gteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n static lteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.lt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n // Return 2 selectors in score order, rv[0] is first in time.\r\n static order(a: SmoSelector, b: SmoSelector): SmoSelector[] {\r\n if (SmoSelector.gtInTime(a, b)) {\r\n return [b, a];\r\n }\r\n return [a, b];\r\n }\r\n\r\n // ### getNoteKey\r\n // Get a key useful for a hash map of notes.\r\n static getNoteKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure + '-' + selector.voice + '-' + selector.tick;\r\n }\r\n\r\n static getMeasureKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure;\r\n }\r\n\r\n // return true if testSel is contained in the selStart to selEnd range.\r\n static contains(testSel: SmoSelector, selStart: SmoSelector, selEnd: SmoSelector) {\r\n const geStart =\r\n selStart.measure < testSel.measure ||\r\n (selStart.measure === testSel.measure && selStart.tick <= testSel.tick);\r\n const leEnd =\r\n selEnd.measure > testSel.measure ||\r\n (selEnd.measure === testSel.measure && testSel.tick <= selEnd.tick);\r\n\r\n return geStart && leEnd;\r\n }\r\n\r\n // create a hashmap key for a single note, used to organize modifiers\r\n static selectorNoteKey(selector: SmoSelector) {\r\n return 'staff-' + selector.staff + '-measure-' + selector.measure + '-voice-' + selector.voice + '-tick-' + selector.tick;\r\n }\r\n}\r\n/**\r\n * The fields in a selection. We have the 5 musical cardinal directions of staff, measure, note, pitches, \r\n * and a selector. The pitches are indices\r\n * */\r\nexport interface SmoSelectionParams {\r\n selector: SmoSelector,\r\n _staff: SmoSystemStaff,\r\n _measure: SmoMeasure,\r\n _note?: SmoNote,\r\n _pitches?: number[],\r\n type?: string,\r\n box?: SvgBox\r\n}\r\n\r\n/**\r\n * A selection is a {@link SmoSelector} and a set of references to musical elements, like measure etc.\r\n * The staff and measure are always a part of the selection, and possible a voice and note,\r\n * and one or more pitches. Selections can also be made from the UI by clicking on an element\r\n * or navigating to an element with the keyboard.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelection {\r\n selector: SmoSelector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n _staff: SmoSystemStaff;\r\n _measure: SmoMeasure;\r\n _note: SmoNote | null;\r\n _pitches: number[] = [];\r\n box: SvgBox | null = null;\r\n scrollBox: SvgPoint | null = null;\r\n // ### measureSelection\r\n // A selection that does not contain a specific note\r\n static measureSelection(score: SmoScore, staffIndex: number, measureIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n if (score.staves.length <= staffIndex) {\r\n return null;\r\n }\r\n const staff = score.staves[staffIndex];\r\n if (staff.measures.length <= measureIndex) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n type: 'measure'\r\n });\r\n }\r\n\r\n static measuresInColumn(score: SmoScore, staffIndex: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const sel = SmoSelection.measureSelection(score, i, staffIndex);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### noteSelection\r\n // a selection that specifies a note in the score\r\n static noteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex != null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n if (!staff) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n if (!measure) {\r\n return null;\r\n }\r\n if (measure.voices.length <= voiceIndex) {\r\n return null;\r\n }\r\n if (measure.voices[voiceIndex].notes.length <= tickIndex) {\r\n return null;\r\n }\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n const selector: SmoSelector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches: []\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n type: 'note'\r\n });\r\n }\r\n\r\n // ### noteFromSelector\r\n // return a selection based on the passed-in selector\r\n static noteFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection| null {\r\n return SmoSelection.noteSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n // ### selectionsToEnd\r\n // Select all the measures from startMeasure to the end of the score in the given staff.\r\n static selectionsToEnd(score: SmoScore, staff: number, startMeasure: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = startMeasure; i < score.staves[staff].measures.length; ++i) {\r\n const selection = SmoSelection.measureSelection(score, staff, i);\r\n if (selection) {\r\n rv.push(selection);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### renderedNoteSelection\r\n // return the appropriate type of selection from the selector, based on the selector.\r\n static selectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n if (typeof (selector.pitches) !== 'undefined' && selector.pitches.length) {\r\n return SmoSelection.pitchSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick, selector.pitches);\r\n }\r\n if (typeof (selector.tick) === 'number') {\r\n return SmoSelection.noteFromSelector(score, selector);\r\n }\r\n return SmoSelection.measureSelection(score, selector.staff, selector.measure);\r\n }\r\n\r\n static pitchSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number, pitches: number[]) {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n pitches = typeof (pitches) !== 'undefined' ? pitches : [];\r\n const pa: number[] = [];\r\n pitches.forEach((ix) => {\r\n pa.push(JSON.parse(JSON.stringify(note.pitches[ix])));\r\n });\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: pa,\r\n type: 'pitches'\r\n });\r\n }\r\n /**\r\n * Return the selection that is tickCount ticks after the current selection.\r\n * @param score \r\n * @param selection \r\n * @param tickCount \r\n * @returns \r\n */\r\n static advanceTicks(score: SmoScore, selection: SmoSelection, tickCount: number): SmoSelection | null {\r\n let rv: SmoSelection | null = null;\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n const staff = selection.staff;\r\n rv = SmoSelection.noteFromSelector(score, selection.selector);\r\n while (rv !== null && rv.note !== null && tickCount > 0) {\r\n const prevSelector = JSON.parse(JSON.stringify(rv.selector));\r\n const measureTicks = rv.measure.getMaxTicksVoice();\r\n const tickIx = rv.selector.tick;\r\n const voiceId = rv.measure.voices.length > rv.selector.voice ? rv.selector.voice : 0;\r\n // If the destination is more than a measure away, increment measure\r\n if (tickIx === 0 && tickCount >= measureTicks) {\r\n tickCount -= measureTicks;\r\n if (staff.measures.length > rv.selector.measure + 1) {\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n } else if (selection.measure.voices[voiceId].notes.length > tickIx + 1) {\r\n // else count the tick and advance to next tick\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.tick += 1;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n } else if (staff.measures.length > rv.selector.measure + 1) {\r\n // else advance to next measure and start counting ticks there\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n if (rv !== null && SmoSelector.eq(prevSelector, rv.selector)) {\r\n // No progress, start and end the same\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Count the number of tick indices between selector 1 and selector 2;\r\n * @param score \r\n * @param sel1 \r\n * @param sel2 \r\n * @returns \r\n */\r\n static countTicks(score: SmoScore, sel1: SmoSelector, sel2: SmoSelector): number {\r\n if (SmoSelector.eq(sel1, sel2)) {\r\n return 0;\r\n }\r\n const backwards = SmoSelector.gt(sel1, sel2);\r\n let ticks = 0;\r\n const startSelection = SmoSelection.selectionFromSelector(score, sel1);\r\n let endSelection = SmoSelection.selectionFromSelector(score, sel2);\r\n while (endSelection !== null && startSelection !== null) {\r\n if (SmoSelector.eq(startSelection.selector, endSelection.selector)) {\r\n break;\r\n }\r\n if (backwards) {\r\n endSelection = SmoSelection.nextNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks -= 1;\r\n } else {\r\n endSelection = SmoSelection.lastNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks += 1;\r\n }\r\n }\r\n return ticks;\r\n }\r\n\r\n // ## nextNoteSelection\r\n // ## Description:\r\n // Return the next note in this measure, or the first note of the next measure, if it exists.\r\n static nextNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const nextTick = tickIndex + 1;\r\n const nextMeasure = measureIndex + 1;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n if (measure.voices[voiceIndex].notes.length > nextTick) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, nextTick);\r\n }\r\n if (staff.measures.length > nextMeasure) {\r\n return SmoSelection.noteSelection(score, staffIndex, nextMeasure, voiceIndex, 0);\r\n }\r\n return null;\r\n }\r\n /**\r\n * \r\n * @param score \r\n * @param selector \r\n * @returns \r\n */\r\n static innerSelections(score: SmoScore, startSelector: SmoSelector, endSelector: SmoSelector) {\r\n const sels = SmoSelector.order(startSelector, endSelector);\r\n let start = JSON.parse(JSON.stringify(sels[0]));\r\n const rv: SmoSelection[] = [];\r\n let cur = SmoSelection.selectionFromSelector(score, start);\r\n if (cur) {\r\n rv.push(cur);\r\n }\r\n while (cur && SmoSelector.lt(start, sels[1])) {\r\n cur = SmoSelection.nextNoteSelection(score, start.staff, start.measure, start.voice, start.tick);\r\n if (cur) {\r\n start = JSON.parse(JSON.stringify(cur.selector));\r\n rv.push(cur);\r\n }\r\n }\r\n return rv;\r\n }\r\n static nextNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.nextNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n static lastNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.lastNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n static lastNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const lastTick = tickIndex - 1;\r\n const lastMeasure = measureIndex - 1;\r\n const staff = score.staves[staffIndex];\r\n let measure = staff.measures[measureIndex];\r\n if (tickIndex > 0) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, lastTick);\r\n }\r\n if (lastMeasure >= 0) {\r\n measure = staff.measures[lastMeasure];\r\n if (voiceIndex >= measure.voices.length) {\r\n return null;\r\n }\r\n const noteIndex = measure.voices[voiceIndex].notes.length - 1;\r\n return SmoSelection.noteSelection(score, staffIndex, lastMeasure, voiceIndex, noteIndex);\r\n }\r\n if (measureIndex === 0 && voiceIndex === 0 && tickIndex === 0) {\r\n return null;\r\n }\r\n return SmoSelection.noteSelection(score, staffIndex, 0, 0, 0);\r\n }\r\n // ### getMeasureList\r\n // Gets the list of measures in an array from the selections\r\n static getMeasureList(selections: SmoSelection[]): SmoSelection[] {\r\n let i = 0;\r\n let cur = {};\r\n const rv: SmoSelection[] = [];\r\n if (!selections.length) {\r\n return rv;\r\n }\r\n cur = selections[0].selector.measure;\r\n for (i = 0; i < selections.length; ++i) {\r\n const sel: SmoSelection = selections[i];\r\n if (i === 0 || (sel.selector.measure !== cur)) {\r\n const _staff: SmoSystemStaff = sel._staff;\r\n const _measure: SmoMeasure = sel._measure;\r\n rv.push(\r\n new SmoSelection({\r\n selector: {\r\n staff: sel.selector.staff,\r\n measure: sel.selector.measure,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n },\r\n _staff,\r\n _measure\r\n }));\r\n }\r\n cur = sel.selector.measure;\r\n }\r\n return rv;\r\n }\r\n static getMeasuresBetween(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n if (fromSelector.staff !== toSelector.staff) {\r\n return rv;\r\n }\r\n for (i = fromSelector.measure; i <= toSelector.measure; ++i) {\r\n const sel = SmoSelection.measureSelection(score, fromSelector.staff, i);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n // ### selectionsSameMeasure\r\n // Return true if the selections are all in the same measure. Used to determine what\r\n // type of undo we need.\r\n static selectionsSameMeasure(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameMeasure(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static selectionsSameStaff(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameStaff(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n constructor(params: SmoSelectionParams) {\r\n this.selector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n this._staff = params._staff;\r\n this._measure = params._measure;\r\n this._note = null;\r\n this._pitches = [];\r\n smoSerialize.vexMerge(this, params);\r\n }\r\n\r\n get staff() {\r\n return this._staff;\r\n }\r\n get measure() {\r\n return this._measure;\r\n }\r\n\r\n get note() {\r\n return this._note;\r\n }\r\n get pitches() {\r\n return this.selector.pitches;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote, TupletInfo } from '../data/note';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { Ticks } from '../data/common';\r\nimport { TickMap } from './tickMap';\r\n\r\n/**\r\n * Abstract class for classes that modifiy duration.\r\n * @param note the note we're iterating over\r\n * @param tickmap the tickmap for the measure\r\n * @param index the index into the tickmap\r\n * @returns the note or notes that replace this one. Null if this note is no longer in the measure\r\n */\r\nexport abstract class TickIteratorBase {\r\n // es\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n return null;\r\n }\r\n}\r\n/**\r\n * SmoDuration: change the duration of a note, maybe at the expense of some\r\n * other note.\r\n * @category SmoTransform\r\n */\r\nexport class SmoDuration {\r\n /**\r\n * doubleDurationNonTuplet\r\n * double the duration of the selection, consuming the next note or\r\n * possibly split it in half and consume that. Simple operation so\r\n * do it inline\r\n * @param selection\r\n * @returns\r\n */\r\n static doubleDurationNonTuplet(selection: SmoSelection) {\r\n const note: SmoNote | null = selection?.note;\r\n const measure: SmoMeasure = selection.measure;\r\n if (note === null) {\r\n return;\r\n }\r\n const selector: SmoSelector = selection.selector;\r\n const voices: SmoVoice[] | undefined = measure?.voices;\r\n const voice: SmoVoice = voices[selector.voice];\r\n const notes: SmoNote[] = voice?.notes;\r\n let i = 0;\r\n const nticks: Ticks = { numerator: note.tickCount * 2, denominator: 1, remainder: 0 };\r\n const replNote = SmoNote.cloneWithDuration(note, nticks);\r\n let ticksUsed = note.tickCount;\r\n const newNotes = [];\r\n for (i = 0; i < selector.tick; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n for (i = selector.tick + 1; i < notes.length; ++i) {\r\n const nnote = notes[i];\r\n ticksUsed += nnote.tickCount;\r\n if (ticksUsed >= nticks.numerator) {\r\n break;\r\n }\r\n }\r\n const remainder = ticksUsed - nticks.numerator;\r\n if (remainder < 0) {\r\n return;\r\n }\r\n newNotes.push(replNote);\r\n if (remainder > 0) {\r\n const lmap = SmoMusic.gcdMap(remainder);\r\n lmap.forEach((duration) => {\r\n newNotes.push(SmoNote.cloneWithDuration(note, duration));\r\n });\r\n }\r\n\r\n for (i = i + 1; i < notes.length; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n // If any tuplets got removed while extending the notes,\r\n voice.notes = newNotes;\r\n const measureTuplets: SmoTuplet[] = [];\r\n const allTuplets: SmoTuplet[] | undefined = measure?.tuplets;\r\n allTuplets?.forEach((tuplet: SmoTuplet) => {\r\n const testNotes = measure?.tupletNotes(tuplet);\r\n if (testNotes?.length === tuplet.notes.length) {\r\n measureTuplets.push(tuplet);\r\n }\r\n });\r\n measure.tuplets = measureTuplets;\r\n }\r\n\r\n /**\r\n * double duration, tuplet form. Increase the first selection and consume the\r\n * following note. Also a simple operation\r\n * @param selection\r\n * @returns\r\n */\r\n static doubleDurationTuplet(selection: SmoSelection) {\r\n let i: number = 0;\r\n const measure: SmoMeasure = selection.measure;\r\n const note: SmoNote | null = selection?.note;\r\n if (note === null) {\r\n return;\r\n }\r\n const notes = measure.voices[selection.selector.voice].notes;\r\n const tuplet: SmoTuplet | null = measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return;\r\n }\r\n const startIndex = selection.selector.tick - tuplet.startIndex;\r\n\r\n const startLength: number = tuplet.notes.length;\r\n tuplet.combine(startIndex, startIndex + 1);\r\n if (tuplet.notes.length >= startLength) {\r\n return;\r\n }\r\n const newNotes = [];\r\n\r\n for (i = 0; i < tuplet.startIndex; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n tuplet.notes.forEach((note) => {\r\n newNotes.push(note);\r\n });\r\n for (i = i + tuplet.notes.length + 1; i < notes.length; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n measure.voices[selection.selector.voice].notes = newNotes;\r\n }\r\n}\r\n/**\r\n * SmoTickIterator\r\n * this is a local helper class that follows a pattern of iterating of the notes. Most of the\r\n * duration changers iterate over a selection, and return:\r\n * - A note, if the duration changes\r\n * - An array of notes, if the notes split\r\n * - null if the note stays the same\r\n * - empty array, remove the note from the group\r\n * @category SmoTransform\r\n */\r\nexport class SmoTickIterator {\r\n notes: SmoNote[] = [];\r\n newNotes: SmoNote[] = [];\r\n actor: TickIteratorBase;\r\n measure: SmoMeasure;\r\n voice: number = 0;\r\n keySignature: string;\r\n constructor(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n this.notes = measure.voices[voiceIndex].notes;\r\n this.measure = measure;\r\n this.voice = typeof (voiceIndex) === 'number' ? voiceIndex : 0;\r\n this.newNotes = [];\r\n // eslint-disable-next-line\r\n this.actor = actor;\r\n this.keySignature = 'C';\r\n }\r\n static nullActor(note: SmoNote) {\r\n return note;\r\n }\r\n /**\r\n *\r\n * @param measure {SmoMeasure}\r\n * @param actor {}\r\n * @param voiceIndex\r\n */\r\n static iterateOverTicks(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n measure.clearBeamGroups();\r\n const transformer = new SmoTickIterator(measure, actor, voiceIndex);\r\n transformer.run();\r\n measure.voices[voiceIndex].notes = transformer.notes;\r\n }\r\n // ### transformNote\r\n // call the actors for each note, and put the result in the note array.\r\n // The note from the original array is copied and sent to each actor.\r\n //\r\n // Because the resulting array can have a different number of notes than the existing\r\n // array, the actors communicate with the transformer in the following, jquery-ish\r\n // but somewhat unintuitive way:\r\n //\r\n // 1. if the actor returns null, the next actor is called and the results of that actor are used\r\n // 2. if all the actors return null, the copy is used.\r\n // 3. if a note object is returned, that is used for the current tick and no more actors are called.\r\n // 4. if an array of notes is returned, it is concatenated to the existing note array and no more actors are called.\r\n // Note that *return note;* and *return [note];* produce the same result.\r\n // 5. if an empty array [] is returned, that copy is not added to the result. The note is effectively deleted.\r\n iterateOverTick(tickmap: TickMap, index: number, note: SmoNote) {\r\n const actor: TickIteratorBase = this.actor;\r\n const newNote: SmoNote[] | SmoNote | null = actor.iterateOverTick(note, tickmap, index);\r\n if (newNote === null) {\r\n this.newNotes.push(note); // no change\r\n return note;\r\n }\r\n if (Array.isArray(newNote)) {\r\n if (newNote.length === 0) {\r\n return null;\r\n }\r\n this.newNotes = this.newNotes.concat(newNote);\r\n return null;\r\n }\r\n this.newNotes.push(newNote as SmoNote);\r\n return null;\r\n }\r\n\r\n run() {\r\n let i = 0;\r\n const tickmap = this.measure.tickmapForVoice(this.voice);\r\n for (i = 0; i < tickmap.durationMap.length; ++i) {\r\n this.iterateOverTick(tickmap, i, this.measure.voices[this.voice].notes[i]);\r\n }\r\n this.notes = this.newNotes;\r\n return this.newNotes;\r\n }\r\n}\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractNoteActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newTicks: number\r\n}\r\n/**\r\n * Contract the duration of a note, filling in the space with another note\r\n * or rest.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoContractNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n tickmap: TickMap;\r\n newTicks: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoContractNoteParams) {\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tickmap = this.measure.tickmapForVoice(this.voice);\r\n this.newTicks = params.newTicks;\r\n }\r\n static apply(params: SmoContractNoteParams) {\r\n const actor = new SmoContractNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure,\r\n actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n let i = 0;\r\n if (index === this.startIndex) {\r\n const notes: SmoNote[] = [];\r\n const noteCount = Math.floor(note.ticks.numerator / this.newTicks);\r\n let remainder = note.ticks.numerator;\r\n /**\r\n * Replace 1 note with noteCOunt notes of newTIcks duration\r\n * old map:\r\n * d . d . .\r\n * new map:\r\n * d d d . .\r\n */\r\n for (i = 0; i < noteCount; ++i) {\r\n // first note, retain modifiers so clone. Otherwise just\r\n // retain pitches\r\n if (i === 0) {\r\n const nn = SmoNote.clone(note);\r\n nn.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 };\r\n notes.push(nn);\r\n } else {\r\n const nnote = new SmoNote(SmoNote.defaults);\r\n nnote.clef = note.clef;\r\n nnote.pitches = JSON.parse(JSON.stringify(note.pitches));\r\n nnote.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 };\r\n nnote.beamBeats = note.beamBeats;\r\n notes.push(nnote);\r\n }\r\n remainder = remainder - this.newTicks;\r\n }\r\n\r\n // make sure remnainder is not too short\r\n if (remainder > 0) {\r\n if (remainder < 128) {\r\n return null;\r\n }\r\n const nnote = new SmoNote(SmoNote.defaults);\r\n nnote.clef = note.clef;\r\n nnote.pitches = JSON.parse(JSON.stringify(note.pitches));\r\n nnote.ticks = { numerator: remainder, denominator: 1, remainder: 0 };\r\n nnote.beamBeats = note.beamBeats;\r\n notes.push(nnote);\r\n }\r\n return notes;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractTupletParams {\r\n changeIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Shrink the duration of a note in a tuplet by creating additional notes\r\n * @category SmoTransform\r\n */\r\nexport class SmoContractTupletActor extends TickIteratorBase {\r\n changeIndex: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n tuplet: SmoTuplet | null;\r\n oldLength: number = 0;\r\n tupletIndex: number = 0;\r\n splitIndex: number = 0;\r\n constructor(params: SmoContractTupletParams) {\r\n super();\r\n this.changeIndex = params.changeIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tuplet = this.measure.getTupletForNote(this.measure.voices[this.voice].notes[this.changeIndex]);\r\n if (this.tuplet === null) {\r\n return;\r\n }\r\n this.oldLength = this.tuplet.notes.length;\r\n this.tupletIndex = this.measure.tupletIndex(this.tuplet);\r\n this.splitIndex = this.changeIndex - this.tupletIndex;\r\n this.tuplet.split(this.splitIndex);\r\n }\r\n static apply(params: SmoContractTupletParams) {\r\n const actor = new SmoContractTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.tuplet === null) {\r\n return null;\r\n }\r\n if (index < this.tupletIndex) {\r\n return note;\r\n }\r\n if (index >= this.tupletIndex + this.oldLength) {\r\n return note;\r\n }\r\n if (index === this.changeIndex) {\r\n return this.tuplet.notes;\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Constructor params for {@link SmoUnmakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoUnmakeTupletParams {\r\n startIndex: number,\r\n endIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Convert a tuplet into a single note that takes up the whole duration\r\n * @category SmoTransform\r\n */\r\nexport class SmoUnmakeTupletActor extends TickIteratorBase {\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(parameters: SmoUnmakeTupletParams) {\r\n super();\r\n this.startIndex = parameters.startIndex;\r\n this.endIndex = parameters.endIndex;\r\n this.measure = parameters.measure;\r\n this.voice = parameters.voice;\r\n }\r\n static apply(params: SmoUnmakeTupletParams) {\r\n const actor = new SmoUnmakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (index < this.startIndex || index > this.endIndex) {\r\n return null;\r\n }\r\n if (index === this.startIndex) {\r\n const tuplet = this.measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return [];\r\n }\r\n const ticks = tuplet.totalTicks;\r\n const nn: SmoNote = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n nn.tuplet = {} as TupletInfo;\r\n this.measure.removeTupletForNote(note);\r\n return [nn];\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * constructor parameters for {@link SmoMakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoMakeTupletParams {\r\n index: number,\r\n totalTicks: number,\r\n numNotes: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Turn a tuplet into a non-tuplet of the same length\r\n * @category SmoTransform\r\n * \r\n * */\r\nexport class SmoMakeTupletActor extends TickIteratorBase {\r\n measure: SmoMeasure;\r\n durationMap: number[];\r\n numNotes: number;\r\n stemTicks: number;\r\n totalTicks: number;\r\n rangeToSkip: number[];\r\n tuplet: SmoNote[];\r\n voice: number;\r\n index: number;\r\n constructor(params: SmoMakeTupletParams) {\r\n let i = 0;\r\n super();\r\n this.measure = params.measure;\r\n this.numNotes = params.numNotes;\r\n this.durationMap = [];\r\n this.totalTicks = params.totalTicks;\r\n this.voice = params.voice;\r\n this.index = params.index;\r\n for (i = 0; i < this.numNotes; ++i) {\r\n this.durationMap.push(1.0);\r\n }\r\n this.stemTicks = SmoTuplet.calculateStemTicks(this.totalTicks, this.numNotes);\r\n this.rangeToSkip = this._rangeToSkip();\r\n this.tuplet = [];\r\n }\r\n static apply(params: SmoMakeTupletParams) {\r\n const actor = new SmoMakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n _rangeToSkip(): number[] {\r\n let i = 0;\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n const ticks = this.measure.tickmapForVoice(this.voice);\r\n let accum = 0;\r\n const rv = [];\r\n rv.push(this.index);\r\n for (i = 0; i < ticks.deltaMap.length; ++i) {\r\n if (i >= this.index) {\r\n accum += ticks.deltaMap[i];\r\n }\r\n if (accum >= this.totalTicks) {\r\n rv.push(i);\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n let i = 0;\r\n // if our tuplet replaces this note, make sure we make it go away.\r\n if (index > this.index && index <= this.rangeToSkip[1]) {\r\n return [];\r\n }\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n if (index !== this.index) {\r\n return null;\r\n }\r\n for (i = 0; i < this.numNotes; ++i) {\r\n note = SmoNote.cloneWithDuration(note, { numerator: this.stemTicks, denominator: 1, remainder: 0 });\r\n // Don't clone modifiers, except for first one.\r\n note.textModifiers = i === 0 ? note.textModifiers : [];\r\n this.tuplet.push(note);\r\n }\r\n const tuplet = new SmoTuplet({\r\n notes: this.tuplet,\r\n stemTicks: this.stemTicks,\r\n totalTicks: this.totalTicks,\r\n ratioed: false,\r\n bracketed: true,\r\n startIndex: index,\r\n durationMap: this.durationMap,\r\n voice: tickmap.voice,\r\n numNotes: this.numNotes\r\n });\r\n this.measure.tuplets.push(tuplet);\r\n return this.tuplet;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor when we want to double or dot the duration of a note (stretch)\r\n * for {@link SmoStretchNoteActor}\r\n * @param startIndex tick index into the measure\r\n * @param measure the container measure\r\n * @param voice the voice index\r\n * @param newTicks the ticks the new note will take up\r\n * @category SmoTransform\r\n */\r\nexport interface SmoStretchNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newTicks: number\r\n}\r\n/**\r\n * increase the length of a note, removing future notes in the measure as required\r\n * @category SmoTransform\r\n */\r\nexport class SmoStretchNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n tickmap: TickMap;\r\n newTicks: number;\r\n startTick: number;\r\n divisor: number;\r\n durationMap: number[];\r\n skipFromStart: number;\r\n skipFromEnd: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoStretchNoteParams) {\r\n let mapIx = 0;\r\n let i = 0;\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tickmap = this.measure.tickmapForVoice(this.voice);\r\n this.newTicks = params.newTicks;\r\n this.startTick = this.tickmap.durationMap[this.startIndex];\r\n const currentTicks = this.tickmap.deltaMap[this.startIndex];\r\n const endTick = this.tickmap.durationMap[this.startIndex] + this.newTicks;\r\n this.divisor = -1;\r\n this.durationMap = [];\r\n this.skipFromStart = this.startIndex + 1;\r\n this.skipFromEnd = this.startIndex + 1;\r\n this.durationMap.push(this.newTicks);\r\n\r\n mapIx = this.tickmap.durationMap.indexOf(endTick);\r\n\r\n const remaining = this.tickmap.deltaMap.slice(this.startIndex, this.tickmap.durationMap.length).reduce((accum, x) => x + accum);\r\n if (remaining === this.newTicks) {\r\n mapIx = this.tickmap.deltaMap.length;\r\n }\r\n\r\n // If there is no tickable at the end point, try to split the next note\r\n /**\r\n * old map:\r\n * d . d .\r\n * split map:\r\n * d . d d\r\n * new map:\r\n * d . . d\r\n */\r\n if (mapIx < 0) {\r\n const ndelta = this.tickmap.deltaMap[this.startIndex + 1];\r\n const needed = this.newTicks - currentTicks;\r\n const exp = ndelta / needed;\r\n // Next tick does not divide evenly into this, or next tick is shorter than this\r\n if (Math.round(ndelta / exp) - ndelta / exp !== 0 || ndelta < 256) {\r\n this.durationMap = [];\r\n } else if (ndelta / exp + this.startTick + this.newTicks <= this.tickmap.totalDuration) {\r\n this.durationMap.push(ndelta - (ndelta / exp));\r\n } else {\r\n // there is no way to do this...\r\n this.durationMap = [];\r\n }\r\n } else {\r\n // If this note now takes up the space of other notes, remove those notes\r\n for (i = this.startIndex + 1; i < mapIx; ++i) {\r\n this.durationMap.push(0);\r\n }\r\n }\r\n }\r\n static apply(params: SmoStretchNoteParams) {\r\n const actor = new SmoStretchNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.durationMap.length === 0) {\r\n return null;\r\n }\r\n if (index >= this.startIndex && index < this.startIndex + this.durationMap.length) {\r\n const mapIndex = index - this.startIndex;\r\n const ticks = this.durationMap[mapIndex];\r\n if (ticks === 0) {\r\n return [];\r\n }\r\n note = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n return [note];\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { TickMappable } from '../data/measure';\r\nimport { Pitch, IsPitchLetter, TickAccidental } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\n\r\n/**\r\n * create a map note durations at each index into the voice, including the accidentals at each duration.\r\n * return format:\r\n * ```\r\n tickmap = {\r\n totalDuration: 16384,\r\n durationMap:[2048,4096,..], // A running total per tick\r\n deltaMap:[2048,2048...], a map of deltas\r\n ```\r\n * @category SmoTransform\r\n */ \r\nexport class TickMap {\r\n keySignature: string;\r\n voice: number;\r\n notes: SmoNote[] = [];\r\n index: number = 0;\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n // duration is the accumulated duraition over all the notes\r\n totalDuration: number = 0;\r\n // delta is the tick contribution of this note\r\n delta: number = 0;\r\n // the absolute tick start location of notes[x]\r\n durationMap: number[] = [];\r\n // the relative duration if each tick slot\r\n deltaMap: number[] = [];\r\n // An array of active accidentals for each tick index\r\n accidentalMap: Record[] = [];\r\n // a map of active accidentals, indexed by duration index\r\n durationAccidentalMap: Record> = {};\r\n constructor(measure: TickMappable, voiceIndex: number) {\r\n this.keySignature = measure.keySignature;\r\n this.voice = voiceIndex;\r\n if (measure.voices.length <= this.voice) {\r\n console.warn('tickmap for invalid voice');\r\n return;\r\n }\r\n this.notes = measure.voices[this.voice].notes;\r\n this.endIndex = this.notes.length;\r\n this.createMap();\r\n }\r\n // ### _getAccidentalsForKey\r\n // Update `map` with the correct accidental based on the key signature.\r\n _getAccidentalsForKey(map: Record) {\r\n const keys = SmoMusic.getScaleTonesForKey(this.keySignature);\r\n const keyKeys = Object.keys(keys);\r\n keyKeys.forEach((keyKey) => {\r\n const vexKey = keys[keyKey];\r\n if (vexKey.length > 1 && (vexKey[1] === 'b' || vexKey[1] === '#')) {\r\n if (IsPitchLetter(vexKey[0])) {\r\n const pitch = {\r\n letter: vexKey[0],\r\n accidental: vexKey[1],\r\n octave: 4\r\n };\r\n map[vexKey[0]] = {\r\n duration: 0,\r\n pitch\r\n };\r\n }\r\n }\r\n });\r\n }\r\n\r\n // ### updateAccidentalMap\r\n // Keep a running tally of the accidentals for this voice\r\n // based on the key and previous accidentals.\r\n updateAccidentalMap(note: SmoNote) {\r\n let i = 0;\r\n let sigObj: Record = {};\r\n const newObj: Record = {};\r\n if (this.index === 0) {\r\n this._getAccidentalsForKey(newObj);\r\n sigObj = newObj;\r\n } else {\r\n sigObj = this.accidentalMap[this.index - 1];\r\n }\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n const pitch: Pitch = note.pitches[i];\r\n const pitchOctave = pitch.letter.toLowerCase() + '-' + pitch.octave;\r\n const sigLetter: string = pitchOctave + pitch.accidental;\r\n const sigKey = SmoMusic.getKeySignatureKey(pitch.letter, this.keySignature);\r\n if (sigObj && sigObj[pitchOctave]) {\r\n const curObj = sigObj[pitchOctave];\r\n const currentVal = curObj.pitch.letter.toLowerCase() + '-' + curObj.pitch.octave + curObj.pitch.accidental;\r\n if (sigLetter !== currentVal) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n } else {\r\n if (sigLetter !== sigKey) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n }\r\n }\r\n this.accidentalMap.push(newObj);\r\n // Mark the accidental with the start of this note.\r\n this.durationAccidentalMap[this.durationMap[this.index]] = newObj;\r\n }\r\n\r\n // ### getActiveAccidental\r\n // return the active accidental for the given note\r\n getActiveAccidental(pitch: Pitch, iteratorIndex: number, keySignature: string) {\r\n let defaultAccidental: string = SmoMusic.getKeySignatureKey(pitch.letter, keySignature);\r\n let i = 0;\r\n let j = 0;\r\n defaultAccidental = defaultAccidental.length > 1 ? defaultAccidental[1] : 'n';\r\n if (iteratorIndex === 0) {\r\n return defaultAccidental;\r\n }\r\n // Back up the accidental map until we have a match, or until we run out\r\n for (i = iteratorIndex; i > 0; --i) {\r\n const map: Record = this.accidentalMap[i - 1];\r\n const mapKeys = Object.keys(map);\r\n for (j = 0; j < mapKeys.length; ++j) {\r\n const mapKey: string = mapKeys[j];\r\n // The letter name + accidental in the map\r\n const mapPitch: Pitch = map[mapKey].pitch;\r\n const mapAcc = mapPitch.accidental ? mapPitch.accidental : 'n';\r\n\r\n // if the letters match and the accidental...\r\n if (mapPitch.letter.toLowerCase() === pitch.letter) {\r\n return mapAcc;\r\n }\r\n }\r\n }\r\n return defaultAccidental;\r\n }\r\n get duration() {\r\n return this.totalDuration;\r\n }\r\n createMap() {\r\n for (this.index = this.startIndex; this.index < this.endIndex; ++this.index) {\r\n const note = this.notes[this.index];\r\n // save the starting point, tickwise\r\n this.durationMap.push(this.totalDuration);\r\n // the number of ticks for this note\r\n this.delta = (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n this.deltaMap.push(this.delta);\r\n // update the tick count for the whole array/measure\r\n this.totalDuration += this.delta;\r\n this.updateAccidentalMap(note);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoStaffTextBracket, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoOperation } from './operations';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelector } from './selections';\r\n\r\nexport interface UndoEntry {\r\n title: string,\r\n type: number,\r\n selector: SmoSelector,\r\n subtype: number,\r\n grouped: boolean,\r\n firstInGroup: boolean,\r\n json?: any\r\n}\r\nexport function copyUndo(entry: UndoEntry): UndoEntry {\r\n const obj = { \r\n title: entry.title,\r\n type: entry.type,\r\n selector: entry.selector,\r\n subtype: entry.subtype,\r\n grouped: entry.grouped,\r\n firstInGroup: entry.firstInGroup,\r\n json: undefined\r\n };\r\n if (entry.json) {\r\n obj.json = JSON.parse(JSON.stringify(entry.json));\r\n }\r\n return obj;\r\n}\r\n/**\r\n * manage a set of undo or redo operations on a score. The objects passed into\r\n * undo must implement serialize()/deserialize()\r\n * \r\n * ## Buffer format:\r\n * A buffer is one of 7 things:\r\n * * A single measure,\r\n * * A single staff\r\n * * the whole score\r\n * * a score modifier (text)\r\n * * score attributes (layout, etc)\r\n * * column - all the measures at one index\r\n * * rectangle - a rectangle of measures\r\n * @category SmoTransform\r\n * */\r\nexport class UndoBuffer {\r\n static groupCount = 0;\r\n static get bufferMax() {\r\n return 100;\r\n }\r\n\r\n static get bufferTypes() {\r\n return {\r\n FIRST: 1,\r\n MEASURE: 1, STAFF: 2, SCORE: 3, SCORE_MODIFIER: 4, COLUMN: 5, RECTANGLE: 6,\r\n SCORE_ATTRIBUTES: 7, STAFF_MODIFIER: 8, LAST: 8\r\n };\r\n }\r\n static get bufferSubtypes() {\r\n return {\r\n NONE: 0, ADD: 1, REMOVE: 2, UPDATE: 3\r\n };\r\n }\r\n static get bufferTypeLabel() {\r\n return ['INVALID', 'MEASURE', 'STAFF', 'SCORE', 'SCORE_MODIFIER', 'COLUMN', 'RECTANGLE',\r\n 'SCORE_ATTRIBUTES', 'STAFF_MODIFIER'];\r\n }\r\n // ### serializeMeasure\r\n // serialize a measure, preserving the column-mapped bits which aren't serialized on a full score save.\r\n static serializeMeasure(measure: SmoMeasure) {\r\n const json: any = measure.serialize();\r\n const columnMapped : any = measure.serializeColumnMapped();\r\n Object.keys(columnMapped).forEach((key) => {\r\n json[key] = columnMapped[key];\r\n });\r\n return json;\r\n }\r\n buffer: UndoEntry[] = [];\r\n reconcile: number = -1;\r\n opCount: number;\r\n _grouping: boolean;\r\n constructor() {\r\n this.buffer = [];\r\n this.opCount = 0;\r\n this._grouping = false;\r\n }\r\n get grouping() {\r\n return this._grouping;\r\n }\r\n // Allows a set of operations to be bunched into a single group\r\n set grouping(val) {\r\n if (this._grouping === true && val === false) {\r\n const buf = this.peek();\r\n // If we have been grouping, indicate that the last buffer is the\r\n // fist part of a group\r\n if (buf) {\r\n buf.firstInGroup = true;\r\n }\r\n }\r\n this._grouping = val;\r\n }\r\n reset() {\r\n this.buffer = [];\r\n }\r\n // ### addBuffer\r\n // Description:\r\n // Add the current state of the score required to undo the next operation we\r\n // are about to perform. For instance, if we are adding a crescendo, we back up the\r\n // staff the crescendo will go on.\r\n addBuffer(title: string, type: number, selector: SmoSelector, obj: any, subtype: number) {\r\n let i = 0;\r\n let j = 0;\r\n if (typeof(type) !== 'number' || type < UndoBuffer.bufferTypes.FIRST || type > UndoBuffer.bufferTypes.LAST) {\r\n throw 'Undo failure: illegal buffer type ' + type;\r\n }\r\n const undoObj: UndoEntry = {\r\n title,\r\n type,\r\n selector,\r\n subtype,\r\n grouped: this._grouping,\r\n firstInGroup: false\r\n };\r\n if (type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n // RECTANGLE obj is {score, topLeft, bottomRight}\r\n // where the last 2 are selectors\r\n const measures = [];\r\n for (i = obj.topLeft.staff; i <= obj.bottomRight.staff; ++i) {\r\n for (j = obj.topLeft.measure; j <= obj.bottomRight.measure; ++j) {\r\n measures.push(UndoBuffer.serializeMeasure(obj.score.staves[i].measures[j]));\r\n }\r\n }\r\n undoObj.json = { topLeft: JSON.parse(JSON.stringify(obj.topLeft)),\r\n bottomRight: JSON.parse(JSON.stringify(obj.bottomRight)),\r\n measures };\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n undoObj.json = {};\r\n smoSerialize.serializedMerge(SmoScore.preferences, obj, undoObj.json);\r\n } else if (type === UndoBuffer.bufferTypes.COLUMN) {\r\n // COLUMN obj is { score, measureIndex }\r\n const ix = obj.measureIndex;\r\n const measures: SmoMeasure[] = [];\r\n obj.score.staves.forEach((staff: SmoSystemStaff) => {\r\n measures.push(UndoBuffer.serializeMeasure(staff.measures[ix]));\r\n });\r\n undoObj.json = { measureIndex: ix, measures };\r\n } else if (type === UndoBuffer.bufferTypes.MEASURE) {\r\n // If this is a measure, preserve the column-mapped attributes\r\n undoObj.json = UndoBuffer.serializeMeasure(obj);\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_MODIFIER ||\r\n type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n // score modifier, already serialized\r\n undoObj.json = obj;\r\n } else {\r\n // staff or score or staffModifier\r\n undoObj.json = obj.serialize();\r\n }\r\n if (this.buffer.length >= UndoBuffer.bufferMax) {\r\n this.buffer.splice(0, 1);\r\n }\r\n this.opCount += 1;\r\n this.buffer.push(undoObj);\r\n }\r\n\r\n // ### _pop\r\n // ### Description:\r\n // Internal method to pop the top buffer off the stack.\r\n _pop(): UndoEntry | null {\r\n if (this.buffer.length < 1) {\r\n return null;\r\n }\r\n const buf: UndoEntry = this.buffer.pop() as UndoEntry;\r\n return buf;\r\n }\r\n\r\n // ## Before undoing, peek at the top action in the q\r\n // so it can be re-rendered\r\n peek(): UndoEntry | null {\r\n if (this.buffer.length < 1) {\r\n return null;\r\n }\r\n return this.buffer[this.buffer.length - 1];\r\n }\r\n peekIndex(index: number) {\r\n if (this.buffer.length - index < 1) {\r\n return null;\r\n }\r\n return this.buffer[this.buffer.length - (1 + index)];\r\n }\r\n\r\n // ## undo\r\n // ## Description:\r\n // Undo the operation at the top of the undo stack. This is done by replacing\r\n // the music as it existed before the change was made.\r\n undo(score: SmoScore, staffMap: Record, pop: boolean): SmoScore {\r\n let i = 0;\r\n let j = 0;\r\n let mix = 0;\r\n let buf: UndoEntry | null = null;\r\n let peekIndex = 0;\r\n if (pop) {\r\n buf = this._pop();\r\n } else {\r\n buf = this.peekIndex(peekIndex);\r\n if (buf) {\r\n buf = copyUndo(buf);\r\n }\r\n }\r\n if (!buf) {\r\n return score;\r\n }\r\n const grouping = buf.firstInGroup;\r\n while (buf) {\r\n if (buf.type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n for (i = buf.json.topLeft.staff; i <= buf.json.bottomRight.staff; ++i) {\r\n for (j = buf.json.topLeft.measure; j <= buf.json.bottomRight.measure; ++j) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[mix]);\r\n mix += 1;\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[i]) === 'number') {\r\n selector.staff = staffMap[i];\r\n measure.measureNumber.staffId = staffMap[i];\r\n selector.measure = j;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n const modifier: StaffModifierBase = StaffModifierBase.deserialize(buf.json);\r\n if (typeof(staffMap[modifier.startSelector.staff]) === 'number') {\r\n const staff: SmoSystemStaff = score.staves[staffMap[modifier.startSelector.staff]];\r\n const existing: StaffModifierBase | undefined = staff.getModifier(modifier);\r\n if (existing) {\r\n staff.removeStaffModifier(existing);\r\n }\r\n // If we undo an add, we just remove it.\r\n if (buf.subtype !== UndoBuffer.bufferSubtypes.ADD) {\r\n if (modifier.ctor === 'SmoStaffTextBracket') {\r\n staff.addTextBracket(modifier as SmoStaffTextBracket);\r\n } else {\r\n staff.addStaffModifier(modifier);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n smoSerialize.serializedMerge(SmoScore.preferences, buf.json, score);\r\n } else if (buf.type === UndoBuffer.bufferTypes.COLUMN) {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[i]);\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[i]) === 'number') {\r\n selector.staff = staffMap[i];\r\n measure.measureNumber.staffId = staffMap[i];\r\n selector.measure = buf.json.measureIndex;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.MEASURE) {\r\n // measure expects key signature to be in concert key.\r\n if (typeof(staffMap[buf.selector.staff]) === 'number' ) {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const xpose = buf.json.transposeIndex ?? 0;\r\n const concertKey = SmoMusic.vexKeySigWithOffset(buf.json.keySignature, -1 * xpose);\r\n buf.json.keySignature = concertKey;\r\n const measure = SmoMeasure.deserialize(buf.json);\r\n measure.measureNumber.staffId = buf.selector.staff;\r\n score.replaceMeasure(buf.selector, measure);\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE) {\r\n // Score expects string, as deserialized score is how saving is done.\r\n score = SmoScore.deserialize(JSON.stringify(buf.json));\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER) {\r\n // Currently only one type like this: SmoTextGroup\r\n if (buf.json && buf.json.ctor === 'SmoTextGroup') {\r\n const obj = SmoTextGroup.deserializePreserveId(buf.json);\r\n obj.attrs.id = buf.json.attrs.id;\r\n // undo of add is remove, undo of remove is add. Undo of update is remove and add older version\r\n if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n score.removeTextGroup(obj);\r\n } if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n score.addTextGroup(obj);\r\n }\r\n }\r\n } else {\r\n if (typeof(staffMap[buf.selector.staff]) === 'number') {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const staff = SmoSystemStaff.deserialize(buf.json);\r\n score.replaceStaff(buf.selector.staff, staff);\r\n }\r\n }\r\n const peekBuf = this.peekIndex(peekIndex + 1);\r\n // If buf is grouped and not the first in the group, also undo the next buffer\r\n if (grouping && peekBuf !== null && peekBuf.grouped && buf.firstInGroup === false) {\r\n // For the backup/full score, we actually pop the buffer. For the visible score, we \r\n // just use copies of the buffer.\r\n if (pop) {\r\n buf = this._pop();\r\n } else {\r\n peekIndex += 1;\r\n buf = this.peekIndex(peekIndex);\r\n if (buf) {\r\n buf = copyUndo(buf);\r\n }\r\n }\r\n } else {\r\n buf = null;\r\n }\r\n }\r\n return score;\r\n }\r\n}\r\n\r\n// ## SmoUndoable\r\n// Convenience functions to save the score state before operations so we can undo the operation.\r\n// Each undo-able knows which set of parameters the undo operation requires (measure, staff, score).\r\nexport class SmoUndoable {\r\n // ### undoScoreObject\r\n // Called when a score object is being modified. There is no need to update the score as it contains a\r\n // reference to the object\r\n static changeTextGroup(score: SmoScore, undoBuffer: UndoBuffer, object: any, subtype: number) {\r\n undoBuffer.addBuffer('modify text',\r\n UndoBuffer.bufferTypes.SCORE_MODIFIER, SmoSelector.default, object, subtype);\r\n if (subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n SmoOperation.removeTextGroup(score, object);\r\n } else if (subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n SmoOperation.addTextGroup(score, object);\r\n }\r\n // Update operation, there is nothing to do since the text is already\r\n // part of the score\r\n }\r\n}\r\n","export const Commissioner_MediumFont = {\r\n smufl: false,\r\n name: \"CommissionerMedium\",\r\n spacing: 50,\r\n fontFamily: \"Commisioner\",\r\n description: \"Commisioner, a sans-serif font similar to Arial\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1212,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1314\r\n },\r\n \"1\": {\r\n \"xMin\": 56,\r\n \"xMax\": 676,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 874\r\n },\r\n \"2\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1020,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1120\r\n },\r\n \"3\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1056,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1150\r\n },\r\n \"4\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1209\r\n },\r\n \"5\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1061,\r\n \"yMin\": -23,\r\n \"yMax\": 1373,\r\n \"ha\": 1396,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1155\r\n },\r\n \"6\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1127,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1221\r\n },\r\n \"7\": {\r\n \"xMin\": 50,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1072\r\n },\r\n \"8\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1128,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1222\r\n },\r\n \"9\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1119,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1221\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 382\r\n },\r\n \"!\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1472,\r\n \"ha\": 1496,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 78,\r\n \"xMax\": 674,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 790\r\n },\r\n \"#\": {\r\n \"xMin\": 32,\r\n \"xMax\": 1344,\r\n \"yMin\": 0,\r\n \"yMax\": 1322,\r\n \"ha\": 1322,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 1376\r\n },\r\n \"$\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1060,\r\n \"yMin\": -274,\r\n \"yMax\": 1606,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1133\r\n },\r\n \"%\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1732,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1804\r\n },\r\n \"&\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1465,\r\n \"yMin\": -21,\r\n \"yMax\": 1453,\r\n \"ha\": 1474,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1490\r\n },\r\n \"'\": {\r\n \"xMin\": 78,\r\n \"xMax\": 305,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 421\r\n },\r\n \"(\": {\r\n \"xMin\": 108,\r\n \"xMax\": 718,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 790\r\n },\r\n \")\": {\r\n \"xMin\": 72,\r\n \"xMax\": 682,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 790\r\n },\r\n \"*\": {\r\n \"xMin\": 52,\r\n \"xMax\": 908,\r\n \"yMin\": 578,\r\n \"yMax\": 1492,\r\n \"ha\": 914,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 960\r\n },\r\n \"+\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1068,\r\n \"yMin\": 113,\r\n \"yMax\": 1089,\r\n \"ha\": 976,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1184\r\n },\r\n \",\": {\r\n \"xMin\": 49,\r\n \"xMax\": 379,\r\n \"yMin\": -314,\r\n \"yMax\": 279,\r\n \"ha\": 593,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 474\r\n },\r\n \"-\": {\r\n \"xMin\": 116,\r\n \"xMax\": 732,\r\n \"yMin\": 503,\r\n \"yMax\": 691,\r\n \"ha\": 188,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 848\r\n },\r\n \".\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 272,\r\n \"ha\": 296,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"/\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \":\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \";\": {\r\n \"xMin\": 67,\r\n \"xMax\": 398,\r\n \"yMin\": -314,\r\n \"yMax\": 1019,\r\n \"ha\": 1333,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 493\r\n },\r\n \"<\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"=\": {\r\n \"xMin\": 124,\r\n \"xMax\": 1020,\r\n \"yMin\": 277,\r\n \"yMax\": 925,\r\n \"ha\": 648,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 1144\r\n },\r\n \">\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"?\": {\r\n \"xMin\": 76,\r\n \"xMax\": 782,\r\n \"yMin\": -24,\r\n \"yMax\": 1498,\r\n \"ha\": 1522,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 872\r\n },\r\n \"@\": {\r\n \"xMin\": 91.72000000000001,\r\n \"xMax\": 1680.1678341637535,\r\n \"yMin\": -272,\r\n \"yMax\": 1366,\r\n \"ha\": 1638,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1772\r\n },\r\n \"A\": {\r\n \"xMin\": 53,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1401\r\n },\r\n \"B\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1303\r\n },\r\n \"C\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1272,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1369\r\n },\r\n \"D\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1380,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1471\r\n },\r\n \"E\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1081,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1189\r\n },\r\n \"F\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1061,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"G\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1333,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1463\r\n },\r\n \"H\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1331,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1500\r\n },\r\n \"I\": {\r\n \"xMin\": 173,\r\n \"xMax\": 412,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 173,\r\n \"advanceWidth\": 585\r\n },\r\n \"J\": {\r\n \"xMin\": 21,\r\n \"xMax\": 430,\r\n \"yMin\": -314,\r\n \"yMax\": 1426,\r\n \"ha\": 1740,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 603\r\n },\r\n \"K\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1310,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1362\r\n },\r\n \"L\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1086,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"M\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1798,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1920\r\n },\r\n \"N\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1336,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1505\r\n },\r\n \"O\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"P\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1194,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1271\r\n },\r\n \"Q\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -341,\r\n \"yMax\": 1453,\r\n \"ha\": 1794,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"R\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1304,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1356\r\n },\r\n \"S\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1110,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1183\r\n },\r\n \"T\": {\r\n \"xMin\": 58,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1285\r\n },\r\n \"U\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1306,\r\n \"yMin\": -24,\r\n \"yMax\": 1426,\r\n \"ha\": 1450,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1459\r\n },\r\n \"V\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1338,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1390\r\n },\r\n \"W\": {\r\n \"xMin\": 50,\r\n \"xMax\": 2010,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 2060\r\n },\r\n \"X\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1316,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1380\r\n },\r\n \"Y\": {\r\n \"xMin\": 50,\r\n \"xMax\": 1278,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1325\r\n },\r\n \"Z\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1258,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1354\r\n },\r\n \"[\": {\r\n \"xMin\": 177,\r\n \"xMax\": 733,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 770\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \"]\": {\r\n \"xMin\": 37,\r\n \"xMax\": 593,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 770\r\n },\r\n \"^\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1122,\r\n \"yMin\": 744,\r\n \"yMax\": 1373,\r\n \"ha\": 629,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1234\r\n },\r\n \"_\": {\r\n \"xMin\": -20,\r\n \"xMax\": 844,\r\n \"yMin\": -272,\r\n \"yMax\": -96,\r\n \"ha\": 176,\r\n \"leftSideBearing\": -20,\r\n \"advanceWidth\": 824\r\n },\r\n \"`\": {\r\n \"xMin\": 272,\r\n \"xMax\": 765,\r\n \"yMin\": 1146,\r\n \"yMax\": 1556,\r\n \"ha\": 410,\r\n \"leftSideBearing\": 272,\r\n \"advanceWidth\": 1200\r\n },\r\n \"a\": {\r\n \"xMin\": 94,\r\n \"xMax\": 922,\r\n \"yMin\": -21,\r\n \"yMax\": 1018,\r\n \"ha\": 1039,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1053\r\n },\r\n \"b\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"c\": {\r\n \"xMin\": 89,\r\n \"xMax\": 900,\r\n \"yMin\": -20,\r\n \"yMax\": 1018,\r\n \"ha\": 1038,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 982\r\n },\r\n \"d\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1161\r\n },\r\n \"e\": {\r\n \"xMin\": 89,\r\n \"xMax\": 972,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1054\r\n },\r\n \"f\": {\r\n \"xMin\": 44,\r\n \"xMax\": 794,\r\n \"yMin\": 0,\r\n \"yMax\": 1492,\r\n \"ha\": 1492,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 801\r\n },\r\n \"g\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1050,\r\n \"yMin\": -407,\r\n \"yMax\": 1018,\r\n \"ha\": 1425,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1089\r\n },\r\n \"h\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"i\": {\r\n \"xMin\": 119,\r\n \"xMax\": 408,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 530\r\n },\r\n \"j\": {\r\n \"xMin\": 0,\r\n \"xMax\": 409,\r\n \"yMin\": -391,\r\n \"yMax\": 1472,\r\n \"ha\": 1863,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 526\r\n },\r\n \"k\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1075,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1108\r\n },\r\n \"l\": {\r\n \"xMin\": 154,\r\n \"xMax\": 368,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 522\r\n },\r\n \"m\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1613,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1745\r\n },\r\n \"n\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"o\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1106,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1195\r\n },\r\n \"p\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"q\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1172\r\n },\r\n \"r\": {\r\n \"xMin\": 154,\r\n \"xMax\": 766,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 808\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 839,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 918\r\n },\r\n \"t\": {\r\n \"xMin\": 44,\r\n \"xMax\": 774,\r\n \"yMin\": -24,\r\n \"yMax\": 1359,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 829\r\n },\r\n \"u\": {\r\n \"xMin\": 132,\r\n \"xMax\": 990,\r\n \"yMin\": -24,\r\n \"yMax\": 1002,\r\n \"ha\": 1026,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1126\r\n },\r\n \"v\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1006,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1048\r\n },\r\n \"w\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1581,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1623\r\n },\r\n \"x\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1043,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1090\r\n },\r\n \"y\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1016,\r\n \"yMin\": -391,\r\n \"yMax\": 1002,\r\n \"ha\": 1393,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1058\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 940,\r\n \"yMin\": 0,\r\n \"yMax\": 994,\r\n \"ha\": 994,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1007\r\n },\r\n \"{\": {\r\n \"xMin\": 28,\r\n \"xMax\": 802,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 838\r\n },\r\n \"|\": {\r\n \"xMin\": 177,\r\n \"xMax\": 365,\r\n \"yMin\": -316,\r\n \"yMax\": 1564,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 542\r\n },\r\n \"}\": {\r\n \"xMin\": 36,\r\n \"xMax\": 810,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 838\r\n },\r\n \"~\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 431,\r\n \"yMax\": 774,\r\n \"ha\": 343,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n }\r\n },\r\n \"resolution\": 2000,\r\n \"generatedOn\": \"2020-10-16T17:54:48.712Z\"\r\n};","export const Concert_OneFont = {\r\n smufl: false,\r\n name: \"ConcertOne\",\r\n spacing: 50,\r\n fontFamily: \"ConcertOne\",\r\n description: \"Concert One, a sans-serif rounded title font\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1016,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1118\r\n },\r\n \"1\": {\r\n \"xMin\": 58,\r\n \"xMax\": 664,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 786\r\n },\r\n \"2\": {\r\n \"xMin\": 100,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 1060\r\n },\r\n \"3\": {\r\n \"xMin\": 54,\r\n \"xMax\": 946,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 1026\r\n },\r\n \"4\": {\r\n \"xMin\": 74,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1002\r\n },\r\n \"5\": {\r\n \"xMin\": 76,\r\n \"xMax\": 968,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 1026\r\n },\r\n \"6\": {\r\n \"xMin\": 122,\r\n \"xMax\": 948,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 992\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1012\r\n },\r\n \"8\": {\r\n \"xMin\": 90,\r\n \"xMax\": 930,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1020\r\n },\r\n \"9\": {\r\n \"xMin\": 46,\r\n \"xMax\": 870,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 992\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 798\r\n },\r\n \"!\": {\r\n \"xMin\": 226,\r\n \"xMax\": 556,\r\n \"yMin\": -2,\r\n \"yMax\": 1398,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 226,\r\n \"advanceWidth\": 808\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 110,\r\n \"xMax\": 766,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 898\r\n },\r\n \"#\": {\r\n \"xMin\": 118,\r\n \"xMax\": 1170,\r\n \"yMin\": 160,\r\n \"yMax\": 1222,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1268\r\n },\r\n \"$\": {\r\n \"xMin\": 142,\r\n \"xMax\": 904,\r\n \"yMin\": 6,\r\n \"yMax\": 1384,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1052\r\n },\r\n \"%\": {\r\n \"xMin\": 98,\r\n \"xMax\": 1384,\r\n \"yMin\": -6,\r\n \"yMax\": 1400,\r\n \"ha\": 1406,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 1484\r\n },\r\n \"&\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1178,\r\n \"yMin\": -2,\r\n \"yMax\": 1408,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1296\r\n },\r\n \"'\": {\r\n \"xMin\": 130,\r\n \"xMax\": 374,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 130,\r\n \"advanceWidth\": 522\r\n },\r\n \"(\": {\r\n \"xMin\": 240,\r\n \"xMax\": 814,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 888\r\n },\r\n \")\": {\r\n \"xMin\": 74,\r\n \"xMax\": 648,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 888\r\n },\r\n \"*\": {\r\n \"xMin\": 110,\r\n \"xMax\": 1084,\r\n \"yMin\": 164,\r\n \"yMax\": 1260,\r\n \"ha\": 1096,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 1194\r\n },\r\n \"+\": {\r\n \"xMin\": 190,\r\n \"xMax\": 920,\r\n \"yMin\": 356,\r\n \"yMax\": 1086,\r\n \"ha\": 730,\r\n \"leftSideBearing\": 190,\r\n \"advanceWidth\": 1102\r\n },\r\n \",\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": -164,\r\n \"yMax\": 330,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"-\": {\r\n \"xMin\": 108,\r\n \"xMax\": 838,\r\n \"yMin\": 480,\r\n \"yMax\": 724,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 966\r\n },\r\n \".\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 330,\r\n \"ha\": 330,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"/\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \":\": {\r\n \"xMin\": 122,\r\n \"xMax\": 454,\r\n \"yMin\": 0,\r\n \"yMax\": 854,\r\n \"ha\": 854,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 572\r\n },\r\n \";\": {\r\n \"xMin\": 120,\r\n \"xMax\": 452,\r\n \"yMin\": -166,\r\n \"yMax\": 852,\r\n \"ha\": 1018,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 596\r\n },\r\n \"<\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"=\": {\r\n \"xMin\": 180,\r\n \"xMax\": 914,\r\n \"yMin\": 290,\r\n \"yMax\": 926,\r\n \"ha\": 636,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 1102\r\n },\r\n \">\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"?\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1012,\r\n \"yMin\": 0,\r\n \"yMax\": 1420,\r\n \"ha\": 1420,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1122\r\n },\r\n \"@\": {\r\n \"xMin\": 132,\r\n \"xMax\": 1306,\r\n \"yMin\": -96,\r\n \"yMax\": 1078,\r\n \"ha\": 1174,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1494\r\n },\r\n \"A\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1030,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1104\r\n },\r\n \"B\": {\r\n \"xMin\": 120,\r\n \"xMax\": 1042,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1104\r\n },\r\n \"C\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1046,\r\n \"yMin\": -6,\r\n \"yMax\": 1408,\r\n \"ha\": 1414,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1110\r\n },\r\n \"D\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1008,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1094\r\n },\r\n \"E\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 986\r\n },\r\n \"F\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 938\r\n },\r\n \"G\": {\r\n \"xMin\": 106,\r\n \"xMax\": 1072,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 106,\r\n \"advanceWidth\": 1156\r\n },\r\n \"H\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1028,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1166\r\n },\r\n \"I\": {\r\n \"xMin\": 168,\r\n \"xMax\": 500,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 666\r\n },\r\n \"J\": {\r\n \"xMin\": 46,\r\n \"xMax\": 980,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 1126\r\n },\r\n \"K\": {\r\n \"xMin\": 140,\r\n \"xMax\": 1064,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 1142\r\n },\r\n \"L\": {\r\n \"xMin\": 178,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 178,\r\n \"advanceWidth\": 968\r\n },\r\n \"M\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1430,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1594\r\n },\r\n \"N\": {\r\n \"xMin\": 148,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 148,\r\n \"advanceWidth\": 1360\r\n },\r\n \"O\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1026,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1128\r\n },\r\n \"P\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1082\r\n },\r\n \"Q\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1114,\r\n \"yMin\": -110,\r\n \"yMax\": 1408,\r\n \"ha\": 1518,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1156\r\n },\r\n \"R\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1062,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1142\r\n },\r\n \"S\": {\r\n \"xMin\": 88,\r\n \"xMax\": 950,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1014\r\n },\r\n \"T\": {\r\n \"xMin\": 10,\r\n \"xMax\": 974,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 982\r\n },\r\n \"U\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1070,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1208\r\n },\r\n \"V\": {\r\n \"xMin\": 16,\r\n \"xMax\": 992,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 16,\r\n \"advanceWidth\": 1000\r\n },\r\n \"W\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1658,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1666\r\n },\r\n \"X\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1094,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1146\r\n },\r\n \"Y\": {\r\n \"xMin\": -14,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": -14,\r\n \"advanceWidth\": 1000\r\n },\r\n \"Z\": {\r\n \"xMin\": 70,\r\n \"xMax\": 982,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1042\r\n },\r\n \"[\": {\r\n \"xMin\": 240,\r\n \"xMax\": 736,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 836\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \"]\": {\r\n \"xMin\": 140,\r\n \"xMax\": 636,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 836\r\n },\r\n \"^\": {\r\n \"xMin\": 174,\r\n \"xMax\": 782,\r\n \"yMin\": 762,\r\n \"yMax\": 1156,\r\n \"ha\": 394,\r\n \"leftSideBearing\": 174,\r\n \"advanceWidth\": 976\r\n },\r\n \"_\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1254,\r\n \"yMin\": 2,\r\n \"yMax\": 246,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1408\r\n },\r\n \"`\": {\r\n \"xMin\": 132,\r\n \"xMax\": 578,\r\n \"yMin\": 1102,\r\n \"yMax\": 1452,\r\n \"ha\": 350,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 698\r\n },\r\n \"a\": {\r\n \"xMin\": 84,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1020\r\n },\r\n \"b\": {\r\n \"xMin\": 120,\r\n \"xMax\": 948,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1042\r\n },\r\n \"c\": {\r\n \"xMin\": 84,\r\n \"xMax\": 930,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1000\r\n },\r\n \"d\": {\r\n \"xMin\": 82,\r\n \"xMax\": 910,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1020\r\n },\r\n \"e\": {\r\n \"xMin\": 92,\r\n \"xMax\": 936,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1020\r\n },\r\n \"f\": {\r\n \"xMin\": 0,\r\n \"xMax\": 724,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 750\r\n },\r\n \"g\": {\r\n \"xMin\": 92,\r\n \"xMax\": 922,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1042\r\n },\r\n \"h\": {\r\n \"xMin\": 122,\r\n \"xMax\": 956,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1042\r\n },\r\n \"i\": {\r\n \"xMin\": 154,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 626\r\n },\r\n \"j\": {\r\n \"xMin\": -44,\r\n \"xMax\": 480,\r\n \"yMin\": -400,\r\n \"yMax\": 1402,\r\n \"ha\": 1802,\r\n \"leftSideBearing\": -44,\r\n \"advanceWidth\": 626\r\n },\r\n \"k\": {\r\n \"xMin\": 150,\r\n \"xMax\": 920,\r\n \"yMin\": -2,\r\n \"yMax\": 1400,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1014\r\n },\r\n \"l\": {\r\n \"xMin\": 140,\r\n \"xMax\": 444,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 586\r\n },\r\n \"m\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1486,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1604\r\n },\r\n \"n\": {\r\n \"xMin\": 132,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1082\r\n },\r\n \"o\": {\r\n \"xMin\": 78,\r\n \"xMax\": 912,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 990\r\n },\r\n \"p\": {\r\n \"xMin\": 132,\r\n \"xMax\": 960,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1062\r\n },\r\n \"q\": {\r\n \"xMin\": 104,\r\n \"xMax\": 932,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1062\r\n },\r\n \"r\": {\r\n \"xMin\": 132,\r\n \"xMax\": 770,\r\n \"yMin\": 0,\r\n \"yMax\": 998,\r\n \"ha\": 998,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 792\r\n },\r\n \"s\": {\r\n \"xMin\": 86,\r\n \"xMax\": 836,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 910\r\n },\r\n \"t\": {\r\n \"xMin\": 60,\r\n \"xMax\": 786,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 870\r\n },\r\n \"u\": {\r\n \"xMin\": 118,\r\n \"xMax\": 952,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1076\r\n },\r\n \"v\": {\r\n \"xMin\": 36,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 876\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1372,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1396\r\n },\r\n \"x\": {\r\n \"xMin\": 84,\r\n \"xMax\": 860,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 938\r\n },\r\n \"y\": {\r\n \"xMin\": 20,\r\n \"xMax\": 892,\r\n \"yMin\": -400,\r\n \"yMax\": 1004,\r\n \"ha\": 1404,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 916\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 916\r\n },\r\n \"{\": {\r\n \"xMin\": 188,\r\n \"xMax\": 932,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 1012\r\n },\r\n \"|\": {\r\n \"xMin\": 180,\r\n \"xMax\": 424,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 604\r\n },\r\n \"}\": {\r\n \"xMin\": 80,\r\n \"xMax\": 824,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1012\r\n },\r\n \"~\": {\r\n \"xMin\": 112,\r\n \"xMax\": 802,\r\n \"yMin\": 84,\r\n \"yMax\": 398,\r\n \"ha\": 314,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 918\r\n }\r\n },\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-16T18:00:03.708Z\"\r\n};","export const MerriweatherFont = {\r\n name: \"Merriweather-Regular\",\r\n smufl: false,\r\n spacing: 50,\r\n fontFamily: \"Merriweather\",\r\n description: \"Merriweather, a serif web font by Sorkin Type\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 62,\r\n \"xMax\": 582,\r\n \"yMin\": -9,\r\n \"yMax\": 631,\r\n \"ha\": 640,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 643\r\n },\r\n \"1\": {\r\n \"xMin\": 39,\r\n \"xMax\": 419,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 440\r\n },\r\n \"2\": {\r\n \"xMin\": 47,\r\n \"xMax\": 565,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 598\r\n },\r\n \"3\": {\r\n \"xMin\": 57,\r\n \"xMax\": 512,\r\n \"yMin\": -161,\r\n \"yMax\": 632,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 560\r\n },\r\n \"4\": {\r\n \"xMin\": 37,\r\n \"xMax\": 625,\r\n \"yMin\": -161,\r\n \"yMax\": 680,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 644\r\n },\r\n \"5\": {\r\n \"xMin\": 91,\r\n \"xMax\": 527,\r\n \"yMin\": -161,\r\n \"yMax\": 643,\r\n \"ha\": 804,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 594\r\n },\r\n \"6\": {\r\n \"xMin\": 76,\r\n \"xMax\": 592,\r\n \"yMin\": -11,\r\n \"yMax\": 786,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 664\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 546,\r\n \"yMin\": -173,\r\n \"yMax\": 624,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 588\r\n },\r\n \"8\": {\r\n \"xMin\": 65,\r\n \"xMax\": 572,\r\n \"yMin\": -10,\r\n \"yMax\": 752,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 633\r\n },\r\n \"9\": {\r\n \"xMin\": 70,\r\n \"xMax\": 588,\r\n \"yMin\": -167,\r\n \"yMax\": 632,\r\n \"ha\": 799,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 660\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 237\r\n },\r\n \"!\": {\r\n \"xMin\": 107,\r\n \"xMax\": 248,\r\n \"yMin\": -10,\r\n \"yMax\": 883,\r\n \"ha\": 893,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 354\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 124,\r\n \"xMax\": 489,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 612\r\n },\r\n \"#\": {\r\n \"xMin\": 81,\r\n \"xMax\": 677,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 81,\r\n \"advanceWidth\": 744\r\n },\r\n \"$\": {\r\n \"xMin\": 94,\r\n \"xMax\": 575,\r\n \"yMin\": -126,\r\n \"yMax\": 860,\r\n \"ha\": 986,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 659\r\n },\r\n \"%\": {\r\n \"xMin\": 53,\r\n \"xMax\": 981,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1037\r\n },\r\n \"&\": {\r\n \"xMin\": 60,\r\n \"xMax\": 739,\r\n \"yMin\": -9,\r\n \"yMax\": 752,\r\n \"ha\": 761,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 756\r\n },\r\n \"'\": {\r\n \"xMin\": 124,\r\n \"xMax\": 230,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 353\r\n },\r\n \"(\": {\r\n \"xMin\": 67,\r\n \"xMax\": 360,\r\n \"yMin\": -184,\r\n \"yMax\": 828,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 430\r\n },\r\n \")\": {\r\n \"xMin\": 70,\r\n \"xMax\": 363,\r\n \"yMin\": -183,\r\n \"yMax\": 829,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 430\r\n },\r\n \"*\": {\r\n \"xMin\": 76,\r\n \"xMax\": 568,\r\n \"yMin\": 310,\r\n \"yMax\": 823,\r\n \"ha\": 513,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 643\r\n },\r\n \"+\": {\r\n \"xMin\": 105,\r\n \"xMax\": 556,\r\n \"yMin\": 84,\r\n \"yMax\": 547,\r\n \"ha\": 463,\r\n \"leftSideBearing\": 105,\r\n \"advanceWidth\": 661\r\n },\r\n \",\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 150,\r\n \"ha\": 374,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 335\r\n },\r\n \"-\": {\r\n \"xMin\": 112,\r\n \"xMax\": 516,\r\n \"yMin\": 284,\r\n \"yMax\": 357,\r\n \"ha\": 73,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 628\r\n },\r\n \".\": {\r\n \"xMin\": 63,\r\n \"xMax\": 202,\r\n \"yMin\": -10,\r\n \"yMax\": 127,\r\n \"ha\": 137,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 265\r\n },\r\n \"/\": {\r\n \"xMin\": 36,\r\n \"xMax\": 394,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 431\r\n },\r\n \":\": {\r\n \"xMin\": 102,\r\n \"xMax\": 240,\r\n \"yMin\": -10,\r\n \"yMax\": 539,\r\n \"ha\": 549,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 344\r\n },\r\n \";\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 539,\r\n \"ha\": 763,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 344\r\n },\r\n \"<\": {\r\n \"xMin\": 82,\r\n \"xMax\": 555,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 669\r\n },\r\n \"=\": {\r\n \"xMin\": 102,\r\n \"xMax\": 552,\r\n \"yMin\": 127,\r\n \"yMax\": 474,\r\n \"ha\": 347,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 653\r\n },\r\n \">\": {\r\n \"xMin\": 114,\r\n \"xMax\": 587,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 669\r\n },\r\n \"?\": {\r\n \"xMin\": 42,\r\n \"xMax\": 452,\r\n \"yMin\": -10,\r\n \"yMax\": 906,\r\n \"ha\": 916,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 487\r\n },\r\n \"@\": {\r\n \"xMin\": 93,\r\n \"xMax\": 977,\r\n \"yMin\": -253,\r\n \"yMax\": 760,\r\n \"ha\": 1013,\r\n \"leftSideBearing\": 93,\r\n \"advanceWidth\": 1078\r\n },\r\n \"A\": {\r\n \"xMin\": -13,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": -13,\r\n \"advanceWidth\": 692\r\n },\r\n \"B\": {\r\n \"xMin\": 46,\r\n \"xMax\": 649,\r\n \"yMin\": -6,\r\n \"yMax\": 751,\r\n \"ha\": 757,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 685\r\n },\r\n \"C\": {\r\n \"xMin\": 33,\r\n \"xMax\": 617,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 653\r\n },\r\n \"D\": {\r\n \"xMin\": 46,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 751,\r\n \"ha\": 759,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 758\r\n },\r\n \"E\": {\r\n \"xMin\": 46,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 651\r\n },\r\n \"F\": {\r\n \"xMin\": 43,\r\n \"xMax\": 588,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 619\r\n },\r\n \"G\": {\r\n \"xMin\": 43,\r\n \"xMax\": 721,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 740\r\n },\r\n \"H\": {\r\n \"xMin\": 50,\r\n \"xMax\": 777,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 828\r\n },\r\n \"I\": {\r\n \"xMin\": 54,\r\n \"xMax\": 348,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 403\r\n },\r\n \"J\": {\r\n \"xMin\": -6,\r\n \"xMax\": 343,\r\n \"yMin\": -179,\r\n \"yMax\": 743,\r\n \"ha\": 922,\r\n \"leftSideBearing\": -6,\r\n \"advanceWidth\": 381\r\n },\r\n \"K\": {\r\n \"xMin\": 48,\r\n \"xMax\": 727,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 726\r\n },\r\n \"L\": {\r\n \"xMin\": 48,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 634\r\n },\r\n \"M\": {\r\n \"xMin\": 6,\r\n \"xMax\": 984,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 990\r\n },\r\n \"N\": {\r\n \"xMin\": 50,\r\n \"xMax\": 774,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 799\r\n },\r\n \"O\": {\r\n \"xMin\": 34,\r\n \"xMax\": 689,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 722\r\n },\r\n \"P\": {\r\n \"xMin\": 48,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 750,\r\n \"ha\": 750,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 649\r\n },\r\n \"Q\": {\r\n \"xMin\": 36,\r\n \"xMax\": 904,\r\n \"yMin\": -198,\r\n \"yMax\": 751,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 727\r\n },\r\n \"R\": {\r\n \"xMin\": 46,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 704\r\n },\r\n \"S\": {\r\n \"xMin\": 62,\r\n \"xMax\": 556,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 594\r\n },\r\n \"T\": {\r\n \"xMin\": 17,\r\n \"xMax\": 669,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 692\r\n },\r\n \"U\": {\r\n \"xMin\": 24,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 740\r\n },\r\n \"V\": {\r\n \"xMin\": -16,\r\n \"xMax\": 689,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": -16,\r\n \"advanceWidth\": 670\r\n },\r\n \"W\": {\r\n \"xMin\": -19,\r\n \"xMax\": 1019,\r\n \"yMin\": -5,\r\n \"yMax\": 743,\r\n \"ha\": 748,\r\n \"leftSideBearing\": -19,\r\n \"advanceWidth\": 1000\r\n },\r\n \"X\": {\r\n \"xMin\": 7,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 7,\r\n \"advanceWidth\": 712\r\n },\r\n \"Y\": {\r\n \"xMin\": -12,\r\n \"xMax\": 658,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": -12,\r\n \"advanceWidth\": 644\r\n },\r\n \"Z\": {\r\n \"xMin\": 34,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 746,\r\n \"ha\": 746,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 654\r\n },\r\n \"[\": {\r\n \"xMin\": 96,\r\n \"xMax\": 338,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 428\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 30,\r\n \"xMax\": 388,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 431\r\n },\r\n \"]\": {\r\n \"xMin\": 90,\r\n \"xMax\": 332,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 428\r\n },\r\n \"^\": {\r\n \"xMin\": 86,\r\n \"xMax\": 579,\r\n \"yMin\": 133,\r\n \"yMax\": 748,\r\n \"ha\": 615,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 666\r\n },\r\n \"_\": {\r\n \"xMin\": -10,\r\n \"xMax\": 845,\r\n \"yMin\": -183,\r\n \"yMax\": -122,\r\n \"ha\": 61,\r\n \"leftSideBearing\": -10,\r\n \"advanceWidth\": 835\r\n },\r\n \"`\": {\r\n \"xMin\": -7,\r\n \"xMax\": 227,\r\n \"yMin\": 653,\r\n \"yMax\": 884,\r\n \"ha\": 231,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 333\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 536,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 561\r\n },\r\n \"b\": {\r\n \"xMin\": -2,\r\n \"xMax\": 565,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": -2,\r\n \"advanceWidth\": 607\r\n },\r\n \"c\": {\r\n \"xMin\": 33,\r\n \"xMax\": 471,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 513\r\n },\r\n \"d\": {\r\n \"xMin\": 42,\r\n \"xMax\": 586,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 621\r\n },\r\n \"e\": {\r\n \"xMin\": 43,\r\n \"xMax\": 503,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 544\r\n },\r\n \"f\": {\r\n \"xMin\": 31,\r\n \"xMax\": 413,\r\n \"yMin\": 0,\r\n \"yMax\": 828,\r\n \"ha\": 828,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 400\r\n },\r\n \"g\": {\r\n \"xMin\": 41,\r\n \"xMax\": 597,\r\n \"yMin\": -270,\r\n \"yMax\": 571,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 607\r\n },\r\n \"h\": {\r\n \"xMin\": 15,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 659\r\n },\r\n \"i\": {\r\n \"xMin\": 42,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 793,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 333\r\n },\r\n \"j\": {\r\n \"xMin\": -11,\r\n \"xMax\": 238,\r\n \"yMin\": -243,\r\n \"yMax\": 793,\r\n \"ha\": 1036,\r\n \"leftSideBearing\": -11,\r\n \"advanceWidth\": 317\r\n },\r\n \"k\": {\r\n \"xMin\": 20,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 600\r\n },\r\n \"l\": {\r\n \"xMin\": 37,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 333\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 970,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 995\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 664\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 562,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 608\r\n },\r\n \"p\": {\r\n \"xMin\": 29,\r\n \"xMax\": 586,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 628\r\n },\r\n \"q\": {\r\n \"xMin\": 42,\r\n \"xMax\": 597,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 609\r\n },\r\n \"r\": {\r\n \"xMin\": 47,\r\n \"xMax\": 437,\r\n \"yMin\": 0,\r\n \"yMax\": 570,\r\n \"ha\": 570,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 458\r\n },\r\n \"s\": {\r\n \"xMin\": 55,\r\n \"xMax\": 460,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 505\r\n },\r\n \"t\": {\r\n \"xMin\": 31,\r\n \"xMax\": 391,\r\n \"yMin\": -10,\r\n \"yMax\": 699,\r\n \"ha\": 709,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 407\r\n },\r\n \"u\": {\r\n \"xMin\": 36,\r\n \"xMax\": 597,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 632\r\n },\r\n \"v\": {\r\n \"xMin\": -1,\r\n \"xMax\": 575,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 568\r\n },\r\n \"w\": {\r\n \"xMin\": -7,\r\n \"xMax\": 853,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 839\r\n },\r\n \"x\": {\r\n \"xMin\": 6,\r\n \"xMax\": 591,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 595\r\n },\r\n \"y\": {\r\n \"xMin\": -3,\r\n \"xMax\": 571,\r\n \"yMin\": -249,\r\n \"yMax\": 555,\r\n \"ha\": 804,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 572\r\n },\r\n \"z\": {\r\n \"xMin\": 30,\r\n \"xMax\": 518,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 554\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 431,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 508\r\n },\r\n \"|\": {\r\n \"xMin\": 170,\r\n \"xMax\": 252,\r\n \"yMin\": -91,\r\n \"yMax\": 869,\r\n \"ha\": 960,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 422\r\n },\r\n \"}\": {\r\n \"xMin\": 77,\r\n \"xMax\": 450,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 508\r\n },\r\n \"~\": {\r\n \"xMin\": 107,\r\n \"xMax\": 584,\r\n \"yMin\": 218,\r\n \"yMax\": 379,\r\n \"ha\": 161,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 692\r\n }\r\n },\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-10-16T18:04:00.805Z\"\r\n};","export const ArialFont = {\r\n smufl: false,\r\n name: \"Arial\",\r\n spacing: 50,\r\n Description: 'Built-in sans-serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: false,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1041,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"1\": {\r\n \"xMin\": 223,\r\n \"xMax\": 763,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 223,\r\n \"advanceWidth\": 1139\r\n },\r\n \"2\": {\r\n \"xMin\": 61.840001123045234,\r\n \"xMax\": 1031,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1139\r\n },\r\n \"3\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1046,\r\n \"yMin\": -26,\r\n \"yMax\": 1472,\r\n \"ha\": 1498,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"4\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1040,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1139\r\n },\r\n \"5\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1057,\r\n \"yMin\": -25,\r\n \"yMax\": 1446,\r\n \"ha\": 1471,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"6\": {\r\n \"xMin\": 77,\r\n \"xMax\": 1045,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 1139\r\n },\r\n \"7\": {\r\n \"xMin\": 97,\r\n \"xMax\": 1046,\r\n \"yMin\": 0,\r\n \"yMax\": 1447,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 1139\r\n },\r\n \"8\": {\r\n \"xMin\": 83,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 83,\r\n \"advanceWidth\": 1139\r\n },\r\n \"9\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"!\": {\r\n \"xMin\": 176,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 176,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 94,\r\n \"xMax\": 631,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 727\r\n },\r\n \"#\": {\r\n \"xMin\": 21,\r\n \"xMax\": 1113,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 1139\r\n },\r\n \"$\": {\r\n \"xMin\": 73,\r\n \"xMax\": 1043,\r\n \"yMin\": -211,\r\n \"yMax\": 1601,\r\n \"ha\": 1812,\r\n \"leftSideBearing\": 73,\r\n \"advanceWidth\": 1139\r\n },\r\n \"%\": {\r\n \"xMin\": 119,\r\n \"xMax\": 1695,\r\n \"yMin\": -54,\r\n \"yMax\": 1491,\r\n \"ha\": 1545,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 1821\r\n },\r\n \"&\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1319,\r\n \"yMin\": -34,\r\n \"yMax\": 1491,\r\n \"ha\": 1525,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1366\r\n },\r\n \"'\": {\r\n \"xMin\": 90,\r\n \"xMax\": 295,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 391\r\n },\r\n \"(\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 64,\r\n \"xMax\": 725,\r\n \"yMin\": 867,\r\n \"yMax\": 1491,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 797\r\n },\r\n \"+\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 237,\r\n \"yMax\": 1206,\r\n \"ha\": 969,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \",\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 205,\r\n \"ha\": 495,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"-\": {\r\n \"xMin\": 65,\r\n \"xMax\": 618,\r\n \"yMin\": 440,\r\n \"yMax\": 621,\r\n \"ha\": 181,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 186,\r\n \"xMax\": 391,\r\n \"yMin\": 0,\r\n \"yMax\": 205,\r\n \"ha\": 205,\r\n \"leftSideBearing\": 186,\r\n \"advanceWidth\": 569\r\n },\r\n \"/\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 185,\r\n \"xMax\": 390,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 185,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 1062,\r\n \"ha\": 1352,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"=\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 417,\r\n \"yMax\": 1030,\r\n \"ha\": 613,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \">\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"?\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1036,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1139\r\n },\r\n \"@\": {\r\n \"xMin\": 111,\r\n \"xMax\": 2005,\r\n \"yMin\": -431,\r\n \"yMax\": 1493,\r\n \"ha\": 1924,\r\n \"leftSideBearing\": 111,\r\n \"advanceWidth\": 2079\r\n },\r\n \"A\": {\r\n \"xMin\": -3,\r\n \"xMax\": 1369,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 1366\r\n },\r\n \"B\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1257,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1398,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1479\r\n },\r\n \"D\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1370,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 162,\r\n \"xMax\": 1256,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 1366\r\n },\r\n \"F\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1251\r\n },\r\n \"G\": {\r\n \"xMin\": 109,\r\n \"xMax\": 1465,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 109,\r\n \"advanceWidth\": 1593\r\n },\r\n \"H\": {\r\n \"xMin\": 164,\r\n \"xMax\": 1314,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 191,\r\n \"xMax\": 385,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 191,\r\n \"advanceWidth\": 569\r\n },\r\n \"J\": {\r\n \"xMin\": 58.84976474807333,\r\n \"xMax\": 865,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1024\r\n },\r\n \"K\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1362,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"L\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1139\r\n },\r\n \"M\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1551,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1706\r\n },\r\n \"N\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1501,\r\n \"yMin\": -25,\r\n \"yMax\": 1492,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1593\r\n },\r\n \"P\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1277,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Q\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1518,\r\n \"yMin\": -114,\r\n \"yMax\": 1492,\r\n \"ha\": 1606,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1593\r\n },\r\n \"R\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1453,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"S\": {\r\n \"xMin\": 92,\r\n \"xMax\": 1259,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1366\r\n },\r\n \"T\": {\r\n \"xMin\": 48,\r\n \"xMax\": 1210,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1314,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"W\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1910,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1353,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Y\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Z\": {\r\n \"xMin\": 41,\r\n \"xMax\": 1200,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 139,\r\n \"xMax\": 536,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 39,\r\n \"xMax\": 436,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"^\": {\r\n \"xMin\": 54,\r\n \"xMax\": 907,\r\n \"yMin\": 690,\r\n \"yMax\": 1491,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": -31,\r\n \"xMax\": 1162,\r\n \"yMin\": -407,\r\n \"yMax\": -277,\r\n \"ha\": 130,\r\n \"leftSideBearing\": -31,\r\n \"advanceWidth\": 1139\r\n },\r\n \"`\": {\r\n \"xMin\": 89,\r\n \"xMax\": 465,\r\n \"yMin\": 1194,\r\n \"yMax\": 1474,\r\n \"ha\": 280,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1052,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1139\r\n },\r\n \"b\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1055,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1139\r\n },\r\n \"c\": {\r\n \"xMin\": 80,\r\n \"xMax\": 1005,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1024\r\n },\r\n \"d\": {\r\n \"xMin\": 70,\r\n \"xMax\": 991,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1139\r\n },\r\n \"e\": {\r\n \"xMin\": 75,\r\n \"xMax\": 1054,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 1139\r\n },\r\n \"f\": {\r\n \"xMin\": 19,\r\n \"xMax\": 640,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 19,\r\n \"advanceWidth\": 569\r\n },\r\n \"g\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1002,\r\n \"yMin\": -431,\r\n \"yMax\": 1086,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1139\r\n },\r\n \"h\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"i\": {\r\n \"xMin\": 136,\r\n \"xMax\": 316,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 455\r\n },\r\n \"j\": {\r\n \"xMin\": -94,\r\n \"xMax\": 314,\r\n \"yMin\": -431,\r\n \"yMax\": 1466,\r\n \"ha\": 1897,\r\n \"leftSideBearing\": -94,\r\n \"advanceWidth\": 455\r\n },\r\n \"k\": {\r\n \"xMin\": 136,\r\n \"xMax\": 1016,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 131,\r\n \"xMax\": 311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 455\r\n },\r\n \"m\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1574,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1706\r\n },\r\n \"n\": {\r\n \"xMin\": 135,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"o\": {\r\n \"xMin\": 68,\r\n \"xMax\": 1063,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 68,\r\n \"advanceWidth\": 1139\r\n },\r\n \"p\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1057,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"q\": {\r\n \"xMin\": 72,\r\n \"xMax\": 992,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1139\r\n },\r\n \"r\": {\r\n \"xMin\": 133,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 133,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 63,\r\n \"xMax\": 945,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 1024\r\n },\r\n \"t\": {\r\n \"xMin\": 36,\r\n \"xMax\": 554,\r\n \"yMin\": -14,\r\n \"yMax\": 1433,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 131,\r\n \"xMax\": 992,\r\n \"yMin\": -24,\r\n \"yMax\": 1062,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 1139\r\n },\r\n \"v\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1463,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 15,\r\n \"xMax\": 1009,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1006,\r\n \"yMin\": -431,\r\n \"yMax\": 1062,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 40,\r\n \"xMax\": 980,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 1024\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 636,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 684\r\n },\r\n \"|\": {\r\n \"xMin\": 188,\r\n \"xMax\": 345,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 532\r\n },\r\n \"}\": {\r\n \"xMin\": 47,\r\n \"xMax\": 626,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 684\r\n },\r\n \"~\": {\r\n \"xMin\": 87,\r\n \"xMax\": 1110,\r\n \"yMin\": 557,\r\n \"yMax\": 885,\r\n \"ha\": 328,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 1196\r\n }\r\n },\r\n \"fontFamily\": \"Arial\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T18:48:11.823Z\"\r\n};","export const SourceSansProFont = {\r\n smufl: false,\r\n name: \"Sans\",\r\n spacing: 50,\r\n description: \"Open-source Sans font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Sans Pro\",\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-11-01T21:31:30.347Z\",\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 44,\r\n \"xMax\": 453,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"1\": {\r\n \"xMin\": 79,\r\n \"xMax\": 439,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 497\r\n },\r\n \"2\": {\r\n \"xMin\": 36,\r\n \"xMax\": 452,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n },\r\n \"3\": {\r\n \"xMin\": 26,\r\n \"xMax\": 446,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 497\r\n },\r\n \"4\": {\r\n \"xMin\": 17,\r\n \"xMax\": 469,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 497\r\n },\r\n \"5\": {\r\n \"xMin\": 25,\r\n \"xMax\": 449,\r\n \"yMin\": -12,\r\n \"yMax\": 638,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 497\r\n },\r\n \"6\": {\r\n \"xMin\": 48,\r\n \"xMax\": 457,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 497\r\n },\r\n \"7\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"8\": {\r\n \"xMin\": 41,\r\n \"xMax\": 456,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 497\r\n },\r\n \"9\": {\r\n \"xMin\": 40,\r\n \"xMax\": 448,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 497\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 200\r\n },\r\n \"!\": {\r\n \"xMin\": 85,\r\n \"xMax\": 204,\r\n \"yMin\": -12,\r\n \"yMax\": 670,\r\n \"ha\": 682,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 80,\r\n \"xMax\": 344,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 425\r\n },\r\n \"#\": {\r\n \"xMin\": 35,\r\n \"xMax\": 467,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 497\r\n },\r\n \"$\": {\r\n \"xMin\": 52,\r\n \"xMax\": 437,\r\n \"yMin\": -110,\r\n \"yMax\": 748,\r\n \"ha\": 858,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 497\r\n },\r\n \"%\": {\r\n \"xMin\": 35,\r\n \"xMax\": 790,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 824\r\n },\r\n \"&\": {\r\n \"xMin\": 32,\r\n \"xMax\": 594,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 609\r\n },\r\n \"'\": {\r\n \"xMin\": 80,\r\n \"xMax\": 168,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 249\r\n },\r\n \"(\": {\r\n \"xMin\": 82,\r\n \"xMax\": 265,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 303\r\n },\r\n \")\": {\r\n \"xMin\": 38,\r\n \"xMax\": 221,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 303\r\n },\r\n \"*\": {\r\n \"xMin\": 58,\r\n \"xMax\": 360,\r\n \"yMin\": 420,\r\n \"yMax\": 712,\r\n \"ha\": 292,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 418\r\n },\r\n \"+\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 104,\r\n \"yMax\": 556,\r\n \"ha\": 452,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \",\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 114,\r\n \"ha\": 284,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"-\": {\r\n \"xMin\": 41,\r\n \"xMax\": 271,\r\n \"yMin\": 219,\r\n \"yMax\": 282,\r\n \"ha\": 63,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 311\r\n },\r\n \".\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 114,\r\n \"ha\": 126,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \"/\": {\r\n \"xMin\": 10,\r\n \"xMax\": 337,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 350\r\n },\r\n \":\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 475,\r\n \"ha\": 487,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \";\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 475,\r\n \"ha\": 645,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"<\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"=\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 193,\r\n \"yMax\": 468,\r\n \"ha\": 275,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \">\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"?\": {\r\n \"xMin\": 38,\r\n \"xMax\": 377,\r\n \"yMin\": -12,\r\n \"yMax\": 682,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 425\r\n },\r\n \"@\": {\r\n \"xMin\": 51,\r\n \"xMax\": 796,\r\n \"yMin\": -155,\r\n \"yMax\": 646,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 847\r\n },\r\n \"A\": {\r\n \"xMin\": 3,\r\n \"xMax\": 541,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 3,\r\n \"advanceWidth\": 544\r\n },\r\n \"B\": {\r\n \"xMin\": 90,\r\n \"xMax\": 548,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 588\r\n },\r\n \"C\": {\r\n \"xMin\": 52,\r\n \"xMax\": 539,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 571\r\n },\r\n \"D\": {\r\n \"xMin\": 90,\r\n \"xMax\": 564,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 615\r\n },\r\n \"E\": {\r\n \"xMin\": 90,\r\n \"xMax\": 478,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 527\r\n },\r\n \"F\": {\r\n \"xMin\": 90,\r\n \"xMax\": 468,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 494\r\n },\r\n \"G\": {\r\n \"xMin\": 52,\r\n \"xMax\": 550,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 617\r\n },\r\n \"H\": {\r\n \"xMin\": 90,\r\n \"xMax\": 562,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 652\r\n },\r\n \"I\": {\r\n \"xMin\": 90,\r\n \"xMax\": 173,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 263\r\n },\r\n \"J\": {\r\n \"xMin\": 31,\r\n \"xMax\": 393,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 480\r\n },\r\n \"K\": {\r\n \"xMin\": 90,\r\n \"xMax\": 575,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 579\r\n },\r\n \"L\": {\r\n \"xMin\": 90,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 486\r\n },\r\n \"M\": {\r\n \"xMin\": 90,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 727\r\n },\r\n \"N\": {\r\n \"xMin\": 90,\r\n \"xMax\": 557,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 647\r\n },\r\n \"O\": {\r\n \"xMin\": 52,\r\n \"xMax\": 613,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"P\": {\r\n \"xMin\": 90,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 566\r\n },\r\n \"Q\": {\r\n \"xMin\": 52,\r\n \"xMax\": 627,\r\n \"yMin\": -165,\r\n \"yMax\": 668,\r\n \"ha\": 833,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"R\": {\r\n \"xMin\": 90,\r\n \"xMax\": 544,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 569\r\n },\r\n \"S\": {\r\n \"xMin\": 42,\r\n \"xMax\": 495,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 534\r\n },\r\n \"T\": {\r\n \"xMin\": 28,\r\n \"xMax\": 508,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 536\r\n },\r\n \"U\": {\r\n \"xMin\": 87,\r\n \"xMax\": 558,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 645\r\n },\r\n \"V\": {\r\n \"xMin\": 0,\r\n \"xMax\": 515,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 515\r\n },\r\n \"W\": {\r\n \"xMin\": 23,\r\n \"xMax\": 762,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 23,\r\n \"advanceWidth\": 786\r\n },\r\n \"X\": {\r\n \"xMin\": 15,\r\n \"xMax\": 498,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 513\r\n },\r\n \"Y\": {\r\n \"xMin\": -1,\r\n \"xMax\": 477,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 476\r\n },\r\n \"Z\": {\r\n \"xMin\": 45,\r\n \"xMax\": 497,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 539\r\n },\r\n \"[\": {\r\n \"xMin\": 94,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 303\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 14,\r\n \"xMax\": 340,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 350\r\n },\r\n \"]\": {\r\n \"xMin\": 31,\r\n \"xMax\": 209,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"^\": {\r\n \"xMin\": 60,\r\n \"xMax\": 437,\r\n \"yMin\": 284,\r\n \"yMax\": 670,\r\n \"ha\": 386,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 497\r\n },\r\n \"_\": {\r\n \"xMin\": 12,\r\n \"xMax\": 488,\r\n \"yMin\": -126,\r\n \"yMax\": -71,\r\n \"ha\": 55,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 500\r\n },\r\n \"`\": {\r\n \"xMin\": 128,\r\n \"xMax\": 327,\r\n \"yMin\": 573,\r\n \"yMax\": 781,\r\n \"ha\": 208,\r\n \"leftSideBearing\": 128,\r\n \"advanceWidth\": 542\r\n },\r\n \"a\": {\r\n \"xMin\": 52,\r\n \"xMax\": 433,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 504\r\n },\r\n \"b\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 553\r\n },\r\n \"c\": {\r\n \"xMin\": 46,\r\n \"xMax\": 431,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 456\r\n },\r\n \"d\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"e\": {\r\n \"xMin\": 46,\r\n \"xMax\": 458,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 496\r\n },\r\n \"f\": {\r\n \"xMin\": 30,\r\n \"xMax\": 319,\r\n \"yMin\": 0,\r\n \"yMax\": 724,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 292\r\n },\r\n \"g\": {\r\n \"xMin\": 45,\r\n \"xMax\": 492,\r\n \"yMin\": -224,\r\n \"yMax\": 498,\r\n \"ha\": 722,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 504\r\n },\r\n \"h\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 544\r\n },\r\n \"i\": {\r\n \"xMin\": 67,\r\n \"xMax\": 181,\r\n \"yMin\": 0,\r\n \"yMax\": 692,\r\n \"ha\": 692,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 246\r\n },\r\n \"j\": {\r\n \"xMin\": -40,\r\n \"xMax\": 181,\r\n \"yMin\": -217,\r\n \"yMax\": 692,\r\n \"ha\": 909,\r\n \"leftSideBearing\": -40,\r\n \"advanceWidth\": 247\r\n },\r\n \"k\": {\r\n \"xMin\": 82,\r\n \"xMax\": 486,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 495\r\n },\r\n \"l\": {\r\n \"xMin\": 82,\r\n \"xMax\": 216,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 255\r\n },\r\n \"m\": {\r\n \"xMin\": 82,\r\n \"xMax\": 753,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 829\r\n },\r\n \"n\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 547\r\n },\r\n \"o\": {\r\n \"xMin\": 46,\r\n \"xMax\": 496,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 542\r\n },\r\n \"p\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 555\r\n },\r\n \"q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"r\": {\r\n \"xMin\": 82,\r\n \"xMax\": 350,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 347\r\n },\r\n \"s\": {\r\n \"xMin\": 28,\r\n \"xMax\": 387,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 419\r\n },\r\n \"t\": {\r\n \"xMin\": 24,\r\n \"xMax\": 325,\r\n \"yMin\": -12,\r\n \"yMax\": 622,\r\n \"ha\": 634,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 338\r\n },\r\n \"u\": {\r\n \"xMin\": 75,\r\n \"xMax\": 462,\r\n \"yMin\": -12,\r\n \"yMax\": 486,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 544\r\n },\r\n \"v\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 694,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 718\r\n },\r\n \"x\": {\r\n \"xMin\": 14,\r\n \"xMax\": 432,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 446\r\n },\r\n \"y\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": -209,\r\n \"yMax\": 486,\r\n \"ha\": 695,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"z\": {\r\n \"xMin\": 31,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 425\r\n },\r\n \"{\": {\r\n \"xMin\": 34,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 303\r\n },\r\n \"|\": {\r\n \"xMin\": 92,\r\n \"xMax\": 150,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 241\r\n },\r\n \"}\": {\r\n \"xMin\": 31,\r\n \"xMax\": 269,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"~\": {\r\n \"xMin\": 36,\r\n \"xMax\": 461,\r\n \"yMin\": 257,\r\n \"yMax\": 403,\r\n \"ha\": 146,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n }\r\n },\r\n};","export const SourceSerifProFont = {\r\n smufl: false,\r\n name: \"Serif\",\r\n spacing: 50,\r\n description: \"Open-source Serif font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Serif Pro\",\r\n \"resolution\": 1000,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 41,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 500\r\n },\r\n \"1\": {\r\n \"xMin\": 74,\r\n \"xMax\": 445,\r\n \"yMin\": 0,\r\n \"yMax\": 654,\r\n \"ha\": 654,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 500\r\n },\r\n \"2\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 659,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"3\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"4\": {\r\n \"xMin\": 24,\r\n \"xMax\": 484,\r\n \"yMin\": 0,\r\n \"yMax\": 655,\r\n \"ha\": 655,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 500\r\n },\r\n \"5\": {\r\n \"xMin\": 38,\r\n \"xMax\": 458,\r\n \"yMin\": -13,\r\n \"yMax\": 646,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 500\r\n },\r\n \"6\": {\r\n \"xMin\": 40,\r\n \"xMax\": 457,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 500\r\n },\r\n \"7\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 646,\r\n \"ha\": 646,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"8\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"9\": {\r\n \"xMin\": 29,\r\n \"xMax\": 450,\r\n \"yMin\": -20,\r\n \"yMax\": 659,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 500\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 233\r\n },\r\n \"!\": {\r\n \"xMin\": 80,\r\n \"xMax\": 209,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 40,\r\n \"xMax\": 315,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 356\r\n },\r\n \"#\": {\r\n \"xMin\": 25,\r\n \"xMax\": 502,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 526\r\n },\r\n \"$\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": -115,\r\n \"yMax\": 749,\r\n \"ha\": 864,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"%\": {\r\n \"xMin\": 69,\r\n \"xMax\": 792,\r\n \"yMin\": -25,\r\n \"yMax\": 669,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 69,\r\n \"advanceWidth\": 861\r\n },\r\n \"&\": {\r\n \"xMin\": 27,\r\n \"xMax\": 675,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 720\r\n },\r\n \"'\": {\r\n \"xMin\": 40,\r\n \"xMax\": 143,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 183\r\n },\r\n \"(\": {\r\n \"xMin\": 80,\r\n \"xMax\": 314,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 339\r\n },\r\n \")\": {\r\n \"xMin\": 25,\r\n \"xMax\": 259,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 339\r\n },\r\n \"*\": {\r\n \"xMin\": 20,\r\n \"xMax\": 420,\r\n \"yMin\": 363,\r\n \"yMax\": 747,\r\n \"ha\": 384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 439\r\n },\r\n \"+\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 77,\r\n \"yMax\": 577,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \",\": {\r\n \"xMin\": 6,\r\n \"xMax\": 213,\r\n \"yMin\": -224,\r\n \"yMax\": 130,\r\n \"ha\": 354,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"-\": {\r\n \"xMin\": 40,\r\n \"xMax\": 272,\r\n \"yMin\": 218,\r\n \"yMax\": 284,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 312\r\n },\r\n \".\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 130,\r\n \"ha\": 143,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \"/\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \":\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 493,\r\n \"ha\": 506,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \";\": {\r\n \"xMin\": 6,\r\n \"xMax\": 221,\r\n \"yMin\": -224,\r\n \"yMax\": 493,\r\n \"ha\": 717,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"=\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 201,\r\n \"yMax\": 458,\r\n \"ha\": 257,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"?\": {\r\n \"xMin\": 66,\r\n \"xMax\": 350,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 416\r\n },\r\n \"@\": {\r\n \"xMin\": 36,\r\n \"xMax\": 800,\r\n \"yMin\": -155,\r\n \"yMax\": 660,\r\n \"ha\": 815,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 835\r\n },\r\n \"A\": {\r\n \"xMin\": 5,\r\n \"xMax\": 653,\r\n \"yMin\": 0,\r\n \"yMax\": 674,\r\n \"ha\": 674,\r\n \"leftSideBearing\": 5,\r\n \"advanceWidth\": 664\r\n },\r\n \"B\": {\r\n \"xMin\": 44,\r\n \"xMax\": 586,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 629\r\n },\r\n \"C\": {\r\n \"xMin\": 47,\r\n \"xMax\": 592,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 631\r\n },\r\n \"D\": {\r\n \"xMin\": 44,\r\n \"xMax\": 663,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 710\r\n },\r\n \"E\": {\r\n \"xMin\": 44,\r\n \"xMax\": 569,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 603\r\n },\r\n \"F\": {\r\n \"xMin\": 44,\r\n \"xMax\": 549,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 579\r\n },\r\n \"G\": {\r\n \"xMin\": 47,\r\n \"xMax\": 667,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 682\r\n },\r\n \"H\": {\r\n \"xMin\": 44,\r\n \"xMax\": 744,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 789\r\n },\r\n \"I\": {\r\n \"xMin\": 44,\r\n \"xMax\": 327,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 371\r\n },\r\n \"J\": {\r\n \"xMin\": -43,\r\n \"xMax\": 340,\r\n \"yMin\": -163,\r\n \"yMax\": 669,\r\n \"ha\": 832,\r\n \"leftSideBearing\": -43,\r\n \"advanceWidth\": 374\r\n },\r\n \"K\": {\r\n \"xMin\": 44,\r\n \"xMax\": 662,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 667\r\n },\r\n \"L\": {\r\n \"xMin\": 44,\r\n \"xMax\": 552,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 596\r\n },\r\n \"M\": {\r\n \"xMin\": 39,\r\n \"xMax\": 857,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 902\r\n },\r\n \"N\": {\r\n \"xMin\": 39,\r\n \"xMax\": 695,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 735\r\n },\r\n \"O\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"P\": {\r\n \"xMin\": 44,\r\n \"xMax\": 567,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 589\r\n },\r\n \"Q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -216,\r\n \"yMax\": 684,\r\n \"ha\": 900,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"R\": {\r\n \"xMin\": 44,\r\n \"xMax\": 637,\r\n \"yMin\": -10,\r\n \"yMax\": 669,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 651\r\n },\r\n \"S\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"T\": {\r\n \"xMin\": 20,\r\n \"xMax\": 584,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 604\r\n },\r\n \"U\": {\r\n \"xMin\": 39,\r\n \"xMax\": 693,\r\n \"yMin\": -15,\r\n \"yMax\": 669,\r\n \"ha\": 684,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 727\r\n },\r\n \"V\": {\r\n \"xMin\": 15,\r\n \"xMax\": 665,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 674\r\n },\r\n \"W\": {\r\n \"xMin\": 15,\r\n \"xMax\": 953,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 962\r\n },\r\n \"X\": {\r\n \"xMin\": 10,\r\n \"xMax\": 639,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 648\r\n },\r\n \"Y\": {\r\n \"xMin\": 15,\r\n \"xMax\": 623,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 633\r\n },\r\n \"Z\": {\r\n \"xMin\": 20,\r\n \"xMax\": 531,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 551\r\n },\r\n \"[\": {\r\n \"xMin\": 100,\r\n \"xMax\": 291,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 320\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \"]\": {\r\n \"xMin\": 29,\r\n \"xMax\": 220,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 320\r\n },\r\n \"^\": {\r\n \"xMin\": 88,\r\n \"xMax\": 446,\r\n \"yMin\": 208,\r\n \"yMax\": 481,\r\n \"ha\": 273,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 531\r\n },\r\n \"_\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -66,\r\n \"yMax\": 0,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"`\": {\r\n \"xMin\": 75,\r\n \"xMax\": 256,\r\n \"yMin\": 557,\r\n \"yMax\": 758,\r\n \"ha\": 201,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 400\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 503,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 509\r\n },\r\n \"b\": {\r\n \"xMin\": 25,\r\n \"xMax\": 532,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 577\r\n },\r\n \"c\": {\r\n \"xMin\": 42,\r\n \"xMax\": 453,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 488\r\n },\r\n \"d\": {\r\n \"xMin\": 45,\r\n \"xMax\": 551,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 567\r\n },\r\n \"e\": {\r\n \"xMin\": 45,\r\n \"xMax\": 461,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 510\r\n },\r\n \"f\": {\r\n \"xMin\": 34,\r\n \"xMax\": 426,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 354\r\n },\r\n \"g\": {\r\n \"xMin\": 36,\r\n \"xMax\": 495,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 518\r\n },\r\n \"h\": {\r\n \"xMin\": 25,\r\n \"xMax\": 571,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 601\r\n },\r\n \"i\": {\r\n \"xMin\": 29,\r\n \"xMax\": 267,\r\n \"yMin\": 0,\r\n \"yMax\": 726,\r\n \"ha\": 726,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 298\r\n },\r\n \"j\": {\r\n \"xMin\": -83,\r\n \"xMax\": 220,\r\n \"yMin\": -249,\r\n \"yMax\": 726,\r\n \"ha\": 975,\r\n \"leftSideBearing\": -83,\r\n \"advanceWidth\": 277\r\n },\r\n \"k\": {\r\n \"xMin\": 25,\r\n \"xMax\": 547,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 547\r\n },\r\n \"l\": {\r\n \"xMin\": 25,\r\n \"xMax\": 273,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 298\r\n },\r\n \"m\": {\r\n \"xMin\": 34,\r\n \"xMax\": 872,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 901\r\n },\r\n \"n\": {\r\n \"xMin\": 34,\r\n \"xMax\": 576,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 606\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 504,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 549\r\n },\r\n \"p\": {\r\n \"xMin\": 35,\r\n \"xMax\": 538,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 583\r\n },\r\n \"q\": {\r\n \"xMin\": 45,\r\n \"xMax\": 556,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 557\r\n },\r\n \"r\": {\r\n \"xMin\": 34,\r\n \"xMax\": 416,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 423\r\n },\r\n \"s\": {\r\n \"xMin\": 47,\r\n \"xMax\": 395,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 434\r\n },\r\n \"t\": {\r\n \"xMin\": 9,\r\n \"xMax\": 323,\r\n \"yMin\": -13,\r\n \"yMax\": 611,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 325\r\n },\r\n \"u\": {\r\n \"xMin\": 25,\r\n \"xMax\": 549,\r\n \"yMin\": -13,\r\n \"yMax\": 481,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 583\r\n },\r\n \"v\": {\r\n \"xMin\": 0,\r\n \"xMax\": 496,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 505\r\n },\r\n \"w\": {\r\n \"xMin\": 0,\r\n \"xMax\": 754,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 764\r\n },\r\n \"x\": {\r\n \"xMin\": 10,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 526\r\n },\r\n \"y\": {\r\n \"xMin\": 0,\r\n \"xMax\": 512,\r\n \"yMin\": -249,\r\n \"yMax\": 475,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"z\": {\r\n \"xMin\": 29,\r\n \"xMax\": 431,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 456\r\n },\r\n \"{\": {\r\n \"xMin\": 40,\r\n \"xMax\": 314,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 344\r\n },\r\n \"|\": {\r\n \"xMin\": 96,\r\n \"xMax\": 155,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 251\r\n },\r\n \"}\": {\r\n \"xMin\": 30,\r\n \"xMax\": 304,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 344\r\n },\r\n \"~\": {\r\n \"xMin\": 49,\r\n \"xMax\": 482,\r\n \"yMin\": 268,\r\n \"yMax\": 422,\r\n \"ha\": 154,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 531\r\n }\r\n },\r\n \"generatedOn\": \"2020-11-01T21:35:39.674Z\"\r\n};","export const TimesFont = {\r\n smufl: false,\r\n name: \"Times New Roman\",\r\n spacing: 50,\r\n Description: 'Built-in serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: true,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 49,\r\n \"xMax\": 975,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"1\": {\r\n \"xMin\": 227,\r\n \"xMax\": 811,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 227,\r\n \"advanceWidth\": 1024\r\n },\r\n \"2\": {\r\n \"xMin\": 61,\r\n \"xMax\": 965,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \"3\": {\r\n \"xMin\": 88,\r\n \"xMax\": 883,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1024\r\n },\r\n \"4\": {\r\n \"xMin\": 25,\r\n \"xMax\": 967,\r\n \"yMin\": 0,\r\n \"yMax\": 1384,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1024\r\n },\r\n \"5\": {\r\n \"xMin\": 66,\r\n \"xMax\": 898,\r\n \"yMin\": -27,\r\n \"yMax\": 1409,\r\n \"ha\": 1436,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1024\r\n },\r\n \"6\": {\r\n \"xMin\": 70,\r\n \"xMax\": 958,\r\n \"yMin\": -27,\r\n \"yMax\": 1401,\r\n \"ha\": 1428,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1024\r\n },\r\n \"7\": {\r\n \"xMin\": 41,\r\n \"xMax\": 920,\r\n \"yMin\": -16,\r\n \"yMax\": 1356,\r\n \"ha\": 1372,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1024\r\n },\r\n \"8\": {\r\n \"xMin\": 115,\r\n \"xMax\": 911,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 1024\r\n },\r\n \"9\": {\r\n \"xMin\": 61,\r\n \"xMax\": 940,\r\n \"yMin\": -41,\r\n \"yMax\": 1383,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"!\": {\r\n \"xMin\": 266,\r\n \"xMax\": 488,\r\n \"yMin\": -22,\r\n \"yMax\": 1383,\r\n \"ha\": 1405,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 157.2000021972655,\r\n \"xMax\": 678.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 157,\r\n \"advanceWidth\": 836\r\n },\r\n \"#\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1016,\r\n \"yMin\": -1,\r\n \"yMax\": 1356,\r\n \"ha\": 1357,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"$\": {\r\n \"xMin\": 90,\r\n \"xMax\": 936,\r\n \"yMin\": -180,\r\n \"yMax\": 1492,\r\n \"ha\": 1672,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1024\r\n },\r\n \"%\": {\r\n \"xMin\": 125,\r\n \"xMax\": 1581,\r\n \"yMin\": -30,\r\n \"yMax\": 1388,\r\n \"ha\": 1418,\r\n \"leftSideBearing\": 125,\r\n \"advanceWidth\": 1706\r\n },\r\n \"&\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1536,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1593\r\n },\r\n \"'\": {\r\n \"xMin\": 97.20000219726548,\r\n \"xMax\": 273.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 369\r\n },\r\n \"(\": {\r\n \"xMin\": 98,\r\n \"xMax\": 623,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 59,\r\n \"xMax\": 584,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 137.96078522291893,\r\n \"xMax\": 886.039214777081,\r\n \"yMin\": 543,\r\n \"yMax\": 1383,\r\n \"ha\": 840,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 1024\r\n },\r\n \"+\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 2,\r\n \"yMax\": 1034,\r\n \"ha\": 1032,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \",\": {\r\n \"xMin\": 115,\r\n \"xMax\": 399,\r\n \"yMin\": -291,\r\n \"yMax\": 208,\r\n \"ha\": 499,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 512\r\n },\r\n \"-\": {\r\n \"xMin\": 80,\r\n \"xMax\": 584,\r\n \"yMin\": 396,\r\n \"yMax\": 525,\r\n \"ha\": 129,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 143,\r\n \"xMax\": 371,\r\n \"yMin\": -22,\r\n \"yMax\": 205,\r\n \"ha\": 227,\r\n \"leftSideBearing\": 143,\r\n \"advanceWidth\": 512\r\n },\r\n \"/\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 166,\r\n \"xMax\": 394,\r\n \"yMin\": -22,\r\n \"yMax\": 943,\r\n \"ha\": 965,\r\n \"leftSideBearing\": 166,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 164,\r\n \"xMax\": 448,\r\n \"yMin\": -290,\r\n \"yMax\": 943,\r\n \"ha\": 1233,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"=\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 246,\r\n \"yMax\": 791,\r\n \"ha\": 545,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"?\": {\r\n \"xMin\": 139,\r\n \"xMax\": 848,\r\n \"yMin\": -15,\r\n \"yMax\": 1383,\r\n \"ha\": 1398,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 909\r\n },\r\n \"@\": {\r\n \"xMin\": 238,\r\n \"xMax\": 1657,\r\n \"yMin\": -29,\r\n \"yMax\": 1386,\r\n \"ha\": 1415,\r\n \"leftSideBearing\": 238,\r\n \"advanceWidth\": 1886\r\n },\r\n \"A\": {\r\n \"xMin\": 31,\r\n \"xMax\": 1445,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 1479\r\n },\r\n \"B\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1296,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1366\r\n },\r\n \"D\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1403,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"F\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1119,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1139\r\n },\r\n \"G\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1452,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1479\r\n },\r\n \"H\": {\r\n \"xMin\": 39,\r\n \"xMax\": 1438,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 37,\r\n \"xMax\": 642,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 682\r\n },\r\n \"J\": {\r\n \"xMin\": 20,\r\n \"xMax\": 758,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 797\r\n },\r\n \"K\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1479,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"L\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1224,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"M\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1768,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1821\r\n },\r\n \"N\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1450,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1409,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"P\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1110,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1139\r\n },\r\n \"Q\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1435,\r\n \"yMin\": -364.28571588721996,\r\n \"yMax\": 1383,\r\n \"ha\": 1747.28571588722,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"R\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1347,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"S\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1006,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"T\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 29,\r\n \"xMax\": 1444,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1428,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"W\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1906,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 20,\r\n \"xMax\": 1449,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Y\": {\r\n \"xMin\": 45,\r\n \"xMax\": 1441,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Z\": {\r\n \"xMin\": 18,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 180,\r\n \"xMax\": 612,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\\\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 70,\r\n \"xMax\": 502,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 682\r\n },\r\n \"^\": {\r\n \"xMin\": 49,\r\n \"xMax\": 914,\r\n \"yMin\": 608,\r\n \"yMax\": 1355,\r\n \"ha\": 747,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": 0,\r\n \"xMax\": 1024,\r\n \"yMin\": -255,\r\n \"yMax\": -153,\r\n \"ha\": 102,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 1024\r\n },\r\n \"`\": {\r\n \"xMin\": 39,\r\n \"xMax\": 499,\r\n \"yMin\": 1037,\r\n \"yMax\": 1392.509803639748,\r\n \"ha\": 355.50980363974804,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 76,\r\n \"xMax\": 905,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 909\r\n },\r\n \"b\": {\r\n \"xMin\": 6,\r\n \"xMax\": 958,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1024\r\n },\r\n \"c\": {\r\n \"xMin\": 51,\r\n \"xMax\": 843,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"d\": {\r\n \"xMin\": 55,\r\n \"xMax\": 1006,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 1024\r\n },\r\n \"e\": {\r\n \"xMin\": 51,\r\n \"xMax\": 868,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"f\": {\r\n \"xMin\": 41,\r\n \"xMax\": 783,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 682\r\n },\r\n \"g\": {\r\n \"xMin\": 57,\r\n \"xMax\": 963,\r\n \"yMin\": -446,\r\n \"yMax\": 942,\r\n \"ha\": 1388,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1024\r\n },\r\n \"h\": {\r\n \"xMin\": 18,\r\n \"xMax\": 997,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"i\": {\r\n \"xMin\": 33,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 569\r\n },\r\n \"j\": {\r\n \"xMin\": -142,\r\n \"xMax\": 397,\r\n \"yMin\": -446,\r\n \"yMax\": 1399,\r\n \"ha\": 1845,\r\n \"leftSideBearing\": -142,\r\n \"advanceWidth\": 569\r\n },\r\n \"k\": {\r\n \"xMin\": 14,\r\n \"xMax\": 1029,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 39,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1587,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1593\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 993,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"o\": {\r\n \"xMin\": 59,\r\n \"xMax\": 963,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 1024\r\n },\r\n \"p\": {\r\n \"xMin\": 10,\r\n \"xMax\": 964,\r\n \"yMin\": -443,\r\n \"yMax\": 944,\r\n \"ha\": 1387,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"q\": {\r\n \"xMin\": 49,\r\n \"xMax\": 999,\r\n \"yMin\": -443,\r\n \"yMax\": 942.0135137169275,\r\n \"ha\": 1385.0135137169275,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"r\": {\r\n \"xMin\": 10,\r\n \"xMax\": 685,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 713,\r\n \"yMin\": -20,\r\n \"yMax\": 942.0263161804552,\r\n \"ha\": 962.0263161804552,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 797\r\n },\r\n \"t\": {\r\n \"xMin\": 27,\r\n \"xMax\": 572,\r\n \"yMin\": -18,\r\n \"yMax\": 1186,\r\n \"ha\": 1204,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 18,\r\n \"xMax\": 981,\r\n \"yMin\": -21,\r\n \"yMax\": 921,\r\n \"ha\": 942,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"v\": {\r\n \"xMin\": 39,\r\n \"xMax\": 976,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 43,\r\n \"xMax\": 1423,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 35,\r\n \"xMax\": 989,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 29,\r\n \"xMax\": 976,\r\n \"yMin\": -445,\r\n \"yMax\": 921,\r\n \"ha\": 1366,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 55,\r\n \"xMax\": 855,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 909\r\n },\r\n \"{\": {\r\n \"xMin\": 205,\r\n \"xMax\": 717,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 205,\r\n \"advanceWidth\": 983\r\n },\r\n \"|\": {\r\n \"xMin\": 137,\r\n \"xMax\": 273,\r\n \"yMin\": -512,\r\n \"yMax\": 1535,\r\n \"ha\": 2047,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 410\r\n },\r\n \"}\": {\r\n \"xMin\": 266,\r\n \"xMax\": 778,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 983\r\n },\r\n \"~\": {\r\n \"xMin\": 82,\r\n \"xMax\": 1028,\r\n \"yMin\": 380,\r\n \"yMax\": 666,\r\n \"ha\": 286,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1108\r\n }\r\n },\r\n \"fontFamily\": \"Times\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T19:03:12.514Z\"\r\n};","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class ArticulationButtons extends SuiButton {\r\n static get articulationIdMap(): Record {\r\n return {\r\n accentButton: SmoArticulation.articulations.accent,\r\n tenutoButton: SmoArticulation.articulations.tenuto,\r\n staccatoButton: SmoArticulation.articulations.staccato,\r\n marcatoButton: SmoArticulation.articulations.marcato,\r\n pizzicatoButton: SmoArticulation.articulations.pizzicato,\r\n fermataButton: SmoArticulation.articulations.fermata,\r\n mordentButton: SmoOrnament.ornaments.mordent,\r\n mordentInvertedButton: SmoOrnament.ornaments.mordentInverted,\r\n trillButton: SmoOrnament.ornaments.trill,\r\n scoopButton: SmoOrnament.ornaments.scoop,\r\n dropButton: SmoOrnament.ornaments.fall_short,\r\n dropLongButton: SmoOrnament.ornaments.dropLong,\r\n doitButton: SmoOrnament.ornaments.doit,\r\n doitLongButton: SmoOrnament.ornaments.doitLong,\r\n flipButton: SmoOrnament.ornaments.flip,\r\n smearButton: SmoOrnament.ornaments.smear\r\n };\r\n }\r\n static get constructors(): Record {\r\n return {\r\n accentButton: 'SmoArticulation',\r\n tenutoButton: 'SmoArticulation',\r\n staccatoButton: 'SmoArticulation',\r\n marcatoButton: 'SmoArticulation',\r\n pizzicatoButton: 'SmoArticulation',\r\n fermataButton: 'SmoArticulation',\r\n mordentButton: 'SmoOrnament',\r\n mordentInvertedButton: 'SmoOrnament',\r\n trillButton: 'SmoOrnament',\r\n scoopButton: 'SmoOrnament',\r\n dropButton: 'SmoOrnament',\r\n dropLongButton: 'SmoOrnament',\r\n doitButton: 'SmoOrnament',\r\n doitLongButton: 'SmoOrnament',\r\n flipButton: 'SmoOrnament',\r\n smearButton: 'SmoOrnament'\r\n };\r\n }\r\n articulation: string;\r\n ctor: string;\r\n showState: boolean = false;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.articulation = ArticulationButtons.articulationIdMap[this.buttonData.id];\r\n this.ctor = ArticulationButtons.constructors[this.buttonData.id];\r\n }\r\n _toggleArticulation() {\r\n this.showState = !this.showState;\r\n this.view.toggleArticulation(this.articulation, this.ctor);\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleArticulation', null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class BeamButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n operation() {\r\n if (this.buttonData.id === 'breakBeam') {\r\n this.view.toggleBeamGroup();\r\n } else if (this.buttonData.id === 'beamSelections') {\r\n this.view.beamSelections();\r\n } else if (this.buttonData.id === 'toggleBeamDirection') {\r\n this.view.toggleBeamDirection();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.operation();\r\n });\r\n }\r\n }","import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\n\r\n/**\r\n * Button actions are one of the following. \r\n * - collapse... buttons are used to expand/collapse button groups in a ribbon.\r\n * all buttons with these classes have 'ctor' constructor, and perform actions based on \r\n * their bind method\r\n * - menu brings up a modal menu with class 'ctor'\r\n * - modal brings up a modal dialog with class 'ctor'\r\n * - collapseChildMenu brings up a modal menu, and is also collapsable.\r\n */\r\nexport type ButtonAction = 'menu' | 'modal' | 'collapseChild' | 'collapseChildMenu' | 'collapseParent' | 'collapseGrandchild' | 'collapseMore';\r\n/**\r\n * structure of a button object.\r\n * @param leftText - can be used in place of an icon for display\r\n * @param rightText - usually used to represent a keyboard shortcut\r\n * @param classes - to control button display\r\n * @param icon - icon for the button face\r\n * @param action - indicates to the button the action to perform\r\n * @param ctor - the constructor of the button object\r\n * @param group - the logical group, used to group the ribbon buttons\r\n * @param id - unique ID for DOM selector\r\n * @param dataElements - can be used to give buttons in a group basic parameters\r\n */\r\nexport interface ButtonDefinition {\r\n leftText: string,\r\n rightText: string,\r\n classes: string,\r\n icon: string,\r\n action: ButtonAction,\r\n ctor: string,\r\n group: string,\r\n id: string\r\n dataElements?: {\r\n interval: string,\r\n direction: string\r\n }\r\n }\r\n \r\n// Button labels are translatable \r\nexport interface ButtonLabel {\r\n buttonId: string,\r\n buttonText: string\r\n}\r\n\r\n// Buttons perform any variety of functions, so they need access to all the rendering logic\r\n// as well as all the event sources.\r\n// Sometimes they invoke menus which invoke modals, etc.\r\nexport interface SuiButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n }\r\n export abstract class SuiButton {\r\n buttonId: string;\r\n buttonElement: string;\r\n view: SuiScoreViewOperations;\r\n buttonData: ButtonDefinition;\r\n eventSource: BrowserEventSource;\r\n menus: SuiMenuManager;\r\n completeNotifier: CompleteNotifier | null;\r\n constructor(params: SuiButtonParams) {\r\n this.buttonId = params.buttonId;\r\n this.buttonElement = params.buttonElement;\r\n this.view = params.view;\r\n this.buttonData = params.buttonData;\r\n this.eventSource = params.eventSource;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n }\r\n abstract bind(): void;\r\n }\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class ChordButtons extends SuiButton {\r\n interval: number;\r\n direction: number;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.interval = parseInt($(this.buttonElement).attr('data-interval'), 10);\r\n this.direction = parseInt($(this.buttonElement).attr('data-direction'), 10);\r\n }\r\n collapseChord() {\r\n this.view.collapseChord();\r\n }\r\n setInterval() {\r\n this.view.setInterval(this.interval * this.direction);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n if ($(this.buttonElement).attr('id') === 'CollapseChordButton') {\r\n this.collapseChord();\r\n return;\r\n }\r\n this.setInterval();\r\n });\r\n }\r\n}","import { ButtonDefinition, SuiButton, SuiButtonParams } from './button';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiMenuParams } from '../menus/menu';\r\ndeclare var $: any;\r\n\r\n\r\nexport interface SuiCollapsableButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n buttons: ButtonDefinition[]\r\n}\r\n\r\nexport function buttonIsCollapsible(action: string): boolean {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n}\r\n\r\nexport function buttonIsBindable(action: string): boolean {\r\n return ['collapseChildMenu', 'menu', 'modal'].indexOf(action) >= 0;\r\n}\r\nexport class CollapseRibbonControl extends SuiButton {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'keyCommands', 'controller', 'view', 'menus', 'buttonData', 'buttonElement',\r\n 'eventSource'];\r\n }\r\n childButtons: ButtonDefinition[];\r\n constructor(parameters: SuiCollapsableButtonParams) {\r\n super(parameters);\r\n smoSerialize.filteredMerge(CollapseRibbonControl.paramArray, parameters, this);\r\n this.childButtons = parameters.buttons.filter((cb) =>\r\n cb.group === this.buttonData.group &&\r\n buttonIsCollapsible(cb.action)\r\n );\r\n }\r\n _toggleExpand() {\r\n this.childButtons.forEach((cb) => {\r\n const el = $('#' + cb.id);\r\n $(el).toggleClass('collapsed');\r\n $(el).toggleClass('expanded');\r\n });\r\n\r\n $(this.buttonElement).closest('div').toggleClass('expanded');\r\n $(this.buttonElement).toggleClass('expandedChildren');\r\n if ($(this.buttonElement).hasClass('expandedChildren')) {\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).text('');\r\n $(leftSpan).removeClass(this.buttonData.icon);\r\n $(this.buttonElement).addClass('icon icon-circle-left');\r\n } else {\r\n $(this.buttonElement).removeClass('icon-circle-left');\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).addClass(this.buttonData.icon);\r\n $(leftSpan).text(this.buttonData.leftText);\r\n }\r\n // Expand may change music dom, redraw\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n bind() {\r\n $(this.buttonElement).closest('div').addClass('collapseContainer');\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleExpand', null);\r\n this.childButtons.forEach((cb) => {\r\n const ctor = eval('globalThis.Smo.' + cb.ctor);\r\n if ((typeof (ctor) === 'function') && this.completeNotifier) {\r\n const el = $('#' + cb.id);\r\n const params: SuiButtonParams = {\r\n ctor: cb.ctor,\r\n buttonId: cb.id,\r\n buttonData: cb,\r\n buttonElement: el,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n eventSource: this.eventSource,\r\n menus: this.menus\r\n }\r\n const btn = new ctor(params);\r\n if (typeof (btn.bind) === 'function') {\r\n btn.bind();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n// ## ExtendedCollapseParent\r\n// Muse-style '...' buttons for less-common operations\r\nexport class ExtendedCollapseParent extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n $(this.buttonElement).closest('.collapseContainer').toggleClass('expanded-more');\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\ndeclare var $: any;\r\n\r\n/**\r\n * These are the quick-buttons that show up on the left of the button ribbon.\r\n * @category SuiButton\r\n */\r\nexport class DisplaySettings extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n if (this.buttonData.id === 'selectPart') {\r\n this.eventSource.bindScoreChangeHandler(this, 'handleScoreChange');\r\n this.enablePartSelection();\r\n }\r\n }\r\n enablePartSelection() {\r\n const partMap = this.view.getPartMap();\r\n const disable = partMap.keys.length < 1;\r\n $(this.buttonElement[0]).prop('disabled', disable);\r\n }\r\n handleScoreChange(ev: any) {\r\n if (this.view.isPartExposed()) {\r\n this.buttonData.rightText = this.view.score.staves[0].partInfo.partName;\r\n } else {\r\n this.buttonData.rightText = 'Select Part';\r\n }\r\n $(this.buttonElement[0]).find('.ribbon-button-hotkey').text(this.buttonData.rightText);\r\n this.enablePartSelection();\r\n }\r\n\r\n refresh() {\r\n this.view.refreshViewport();\r\n }\r\n zoomout() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale *= 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n zoomin() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale = globalLayout.zoomScale / 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n playButton2() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton2() {\r\n this.view.stopPlayer();\r\n }\r\n async selectPart() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n await this.view.renderPromise();\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n this.menus.createMenu('SuiPartSelectionMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class DurationButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.buttonData = parameters.buttonData;\r\n }\r\n setDuration() {\r\n if (this.buttonData.id === 'GrowDuration') {\r\n this.view.batchDurationOperation('doubleDuration');\r\n } else if (this.buttonData.id === 'LessDuration') {\r\n this.view.batchDurationOperation('halveDuration');\r\n } else if (this.buttonData.id === 'GrowDurationDot') {\r\n this.view.batchDurationOperation('dotDuration');\r\n } else if (this.buttonData.id === 'LessDurationDot') {\r\n this.view.batchDurationOperation('undotDuration');\r\n } else if (this.buttonData.id === 'TripletButton') {\r\n this.view.makeTuplet(3);\r\n } else if (this.buttonData.id === 'QuintupletButton') {\r\n this.view.makeTuplet(5);\r\n } else if (this.buttonData.id === 'SeptupletButton') {\r\n this.view.makeTuplet(7);\r\n } else if (this.buttonData.id === 'NoTupletButton') {\r\n this.view.unmakeTuplet();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setDuration();\r\n });\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoBarline, SmoRepeatSymbol } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class MeasureButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n endRepeat() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endRepeat);\r\n }\r\n startRepeat() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.startRepeat);\r\n }\r\n singleBarStart() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.singleBar);\r\n }\r\n singleBarEnd() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.singleBar);\r\n }\r\n doubleBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.doubleBar);\r\n }\r\n endBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endBar);\r\n }\r\n coda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Coda);\r\n }\r\n toCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.ToCoda);\r\n }\r\n segno() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Segno);\r\n }\r\n dsAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlCoda);\r\n }\r\n dcAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlCoda);\r\n }\r\n dsAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlFine);\r\n }\r\n dcAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlFine);\r\n }\r\n fine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Fine);\r\n }\r\n nthEnding() {\r\n this.view.addEnding();\r\n }\r\n handleEvent(event: any, method: string) {\r\n (this as any)[method]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, 'handleEvent', this.buttonData.id);\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SuiOscillator } from '../../render/audio/oscillator';\r\ndeclare var $: any;\r\n\r\nexport class MicrotoneButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n applyButton(el: ButtonDefinition) {\r\n const defs = SmoMicrotone.defaults;\r\n defs.tone = el.id;\r\n const tn = new SmoMicrotone(defs);\r\n this.view.addRemoveMicrotone(tn);\r\n SuiOscillator.playSelectionNow(this.view.tracker.selections[0], this.view.score, 1);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.applyButton(this.buttonData);\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class NavigationButtons extends SuiButton {\r\n static get directionsTrackerMap(): Record {\r\n return {\r\n navLeftButton: 'moveSelectionLeft',\r\n navRightButton: 'moveSelectionRight',\r\n navUpButton: 'moveSelectionUp',\r\n navDownButton: 'moveSelectionDown',\r\n navFastForward: 'moveSelectionRightMeasure',\r\n navRewind: 'moveSelectionLeftMeasure',\r\n navGrowLeft: 'growSelectionLeft',\r\n navGrowRight: 'growSelectionRight'\r\n };\r\n }\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n _moveTracker() {\r\n (this.view.tracker as any)[NavigationButtons.directionsTrackerMap[this.buttonData.id]]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_moveTracker', null);\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { IsPitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport class NoteButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n setPitch() {\r\n if (this.buttonData.id === 'UpNoteButton') {\r\n this.view.transposeSelections(1);\r\n } else if (this.buttonData.id === 'DownNoteButton') {\r\n this.view.transposeSelections(-1);\r\n } else if (this.buttonData.id === 'UpOctaveButton') {\r\n this.view.transposeSelections(12);\r\n } else if (this.buttonData.id === 'DownOctaveButton') {\r\n this.view.transposeSelections(-12);\r\n } else if (this.buttonData.id === 'ToggleAccidental') {\r\n this.view.toggleEnharmonic();\r\n } else if (this.buttonData.id === 'ToggleCourtesy') {\r\n this.view.toggleCourtesyAccidentals();\r\n } else if (this.buttonData.id === 'ToggleRestButton') {\r\n this.view.makeRest();\r\n } else if (this.buttonData.id === 'ToggleSlashButton') {\r\n this.view.toggleSlash();\r\n } else if (this.buttonData.id === 'AddGraceNote') {\r\n this.view.addGraceNote();\r\n } else if (this.buttonData.id === 'SlashGraceNote') {\r\n this.view.slashGraceNotes();\r\n } else if (this.buttonData.id === 'RemoveGraceNote') {\r\n this.view.removeGraceNote();\r\n } else if (this.buttonData.id === 'XNoteHead') {\r\n this.view.setNoteHead('x2');\r\n } else if (this.buttonData.id === 'TriUpNoteHead') {\r\n this.view.setNoteHead('T2');\r\n } else if (this.buttonData.id === 'CircleXNoteHead') {\r\n this.view.setNoteHead('X3');\r\n } else if (this.buttonData.id === 'DiamondNoteHead') {\r\n this.view.setNoteHead('D2');\r\n } else {\r\n if (IsPitchLetter(this.buttonData.rightText)) {\r\n this.view.setPitch(this.buttonData.rightText);\r\n }\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setPitch();\r\n });\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SuiAudioPlayer } from '../../render/audio/player';\r\ndeclare var $: any;\r\n\r\nexport class PlayerButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n playButton() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton() {\r\n this.view.stopPlayer();\r\n }\r\n pauseButton() {\r\n this.view.pausePlayer();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, getDomContainer } from '../../common/htmlHelpers';\r\nimport { ButtonDefinition, ButtonAction } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier, RibbonLayout } from '../common';\r\nexport { RibbonLayout } from '../common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { SuiLibraryDialog } from '../dialogs/library';\r\nimport { SuiTempoDialog } from '../dialogs/tempo';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { ButtonLabel } from './button';\r\nimport { SuiPiano } from '../../render/sui/piano';\r\nimport { CollapseRibbonControl } from './collapsable';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiHelp } from '../help';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SuiModalButtonTypes = 'SuiLibraryDialog' | 'SuiTempoDialog' | 'SuiInstrumentDialog';\r\nexport var SuiModalButtonStrings = ['SuiLibraryDialog', 'SuiTempoDialog', 'SuiInstrumentDialog'];\r\nexport function isModalButtonType(but: string | SuiModalButtonTypes): but is SuiModalButtonTypes {\r\n return SuiModalButtonStrings.indexOf(but) >= 0;\r\n}\r\n\r\n/**\r\n * Parameters for creating the global button ribbon object. The button ribbon supports a \r\n * button panel in 'top' and 'left' areas, with support for R-to-L languages. Button groups \r\n * are collapsible. The content of ribbonButtons determines which buttons show up. \r\n * ribbon layout determines which show up top vs. left\r\n * @param {BrowserEventSource} eventSource - buttons will use this to bind click events\r\n * @param {CompleteNotifier} completeNotifier - buttons that bring up menus and dialogs will pass this to the dialogs\r\n * @param {SuiTracker} tracker - some buttons act on the current selection\r\n * @param {SuiMenuManager} menus - some buttons invoke a menu\r\n * @param {ButtonDefinition[]} - the buttons\r\n * @param {RibbonLayout} ribbons - where the buttons appear\r\n * @see {ButtonDefinition} for how to create/modify buttons\r\n * @see {defaultRibbonLayout} for buttons supported from the demo application\r\n */\r\nexport interface SuiRibbonParams {\r\n config: SmoUiConfiguration\r\n eventSource: BrowserEventSource,\r\n view: SuiScoreViewOperations,\r\n completeNotifier: CompleteNotifier,\r\n tracker: SuiTracker,\r\n menus: SuiMenuManager,\r\n ribbonButtons: ButtonDefinition[],\r\n ribbons: RibbonLayout\r\n}\r\n// ## RibbonButtons\r\n// Render the ribbon buttons based on group, function, and underlying UI handler.\r\n// Also handles UI events.\r\n// ### RibbonButton methods\r\n// ---\r\nexport class RibbonButtons {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'ribbons', 'keyCommands', 'controller', 'menus', 'eventSource', 'view'];\r\n }\r\n static _buttonHtml(containerClass: string, buttonId: string, buttonClass: string, buttonText: string, buttonIcon: string, buttonKey: string) {\r\n const b = buildDom;\r\n const r = b('div').classes(containerClass).append(b('button').attr('id', buttonId).classes(buttonClass).append(\r\n b('span').classes('left-text').append(\r\n b('span').classes('text-span').text(buttonText)).append(\r\n b('span').classes('ribbon-button-text icon ' + buttonIcon))).append(\r\n b('span').classes('ribbon-button-hotkey').text(buttonKey)));\r\n return r.dom();\r\n }\r\n\r\n static translateButtons: ButtonLabel[] = [];\r\n controller: CompleteNotifier;\r\n config: SmoUiConfiguration;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n menus: SuiMenuManager;\r\n ribbons: RibbonLayout;\r\n ribbonButtons: ButtonDefinition[];\r\n collapsables: CollapseRibbonControl[] = [];\r\n collapseChildren: any[] = [];\r\n\r\n constructor(params: SuiRibbonParams) {\r\n this.controller = params.completeNotifier;\r\n this.config = params.config;\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.menus = params.menus;\r\n this.ribbonButtons = params.ribbonButtons;\r\n this.ribbons = params.ribbons;\r\n this.collapsables = [];\r\n this.collapseChildren = [];\r\n }\r\n async _executeButtonModal(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (isModalButtonType(buttonData.ctor)) {\r\n const params = {\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n view: this.view,\r\n ctor: buttonData.ctor,\r\n id: buttonData.id,\r\n startPromise: null,\r\n tracker: this.view.tracker\r\n };\r\n if (buttonData.ctor === 'SuiInstrumentDialog') {\r\n createAndDisplayDialog(SuiInstrumentDialog, params);\r\n } else if (buttonData.ctor === 'SuiLibraryDialog') {\r\n await SuiLibraryDialog.createAndDisplay(params, this.config);\r\n } else {\r\n createAndDisplayDialog(SuiTempoDialog, params);\r\n }\r\n } else if (buttonData.ctor === 'helpModal') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n _executeButtonMenu(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.menus.slashMenuMode(this.controller);\r\n this.menus.createMenu(buttonData.ctor);\r\n }\r\n\r\n async _executeButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (buttonData.action === 'modal') {\r\n this._executeButtonModal(buttonElement, buttonData);\r\n return;\r\n }\r\n if (buttonData.action === 'menu' || buttonData.action === 'collapseChildMenu') {\r\n this._executeButtonMenu(buttonElement, buttonData);\r\n }\r\n }\r\n\r\n _bindButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n _createCollapsibleButtonGroups(selector: string | HTMLElement) {\r\n let containerClass: string = '';\r\n // Now all the button elements have been bound. Join child and parent buttons\r\n // For all the children of a button group, add it to the parent group\r\n this.collapseChildren.forEach((b) => {\r\n containerClass = 'ribbonButtonContainer';\r\n if (b.action === 'collapseGrandchild') {\r\n containerClass = 'ribbonButtonContainerMore';\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml(\r\n containerClass, b.id, b.classes, b.leftText, b.icon, b.rightText);\r\n if (b.dataElements) {\r\n const bkeys = Object.keys(b.dataElements);\r\n bkeys.forEach((bkey) => {\r\n var de = b.dataElements[bkey];\r\n $(buttonHtml).find('button').attr('data-' + bkey, de);\r\n });\r\n }\r\n // Bind the child button actions\r\n const parent = $(selector).find('.collapseContainer[data-group=\"' + b.group + '\"]');\r\n $(parent).append(buttonHtml);\r\n const el = $(selector).find('#' + b.id);\r\n this._bindButton(el, b);\r\n });\r\n\r\n this.collapsables.forEach((cb) => {\r\n // Bind the events of the parent button\r\n cb.bind();\r\n });\r\n }\r\n\r\n static isCollapsible(action: ButtonAction) {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n }\r\n\r\n // ### _createButtonHtml\r\n // For each button, create the html and bind the events based on\r\n // the button's configured action.\r\n _createRibbonHtml(buttonAr: string[], selector: string | HTMLElement) {\r\n let buttonClass = '';\r\n buttonAr.forEach((buttonId) => {\r\n const buttonData = this.ribbonButtons.find((e) =>\r\n e.id === buttonId\r\n );\r\n if (buttonData) {\r\n if (buttonData.leftText) {\r\n RibbonButtons.translateButtons.push({ buttonId: buttonData.id, buttonText: buttonData.leftText });\r\n }\r\n // collapse child is hidden until the parent button is selected, exposing the button group\r\n if (RibbonButtons.isCollapsible(buttonData.action)) {\r\n this.collapseChildren.push(buttonData);\r\n }\r\n if (buttonData.action !== 'collapseChild') {\r\n // else the button has a specific action, such as a menu or dialog, or a parent button\r\n // for translation, add the menu name to the button class\r\n buttonClass = buttonData.classes;\r\n if (buttonData.action === 'menu' || buttonData.action === 'modal') {\r\n buttonClass += ' ' + buttonData.ctor;\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml('ribbonButtonContainer',\r\n buttonData.id, buttonClass, buttonData.leftText, buttonData.icon, buttonData.rightText);\r\n $(buttonHtml).attr('data-group', buttonData.group);\r\n $(selector).append(buttonHtml);\r\n const buttonElement = $('#' + buttonData.id);\r\n // If this is a collabsable button, create it, otherwise bind its execute function.\r\n if (buttonData.action === 'collapseParent') {\r\n $(buttonHtml).addClass('collapseContainer');\r\n // collapseParent\r\n this.collapsables.push(new CollapseRibbonControl({\r\n ctor: buttonData.ctor,\r\n buttons: this.ribbonButtons,\r\n view: this.view,\r\n menus: this.menus,\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n buttonId: buttonData.id,\r\n buttonElement,\r\n buttonData\r\n }));\r\n } else {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n addButton(button: ButtonDefinition, parentElement: string | HTMLElement) {\r\n this.ribbonButtons.push(button);\r\n this.createRibbon([button.id], parentElement);\r\n }\r\n\r\n createRibbon(buttonDataArray: string[], parentElement: string | HTMLElement) {\r\n this._createRibbonHtml(buttonDataArray, parentElement);\r\n this._createCollapsibleButtonGroups(parentElement);\r\n }\r\n\r\n display() {\r\n if (this.config.leftControls) {\r\n const leftControl = getDomContainer(this.config.leftControls);\r\n if (leftControl) {\r\n $(leftControl).html('');\r\n const lbuttons = this.ribbons.left;\r\n this.createRibbon(lbuttons, leftControl);\r\n }\r\n }\r\n if (this.config.topControls) {\r\n const topControl = getDomContainer(this.config.topControls);\r\n if (topControl) {\r\n const tbuttons = this.ribbons.top;\r\n this.createRibbon(tbuttons, topControl); \r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoInstrument } from '../../smo/data/staffModifiers';\r\nimport { Clef } from '../../smo/data/common';\r\n\r\ndeclare var $: any;\r\n\r\nexport class StaveButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n addClef(clef: Clef, clefName: string) {\r\n var instrument: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.instrumentName = clefName;\r\n instrument.keyOffset = 0;\r\n instrument.clef = clef;\r\n this.view.changeInstrument(instrument, this.view.tracker.selections);\r\n }\r\n clefTreble() {\r\n this.addClef('treble', 'Treble Instrument');\r\n }\r\n clefBass() {\r\n this.addClef('bass', 'Bass Instrument');\r\n }\r\n clefAlto() {\r\n this.addClef('alto', 'Alto Instrument');\r\n }\r\n clefTenor() {\r\n this.addClef('tenor', 'Tenor Instrument');\r\n }\r\n clefPercussion() {\r\n this.addClef('percussion', 'Tenor Instrument');\r\n }\r\n _clefMove(index: number) {\r\n this.view.moveStaffUpDown(index);\r\n }\r\n clefMoveUp() {\r\n this._clefMove(-1);\r\n }\r\n clefMoveDown() {\r\n this._clefMove(1);\r\n }\r\n bind() {\r\n const self = this;\r\n $(this.buttonElement).off('click').on('click', () => {\r\n const id = self.buttonData.id;\r\n if (typeof ((this as any)[id]) === 'function') {\r\n (this as any)[id]();\r\n }\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SuiTextBlockDialog } from '../dialogs/textBlock';\r\nimport { SuiLyricDialog } from '../dialogs/lyric';\r\nimport { SuiChordChangeDialog } from '../dialogs/chordChange';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport class TextButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n lyrics() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getTrueLyrics();\r\n const lyric = lyrics.length > 0 ? lyrics[0] : null;\r\n\r\n createAndDisplayDialog(SuiLyricDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'lyricDialog',\r\n ctor: 'SuiLyricDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n // tracker, selection, controller\r\n }\r\n chordChanges() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getChords();\r\n const lyric = lyrics.length > 0 ? null : lyrics[0];\r\n createAndDisplayDialog(SuiChordChangeDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n }\r\n rehearsalMark() {\r\n this.view.toggleRehearsalMark();\r\n }\r\n _invokeMenu(cmd: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n this.menus.createMenu(cmd);\r\n }\r\n\r\n addTextMenu() {\r\n createAndDisplayDialog(SuiTextBlockDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: null\r\n });\r\n }\r\n addDynamicsMenu() {\r\n this._invokeMenu('SuiDynamicsMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class VoiceButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n doAction() {\r\n let voiceIx = 0;\r\n if (this.buttonData.id === 'V2Button') {\r\n voiceIx = 1;\r\n } else if (this.buttonData.id === 'V3Button') {\r\n voiceIx = 2;\r\n } else if (this.buttonData.id === 'V4Button') {\r\n voiceIx = 3;\r\n } else if (this.buttonData.id === 'VXButton') {\r\n this.view.depopulateVoice();\r\n return;\r\n }\r\n this.view.populateVoice(voiceIx);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.doAction();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /ui/dialog/adapter\r\n */\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { DialogDefinition, SuiDialogBase } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\n\r\n/**\r\n * An adapter is the glue logic between UI components and the score view.\r\n * An adapter consists mostly of accessors (get/set) for the component data. The \r\n * components have their initial values set from the adapter get, and changes to components\r\n * result in sets to the adapter. The adapter can then update the score.\r\n * For dialogs that use this pattern,\r\n * the dialog automatically creates the components and binds their values with the \r\n * adapter. \r\n * @method commit - called when OK button of dialog is clicked\r\n * @method cancel - called when cancel button of dialog is clicked\r\n * @method remove - optional. Called when 'remove' button is clicked, for artifacts like dynamics that can be removed.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentAdapter {\r\n view: SuiScoreViewOperations;\r\n constructor(view: SuiScoreViewOperations) {\r\n this.view = view;\r\n }\r\n abstract commit(): Promise;\r\n abstract cancel(): Promise;\r\n remove(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n };\r\n}\r\n\r\n/** \r\n * A dialog that uses the adapter pattern takes the adapter as argument.\r\n * Other than that it's the same as normal dialog parameters\r\n * The adapter type is a generic, so that the specific dialog can reference the \r\n * specific adapter class\r\n * @param ctor constructor for reflection\r\n * @param id ID for dom placement\r\n * @param tracker\r\n * @param completeNotifier UI component to notify when dialog is complete\r\n * @param startProise UI component that notifies us when to display\r\n * @param view\r\n * @param eventSource where to register for KB and mouse events\r\n * @param undoBuffer where to undo things we change\r\n * @param adapter an adapter which has getters and setters for all of the dialog components. The adapter should\r\n * read the values from the actual score, and update the score with the component values.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogAdapterParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer?: UndoBuffer,\r\n // definition: DialogDefinition,\r\n adapter: T\r\n}\r\n\r\n/**\r\n * SuiDialogAdapterBase is the base class for dialogs that use the adapter pattern\r\n * (almost all of them). \r\n * @typeParam T a class that implements the Adapter interface and fulfills the \r\n * adapter data contract, with getters and setters from the components\r\n * @category SuiDialog\r\n */\r\nexport class SuiDialogAdapterBase extends SuiDialogBase {\r\n adapter: T;\r\n constructor(def: DialogDefinition, params: SuiDialogAdapterParams) {\r\n super(def, params);\r\n this.adapter = params.adapter;\r\n }\r\n /**\r\n * Call the components bind() methods to activate them. Also, verify that each \r\n * adapter meets the contract with the components\r\n */\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n // do some runtime validation of the adapter\r\n if (typeof((this.adapter as any)[component.smoName]) === 'undefined') {\r\n throw ('Dialog ' + this.label + ' has component ' + component.smoName + ' but no setter in the adapter ');\r\n }\r\n component.bind();\r\n });\r\n }\r\n /**\r\n * Called before dialog is displayed.\r\n * components that interface (bind) with the adapter are called 'bound' components.\r\n * On initialize, update the component with the score value, as told by the adapter.\r\n */\r\n initialValue() {\r\n this.components.forEach((comp) => {\r\n (comp as any).setValue((this.adapter as any)[comp.smoName]);\r\n });\r\n }\r\n /**\r\n * When a component changes, it notifies the parent dialog. Usually, we just\r\n * proxy the call to the adapter. The specific dialog can override this method if \r\n * something in the UI needs to change as a result of the component state (e.g. \r\n * show or hide another component)\r\n */\r\n changed() {\r\n this.components.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.adapter as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n /**\r\n * If there is any 'saving' to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async commit(): Promise {\r\n await this.adapter.commit();\r\n }\r\n /**\r\n * If there is any undo or restore to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async cancel(): Promise {\r\n await this.adapter.cancel();\r\n }\r\n /**\r\n * For score artifacts that can be removed, \r\n */\r\n async remove() {\r\n await this.adapter.remove();\r\n }\r\n /**\r\n * Binds the main dialog buttons. For OK/Cancel/remove, the logic calls the appropriate \r\n * derived function, which calls the appropriate adapter method, then calls complete()\r\n * to restore the event handling loop to the application\r\n */\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.cancel();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.remove();\r\n this.complete();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiToggleComponent } from './components/toggle';\r\n\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Insert some number of measures\r\n * @category SuiDialog\r\n */\r\nexport class SuiInsertMeasures extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Insert Measures',\r\n elements:\r\n [{\r\n smoName: 'measureCount',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Measures to Insert'\r\n }, {\r\n smoName: 'append',\r\n control: 'SuiToggleComponent',\r\n label: 'Append to Selection'\r\n }],\r\n staticText: []\r\n };\r\n measure: SmoMeasure;\r\n selection: SmoSelection;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiInsertMeasures.dialogElements,\r\n parameters);\r\n this.selection = this.view.tracker.selections[0];\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n this.measure = measure;\r\n if (!this.startPromise) {\r\n this.startPromise = new Promise((resolve) => {\r\n resolve();\r\n });\r\n }\r\n }\r\n async commit() { \r\n await this.view.addMeasures(this.appendCtrl.getValue(), this.measureCountCtrl.getValue());\r\n }\r\n\r\n get measureCountCtrl(): SuiRockerComponent {\r\n return this.cmap.measureCountCtrl as SuiRockerComponent;\r\n }\r\n get appendCtrl(): SuiToggleComponent {\r\n return this.cmap.appendCtrl as SuiToggleComponent;\r\n }\r\n populateInitial() {\r\n this.measureCountCtrl.setValue(1);\r\n }\r\n // noop\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoArpeggio, SmoArpeggioType, isArpeggioType } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiArpeggioAdapter extends SuiComponentAdapter {\r\n arpeggio: SmoArpeggio;\r\n backup: SmoArpeggio;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.arpeggio = new SmoArpeggio({ type: 'none' });\r\n this.backup = new SmoArpeggio({ type: 'none' });\r\n const selections = view.tracker.selections;\r\n if (selections.length && selections[0].note) {\r\n if (selections[0].note.arpeggio) {\r\n this.arpeggio = new SmoArpeggio({ type: selections[0].note.arpeggio.typeString });\r\n }\r\n this.backup = new SmoArpeggio({ type: this.arpeggio.typeString });\r\n }\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addRemoveArpeggio(this.backup.typeString);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get arpeggioType() {\r\n return this.arpeggio.typeString;\r\n }\r\n set arpeggioType(value: SmoArpeggioType) {\r\n if (isArpeggioType(value)) {\r\n this.view.addRemoveArpeggio(value);\r\n this.changed = true;\r\n }\r\n }\r\n}\r\n/**\r\n * export const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n */\r\nexport class SuiScoreArpeggioDialog extends SuiDialogAdapterBase {\r\n /**\r\n * The template used to create the dialog components\r\n */\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Arpeggio', elements:\r\n [{\r\n smoName: 'arpeggioType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Arpeggio Type',\r\n options: [{\r\n value: 'directionless',\r\n label: 'Plain'\r\n }, {\r\n value: 'rasquedo_up',\r\n label: 'Rasquedo Up'\r\n }, {\r\n value: 'rasquedo_down',\r\n label: 'Rasquedo Down'\r\n }, {\r\n value: 'roll_up',\r\n label: 'Roll Up'\r\n }, {\r\n value: 'roll_down',\r\n label: 'Roll Down'\r\n }, {\r\n value: 'brush_up',\r\n label: 'Brush Up'\r\n }, {\r\n value: 'brush_down',\r\n label: 'Brush Down'\r\n }, { \r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreArpeggioDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiArpeggioAdapter(params.view);\r\n super(SuiScoreArpeggioDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPlayerSettings, SmoAudioPlayerType, IsOscillatorType } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiAudioSettingsAdapter extends SuiComponentAdapter {\r\n settings: SmoAudioPlayerSettings;\r\n backup: SmoAudioPlayerSettings;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.settings = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n this.backup = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n }\r\n get enableReverb(): boolean {\r\n return this.settings.reverbEnable;\r\n }\r\n set enableReverb(value: boolean) {\r\n this.settings.reverbEnable = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get playerType(): string {\r\n return this.settings.playerType;\r\n }\r\n set playerType(value: string) {\r\n if (value !== 'sampler') {\r\n this.settings.playerType = 'synthesizer';\r\n } else {\r\n this.settings.playerType = 'sampler';\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get waveform(): string {\r\n return this.settings.waveform;\r\n }\r\n set waveform(value: string) {\r\n if (IsOscillatorType(value)) {\r\n this.settings.waveform = value;\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDelay(): number {\r\n return this.settings.reverbDelay;\r\n }\r\n set reverbDelay(value: number) {\r\n this.settings.reverbDelay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDecay(): number {\r\n return this.settings.reverbDecay;\r\n } \r\n set reverbDecay(value: number) {\r\n this.settings.reverbDecay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n async cancel() {\r\n await this.view.updateAudioSettings(this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiAudioSettingsDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Audio Settings',\r\n elements: [{\r\n smoName: 'enableReverb',\r\n control: 'SuiToggleComponent',\r\n label: 'Enable Reverb'\r\n }, {\r\n smoName: 'playerType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Audio Playback Engine',\r\n options: [{\r\n value: 'sampler', label: 'Sampler'\r\n }, {\r\n value: 'synthesizer', label: 'Analog SoftSynth'\r\n }]\r\n }, {\r\n smoName: 'waveform',\r\n control: 'SuiDropdownComponent',\r\n label: 'Waveform (Synth only)',\r\n options: [{\r\n value: 'sine', label: 'Sine'\r\n }, {\r\n value: 'sawtooth', label: 'sawtooth'\r\n }, {\r\n value: 'square', label: 'square'\r\n }, {\r\n value: 'triangle', label: 'triangle'\r\n }, {\r\n value: 'custom', label: 'custom'\r\n }]\r\n }, {\r\n smoName: 'reverbDelay',\r\n control: 'SuiRockerComponent',\r\n label: 'Delay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }, {\r\n smoName: 'reverbDecay',\r\n control: 'SuiRockerComponent',\r\n label: 'Decay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiAudioSettingsAdapter(params.view);\r\n super(SuiAudioSettingsDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiChordComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport {KeyEvent } from '../../smo/data/common';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n/**\r\n * Dialog for running a chord change editing session.\r\n * @category SuiDialog\r\n */\r\nexport class SuiChordChangeDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Edit Chord Symbol', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Ordinality',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }]\r\n }, {\r\n smoName: 'translateY',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'chordEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiChordComponent',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'chordSymbol',\r\n defaultValue: '',\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Chord Symbol',\r\n startRow: true,\r\n options: [{\r\n value: 'csymDiminished',\r\n label: 'Dim'\r\n }, {\r\n value: 'csymHalfDiminished',\r\n label: 'Half dim'\r\n }, {\r\n value: 'csymDiagonalArrangementSlash',\r\n label: 'Slash'\r\n }, {\r\n value: 'csymMajorSeventh',\r\n label: 'Maj7'\r\n }]\r\n }, {\r\n smoName: 'textPosition',\r\n defaultValue: SuiInlineText.textTypes.normal,\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Text Position',\r\n startRow: true,\r\n options: [{\r\n value: SuiInlineText.textTypes.superScript,\r\n label: 'Superscript'\r\n }, {\r\n value: SuiInlineText.textTypes.subScript,\r\n label: 'Subscript'\r\n }, {\r\n value: SuiInlineText.textTypes.normal,\r\n label: 'Normal'\r\n }]\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'adjustWidth',\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: 'Adjust Note Width',\r\n options: []\r\n }],\r\n staticText: [\r\n { label: 'Edit Chord Symbol' },\r\n { undo: 'Undo Chord Symbols' },\r\n { doneEditing: 'Done Editing Chord Symbols' }\r\n ]\r\n };\r\n lyric: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiChordChangeDialog.dialogElements, parameters);\r\n parameters.ctor = 'SuiChordChangeDialog';\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n }\r\n get chordEditorCtrl(): SuiChordComponent {\r\n return this.cmap.chordEditorCtrl as SuiChordComponent;\r\n }\r\n get chordSymbolCtrl(): SuiDropdownComponent {\r\n return this.cmap.chordSymbolCtrl as SuiDropdownComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get textPositionCtrl(): SuiRockerComponent {\r\n return this.cmap.textPositionCtrl as SuiRockerComponent;\r\n }\r\n get adjustWidthCtrl(): SuiToggleComponent {\r\n return this.cmap.adjustWidthCtrl as SuiToggleComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n changed() {\r\n let val = '';\r\n if (this.chordSymbolCtrl.changeFlag && this.chordEditorCtrl.running) {\r\n val = '@' + this.chordSymbolCtrl.getValue() + '@';\r\n var kv:KeyEvent;\r\n /* type: string, shiftKey: boolean, ctrlKey: boolean, altKey: boolean, key: string, keyCode: string,\r\n code: string*/\r\n this.chordEditorCtrl.evKey({\r\n type: 'keydown',\r\n shiftKey: false,\r\n ctrlKey: false,\r\n altKey: false,\r\n key: val,\r\n code: val,\r\n event: null,\r\n keyCode: '0'\r\n });\r\n // Move focus outside the element so it doesn't intercept keys\r\n this.chordSymbolCtrl.unselect();\r\n }\r\n if (this.translateYCtrl.changeFlag) {\r\n if (this.lyric && this.selector) {\r\n this.lyric.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.lyric);\r\n }\r\n }\r\n if (this.textPositionCtrl.changeFlag) {\r\n this.chordEditorCtrl.setTextType(this.textPositionCtrl.getValue());\r\n $(this.textPositionCtrl._getInputElement())[0].selectedIndex = -1;\r\n $(this.textPositionCtrl._getInputElement()).blur();\r\n }\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setChordFont(fontInfo);\r\n }\r\n if (this.adjustWidthCtrl.changeFlag) {\r\n this.view.score.setChordAdjustWidth(this.adjustWidthCtrl.getValue());\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.selector = selector;\r\n this.lyric = lyric;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n\r\n display() {\r\n super.display();\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.session && this.chordEditorCtrl.session.lyric) {\r\n const lyric = this.chordEditorCtrl.session.lyric;\r\n this.adjustWidthCtrl.setValue(lyric.adjustNoteWidthChord);\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal'\r\n });\r\n }\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n // this.chordEditorCtrl.setView(this.eventSource, this.view);\r\n this.chordEditorCtrl.startEditSession();\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.chordEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.chordEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n\r\n _complete() {\r\n if (this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.endSession();\r\n }\r\n this.view.renderer.setDirty();\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoModifier } from '../../../smo/data/score';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../../eventSource';\r\n/**\r\n * A component is a part of a dialog box that accepts some input.\r\n */\r\ndeclare var $: any;\r\n/**\r\n * Dialogs controls options, like dropdowns\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionOption {\r\n label: string,\r\n value: number | string\r\n}\r\n/**\r\n * DialogDefinition is a JSON-like structure that each dialog has\r\n * to define the components. Specific components can define\r\n * additional params by extending this, these are the basics.\r\n * @param {smoName} - the name the dialog uses to reference it \r\n * @param {control} - constructor of the control\r\n * @param {label} - label of the element, can be translated\r\n * @param {increment} - used by components that have increment arrows\r\n * @param {defaultValue} - thinking of removing this\r\n * @param {dataType} - used to narrow the type by some components\r\n * @param {classes} - can be used in rendering\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n label: string,\r\n startRow?: boolean,\r\n options?: DialogDefinitionOption[]\r\n increment?: number,\r\n defaultValue?: number | string,\r\n dataType?: string,\r\n classes?: string,\r\n}\r\n\r\n/**\r\n * for base component constructors\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiBaseComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentComponent?: SuiComponentParent\r\n}\r\n/**\r\n * components know about their parent dialog via the \r\n * DialogNotifier interface. It allows a component to \r\n * notify parent of changing contents.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiDialogNotifier {\r\n /**\r\n * Called by the component when the state is changed. Dialog\r\n * will then query the component (getValue()) and set the \r\n * correct score value.\r\n */\r\n abstract changed(): void;\r\n /**\r\n * returns the DOM id of the dialog.\r\n */\r\n abstract getId(): string;\r\n /**\r\n * returns the top DOM node for the dialog\r\n */\r\n abstract get dgDom(): any;\r\n /**\r\n * gets the view from the parent\r\n */\r\n abstract getView(): SuiScoreViewOperations;\r\n /**\r\n * gets the 'modifier' from parent dialog, used by \r\n * text editors. Most components won't need this.\r\n */\r\n abstract getModifier(): SmoModifier | null;\r\n /**\r\n * Gets the static text for the current language.\r\n * this is used by components that have different text labels for different states.\r\n */\r\n abstract getStaticText(): Record;\r\n /**\r\n * Used by text editing components that are also event sinks\r\n */\r\n abstract getEventSource(): BrowserEventSource;\r\n}\r\n/**\r\n * base class for Dialog components. Notifies parent \r\n * dialog of state change via `change()`\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentBase {\r\n changeFlag: boolean = false;\r\n css: string;\r\n dialog: SuiDialogNotifier;\r\n id: string;\r\n label: string;\r\n control: string;\r\n smoName: string;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams) {\r\n this.changeFlag = false;\r\n this.css = parameters.classes;\r\n this.dialog = dialog;\r\n this.id = parameters.id;\r\n this.label = parameters.label;\r\n this.control = parameters.control;\r\n this.smoName = parameters.smoName;\r\n }\r\n /**\r\n * Called by the dialog after rendering, so the derived class can \r\n * bind the html controls\r\n */\r\n abstract bind(): void;\r\n /**\r\n * Return the html that lives in side the component DOM. Implemented by the\r\n * base class.\r\n */\r\n abstract get html(): any;\r\n\r\n /**\r\n * Called by the derived class when the value changes. The change flag is set to true, so the dialog will \r\n * know which component changed.\r\n */\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n /**\r\n * combine component classes with string, used for composites\r\n * @param classes string ot append\r\n * @returns combined strings\r\n */\r\n makeClasses(classes: string) {\r\n if (this.css) {\r\n return classes + ' ' + this.css;\r\n }\r\n return classes;\r\n }\r\n get parameterId() {\r\n return this.dialog.getId() + '-' + this.smoName;\r\n }\r\n show() {\r\n $('#' + this.parameterId).removeClass('hide');\r\n }\r\n hide() {\r\n $('#' + this.parameterId).addClass('hide');\r\n }\r\n}\r\n\r\n/**\r\n * Parent components are really containers for other components\r\n * For instance, FontComponent has size, family, weight, etc.\r\n * \r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentParent extends SuiComponentBase {\r\n /**\r\n * For parent component, their changed method is called by child, and then the \r\n * parent calls the dialog changed()\r\n */\r\n abstract changed(): void;\r\n}\r\n\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * \r\n */\r\nexport interface SuiButtonComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string\r\n}\r\n// ## SuiToggleComponent\r\n// Simple on/off behavior. No value just used to notifiy parent dialog\r\nexport class SuiButtonComponent extends SuiComponentBase {\r\n icon: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiButtonComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.icon = parameter.icon;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n this.icon = typeof(this.icon) === 'undefined' ? '' : this.icon;\r\n const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'button').classes(this.icon)\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n setValue() {\r\n }\r\n getValue() {\r\n return null;\r\n }\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('click').on('click',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\nexport interface SuiButtonCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiButtonComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiButtonComposite extends SuiButtonComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiButtonCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","import { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from '../components/toggle';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n \r\nexport interface CheckboxDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n\r\n// ## CheckboxDropdownComponent\r\n// A checkbox that enables a dropdown component, for optional or dependent parameter\r\nexport class CheckboxDropdownComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n toggleCtrl: SuiToggleComposite;\r\n dropdownCtrl: SuiDropdownComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: CheckboxDropdownComponentParams) {\r\n super(dialog, parameter);\r\n const toggleParams: SuiToggleCompositeParams = {\r\n id: this.id + parameter.toggleElement.smoName,\r\n classes: '',\r\n parentControl: this,\r\n ...parameter.toggleElement\r\n }\r\n const dropdownParams: SuiDropdownCompositeParams = {\r\n id: this.id + parameter.dropdownElement.smoName,\r\n classes: '',\r\n defaultValue: '',\r\n parentControl: this,\r\n ...parameter.dropdownElement\r\n }\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.dropdownCtrl = new SuiDropdownComposite(this.dialog, dropdownParams);\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl checkboxDropdown'))\r\n .attr('id', this.parameterId);\r\n q.append(this.toggleCtrl.html);\r\n q.append(this.dropdownCtrl.html);\r\n return q;\r\n }\r\n\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.dropdownCtrl.bind();\r\n }\r\n changed() {\r\n if (this.toggleCtrl.getValue()) {\r\n $('#' + this.parameterId).addClass('checked');\r\n } else {\r\n $('#' + this.parameterId).removeClass('checked');\r\n }\r\n this.handleChanged();\r\n }\r\n}\r\n","import { SuiDialogNotifier, SuiComponentBase, SuiBaseComponentParams } from './baseComponent';\r\nimport { SuiDragSession } from '../../../render/sui/textEdit';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n// ## SuiDragText\r\n// A component that lets you drag the text you are editing to anywhere on the score.\r\n// The text is not really part of the dialog but the location of the text appears\r\n// in other dialog fields.\r\nexport class SuiDragText extends SuiComponentBase {\r\n dragging: boolean = false;\r\n running: boolean = false;\r\n staticText: Record;\r\n altLabel: string;\r\n value: string = '';\r\n session: SuiDragSession | null = null;\r\n view: SuiScoreViewOperations;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter);\r\n this.dragging = false;\r\n this.running = false;\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.draggerLabel;\r\n this.value = '';\r\n this.view = this.dialog.getView();\r\n }\r\n\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbDragTextDialog smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-move'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n show(){}\r\n hide(){}\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n stopEditSession() {\r\n $('body').removeClass('text-move');\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-checkmark').addClass('icon-move');\r\n if (this.session && this.session.dragging) {\r\n this.session.dragging = false;\r\n this.session.endDrag();\r\n }\r\n if (this.session) {\r\n this.session.unrender();\r\n }\r\n this.handleChanged();\r\n this.running = false;\r\n }\r\n startEditSession() {\r\n $('body').addClass('text-move');\r\n this.session = new SuiDragSession({\r\n textGroup: (this.dialog as any).modifier,\r\n context: this.view.renderer.pageMap,\r\n scroller: this.view.tracker.scroller\r\n });\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-enlarge').addClass('icon-checkmark');\r\n this.running = true;\r\n }\r\n mouseMove(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.mouseMove(e);\r\n }\r\n }\r\n mouseDown(e: any) {\r\n if (this.session && !this.session.dragging) {\r\n this.session.startDrag(e);\r\n this.dragging = true;\r\n }\r\n }\r\n mouseUp(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.endDrag();\r\n this.dragging = false;\r\n }\r\n }\r\n\r\n bind() {\r\n const self = this;\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (self.running) {\r\n self.stopEditSession();\r\n } else {\r\n self.startEditSession();\r\n }\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support dropdown compontents\r\n * @module /ui/dialogs/components/dropdown\r\n */\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, DialogDefinitionOption } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * constructor params for {@link SuiDropdownComponent}\r\n * @param id id in DOM\r\n * @param classes\r\n * @param type indicates the data type of the value\r\n * @param increment not used\r\n * @param label\r\n * @param smoName variable name in dialog/adapter\r\n * @param control name of constructor\r\n * @param disabledOption\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * single-select dropdown list\r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComponent extends SuiComponentBase {\r\n options: DialogDefinitionOption[];\r\n disabledOption: string;\r\n dataType: string;\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiDropdownComponentParams) {\r\n super(dialog, parameter);\r\n this.options = parameter.options!;\r\n this.disabledOption = parameter.disabledOption ?? '';\r\n this.dataType = parameter.dataType ?? 'string';\r\n }\r\n checkDefault(s: any, b: any) {\r\n if (this.disabledOption.length) {\r\n s.prop('required', true).append(b('option').attr('selected', 'selected').prop('disabled', true).text(this.disabledOption));\r\n }\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.id;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const s = b('select');\r\n this.checkDefault(s, b);\r\n this.options.forEach((option) => {\r\n s.append(\r\n b('option').attr('value', option.value.toString()).text(option.label));\r\n });\r\n r.append(s).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n replaceOptions(options: DialogDefinitionOption[]) {\r\n const b = buildDom;\r\n const s = b('select');\r\n const sel = this._getInputElement();\r\n const parent = $(sel).parent();\r\n $(sel).remove();\r\n this.checkDefault(s, b);\r\n options.forEach((option) => {\r\n s.append(b('option').attr('value', option.value.toString()).text(option.label));\r\n });\r\n $(parent).append(s.dom());\r\n this.bind();\r\n }\r\n\r\n unselect() {\r\n $(this._getInputElement())[0].selectedIndex = -1;\r\n $(this._getInputElement()).blur();\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.id;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): string | number {\r\n const input = this._getInputElement();\r\n const option = input.find('option:selected');\r\n let val = $(option).val();\r\n val = (this.dataType.toLowerCase() === 'int') ? parseInt(val, 10) : val;\r\n val = (this.dataType.toLowerCase() === 'float') ? parseFloat(val) : val;\r\n if (typeof(val) === 'undefined') {\r\n val = $(input).find('option:first').val();\r\n $(input).find('option:first').prop('selected', true);\r\n }\r\n return val;\r\n }\r\n setValue(value: string | number) {\r\n const input = this._getInputElement();\r\n $(input).val(value);\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n const self = this;\r\n $(input).off('change').on('change',\r\n () => {\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\n/**\r\n * constructor params for {@link SuiDropdownComposite}\r\n * element, often a checkbox\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n * */\r\nexport interface SuiDropdownCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[],\r\n parentControl: SuiComponentParent\r\n}\r\n/**\r\n * A dropdown composite mixes a dropdown with some other \r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComposite extends SuiDropdownComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiDropdownCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiFileInput } from '../../fileio/fileInput';\r\ndeclare var $: any;\r\nexport interface SuiFileDownloadComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFileDownloadComponent\r\n// Download a test file using the file input.\r\nexport class SuiFileDownloadComponent extends SuiComponentBase {\r\n defaultValue: string;\r\n value: any = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFileDownloadComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = parameter.defaultValue ?? '';\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('select-file')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'file').classes('file-button')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n async _handleUploadedFiles(evt: any) {\r\n const localFile = new SuiFileInput(evt);\r\n await localFile.loadAsync();\r\n this.value = localFile.value;\r\n this.handleChanged();\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: any) {\r\n this.value = value;\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', async (e: any) => {\r\n await self._handleUploadedFiles(e);\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiToggleComposite } from './toggle';\r\nimport { SmoScoreText } from '../../../smo/data/scoreText';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SourceSerifProFont } from '../../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SourceSansProFont } from '../../../styles/font_metrics/ssp-sans-metrics';\r\nimport { FontInfo } from '../../../common/vex';\r\ndeclare var $: any;\r\n\r\nexport interface SuiFontComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFontComponent\r\n// Dialog component that lets user choose and customize fonts.\r\nexport class SuiFontComponent extends SuiComponentBase {\r\n familyPart: SuiDropdownComposite;\r\n sizePart: SuiRockerComposite;\r\n italicsCtrl: SuiToggleComposite;\r\n boldCtrl: SuiToggleComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFontComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n const familyId = this.id + 'fontFamily';\r\n const sizeId = this.id + 'fontSize';\r\n\r\n this.familyPart = new SuiDropdownComposite(this.dialog,\r\n {\r\n id: familyId,\r\n smoName: 'fontFamily',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Font Family',\r\n parentControl: this,\r\n options: [\r\n { label: 'Arial', value: 'Arial' },\r\n { label: 'Times New Roman', value: 'Times New Roman' },\r\n { label: 'Serif', value: SourceSerifProFont.fontFamily },\r\n { label: 'Sans', value: SourceSansProFont.fontFamily },\r\n { label: 'Roboto Slab', value: 'Roboto Slab' },\r\n { label: 'Petaluma', value: 'Petaluma Script' },\r\n { label: 'Commissioner', value: 'Commissioner' },\r\n { label: 'Concert One', value: 'ConcertOne' },\r\n { label: 'Merriweather', value: 'Merriweather' }\r\n ]\r\n });\r\n this.sizePart = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: sizeId,\r\n smoName: 'fontSize',\r\n defaultValue: 1,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Font Size',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n this.italicsCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'italic',\r\n smoName: 'italic',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Italics'\r\n }\r\n );\r\n this.boldCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'bold',\r\n smoName: 'bold',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Bold'\r\n }\r\n );\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl')).attr('id', this.id);\r\n if (this.label) {\r\n q.append(b('h3').classes('font-purpose').text(this.label));\r\n }\r\n q.append(this.familyPart.html);\r\n q.append(this.sizePart.html);\r\n q.append(this.boldCtrl.html);\r\n q.append(this.italicsCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): FontInfo {\r\n return {\r\n family: this.familyPart.getValue().toString(),\r\n size: this.sizePart.getValue(),\r\n weight: this.boldCtrl.getValue() ? 'bold' : 'normal',\r\n style: this.italicsCtrl.getValue() ? 'italic' : 'normal'\r\n };\r\n }\r\n setValue(value: FontInfo) {\r\n let italics = false;\r\n // upconvert font size, all font sizes now in points.\r\n if (typeof(value.size) !== 'number') {\r\n value.size = SmoScoreText.fontPointSize(value.size);\r\n }\r\n if (value.style && value.style === 'italic') {\r\n italics = true;\r\n }\r\n const boldString = SmoScoreText.weightString(value.weight);\r\n const bold = boldString === 'bold';\r\n this.boldCtrl.setValue(bold);\r\n this.italicsCtrl.setValue(italics);\r\n this.familyPart.setValue(value.family ?? 'Arial');\r\n this.sizePart.setValue(value.size);\r\n }\r\n\r\n bind() {\r\n this.familyPart.bind();\r\n this.sizePart.bind();\r\n this.boldCtrl.bind();\r\n this.italicsCtrl.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiLyricSession, SuiChordSession } from '../../../render/sui/textEdit';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSelection, SmoSelector } from '../../../smo/xform/selections';\r\nimport { BrowserEventSource } from '../../eventSource';\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SmoLyric } from '../../../smo/data/noteModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * This has the text editing dialog components for notes, such as lyrics. \r\n * Unlike components that are\r\n * actual dialog controls, these actually run a text editing session of some kind.\r\n * \r\n * \r\n *\r\n*\r\n* The heirarchy of text editing objects goes:\r\n* dialog -> component -> session -> editor\r\n*\r\n* ### editor\r\n* handles low-level events and renders the preview using one\r\n* of the text layout objects.\r\n*\r\n* ### session\r\n* creates and destroys editors, e.g. for lyrics that have a Different\r\n* editor instance for each note.\r\n*\r\n* ### component\r\n* is defined in the dialog, and creates/destroys the session based on input from\r\n* the dialog\r\n*\r\n* ### dialog\r\n* manages the coponent session, as well as other components of the text like font etc.\r\n */\r\n\r\n\r\nexport interface SuiNoteTextParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n verse?: number\r\n}\r\n/**\r\n * Base class for text editor components that navigate to\r\n * different notes.\r\n * */\r\nexport abstract class SuiNoteTextComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n selection: SmoSelection;\r\n selector: SmoSelector;\r\n eventSource: BrowserEventSource;\r\n session: SuiLyricSession | null = null;\r\n value: SmoLyric | null = null;\r\n started: boolean = false;\r\n staticText: Record;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.eventSource = this.dialog.getEventSource();\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.staticText = this.dialog.getStaticText();\r\n }\r\n abstract startEditSession(): void;\r\n abstract endSession(): void;\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n get running() {\r\n return this.session && this.session.isRunning;\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.session) {\r\n return await this.session.evKey(evdata);\r\n }\r\n return false;\r\n }\r\n setDialogLyric() {\r\n if (this.session && this.session.lyric) {\r\n (this.dialog as any).setLyric(this.selector, this.session.lyric);\r\n }\r\n }\r\n\r\n async moveSelectionRight() {\r\n if (this.session) {\r\n await this.session.advanceSelection(false);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async moveSelectionLeft() {\r\n if (this.session) {\r\n this.session.advanceSelection(true);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async removeText() {\r\n if (this.session) {\r\n await this.session.removeLyric();\r\n }\r\n }\r\n\r\n async _bind() {\r\n $(this._getInputElement()).off('click').on('click', async () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n $('#' + this.parameterId + '-left').off('click').on('click', async () => {\r\n await this.moveSelectionLeft();\r\n });\r\n $('#' + this.parameterId + '-right').off('click').on('click', async () => {\r\n await this.moveSelectionRight();\r\n });\r\n $('#' + this.parameterId + '-remove').off('click').on('click', async () => {\r\n await this.removeText();\r\n });\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n}\r\n\r\n/** \r\n * manage a lyric session that moves from note to note and adds lyrics.\r\n * @category SuiDialog\r\n**/\r\nexport class SuiLyricComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.altLabel = this.staticText.doneEditing;\r\n this.started = false;\r\n this.verse = parameter.verse ?? 0;\r\n }\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbLyricEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n async endSession() {\r\n this.started = false;\r\n console.log('ending text session');\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n console.log('starting text session');\r\n if (this.started) {\r\n return;\r\n }\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiLyricSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: this.verse,\r\n score: this.view.score,\r\n view: this.view\r\n }\r\n );\r\n this.started = true;\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n\r\n bind() {\r\n this._bind();\r\n }\r\n}\r\n\r\n// ## SuiChordComponent\r\n// manage a chord editing session that moves from note to note and adds chord symbols.\r\nexport class SuiChordComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.session = null;\r\n this.dialog = dialog;\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.altLabel = this.staticText.doneEditing;\r\n this.verse = 0;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbChordEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiChordSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: 0,\r\n view: this.view,\r\n score: this.view.score\r\n }\r\n );\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n bind() {\r\n this._bind();\r\n }\r\n setTextType(type: string | number) {\r\n if (this.session) {\r\n this.session.textType = parseInt(type.toString(), 10);\r\n }\r\n }\r\n getTextType() {\r\n if (this.session) {\r\n return this.session.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /ui/dialog/components/rocker\r\n * **/\r\n import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic dialog component info.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiRockerComponentParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n\r\n/**\r\n * A numeric input box with +- buttons. Adjustable type and scale\r\n * */\r\nexport class SuiRockerComponent extends SuiComponentBase {\r\n static get dataTypes() {\r\n return ['int', 'float', 'percent'];\r\n }\r\n static get increments(): Record {\r\n return { 'int': 1, 'float': 0.1, 'percent': 10 };\r\n }\r\n static get parsers(): Record {\r\n return { 'int': '_getIntValue', 'float': '_getFloatValue', 'percent': '_getPercentValue' };\r\n }\r\n initialValue: number = 0;\r\n dataType: string;\r\n increment: number = 1;\r\n parser: string;\r\n constructor(dialog: SuiDialogNotifier, params: SuiRockerComponentParams) {\r\n super(dialog, params);\r\n this.dataType = params.dataType ?? 'int';\r\n this.increment = params.increment ?? SuiRockerComponent.increments[this.dataType];\r\n if (SuiRockerComponent.dataTypes.indexOf(this.dataType) < 0) {\r\n throw new Error('dialog element invalid type ' + this.dataType);\r\n }\r\n if (this.dataType === 'int' && this.increment < 1) {\r\n throw new Error('int component with decimal increment');\r\n }\r\n this.parser = SuiRockerComponent.parsers[this.dataType];\r\n this.dialog = dialog;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('rockerControl smoControl')).attr('id', id).attr('data-param', this.smoName)\r\n .append(\r\n b('button').classes('increment').append(\r\n b('span').classes('icon icon-circle-up'))).append(\r\n b('button').classes('decrement').append(\r\n b('span').classes('icon icon-circle-down'))).append(\r\n b('input').attr('type', 'text').classes('rockerInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n get parameterId() {\r\n return this.id;\r\n }\r\n handleChange() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n\r\n bind() {\r\n const pid = this.parameterId;\r\n const input = this._getInputElement();\r\n let val = 0;\r\n $('#' + pid).find('button.increment').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val + this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $('#' + pid).find('button.decrement').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val - this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $(input).off('blur').on('blur',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (val !== this.initialValue) {\r\n this.initialValue = val;\r\n this.handleChanged();\r\n }\r\n }\r\n );\r\n }\r\n\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n _getIntValue() {\r\n let val:number = parseInt(this._getInputElement().val(), 10);\r\n val = isNaN(val) ? 0 : val;\r\n return val;\r\n }\r\n _getFloatValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1.0 : val;\r\n return val;\r\n }\r\n _getPercentValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1 : val;\r\n return val / 100;\r\n }\r\n _setIntValue(val: string | number) {\r\n this._getInputElement().val(val);\r\n }\r\n setValue(value: number) {\r\n if (this.dataType === 'percent') {\r\n value = value * 100;\r\n }\r\n this._setIntValue(value);\r\n this.initialValue = value;\r\n }\r\n getValue() {\r\n return (this as any)[this.parser]();\r\n }\r\n}\r\n/**\r\n * Create rocker composite\r\n * @param{id}\r\n */\r\nexport interface SuiRockerCompositeParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n defaultValue: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiRockerComposite extends SuiRockerComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiRockerCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from './toggle';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSystemGroup } from '../../../smo/data/scoreModifiers';\r\ndeclare var $: any;\r\nexport interface StaffAddControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffAddRemoveComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class StaffAddRemoveComponent extends SuiComponentBase {\r\n staffRows: StaffAddControlRow[] = [];\r\n view: SuiScoreViewOperations;\r\n createdShell: boolean = false;\r\n staticText: Record;\r\n modifier: SmoSystemGroup | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffAddRemoveComponentParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.staticText = dialog.getStaticText();\r\n this.label = this.staticText['includeStaff'];\r\n }\r\n setControlRows() {\r\n const mod = this.modifier!;\r\n let i = mod.startSelector.staff;\r\n this.staffRows = [];\r\n this.view.storeScore.staves.forEach((staff) => {\r\n const name = this.label + ' ' + (staff.staffId + 1);\r\n const id = 'show-' + i;\r\n const elementParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'toggle-add-row',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n parentControl: this,\r\n id: id\r\n } \r\n // Toggle add of last row + 1\r\n if (staff.staffId === mod.endSelector.staff + 1) {\r\n\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n rowElement.parentControl = this;\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if (staff.staffId > mod.startSelector.staff &&\r\n staff.staffId === mod.endSelector.staff) {\r\n elementParams.classes = 'toggle-remove-row';\r\n // toggle remove of ultimate row, other than first row\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if ((staff.staffId <= mod.endSelector.staff) &&\r\n (staff.staffId >= mod.startSelector.staff)) {\r\n // toggle remove of ultimate row, other than first row\r\n elementParams.classes = 'toggle-disabled';\r\n const rowElement = new SuiToggleComposite(this.dialog,elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n }\r\n i += 1;\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n // a little hacky. The first time we create an empty html shell for the control\r\n // subsequent times, we fill the html with the row information\r\n if (!this.createdShell) {\r\n this.createdShell = true;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer')).attr('id', this.parameterId);\r\n return q;\r\n } else {\r\n const q = b('div').classes(this.makeClasses('smoControl'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue() {\r\n if (!this.modifier) {\r\n throw 'No staff groups set for staff group component';\r\n }\r\n const mod = this.modifier;\r\n let nextStaff = mod.startSelector.staff;\r\n const maxMeasure = mod.endSelector.measure;\r\n mod.endSelector = JSON.parse(JSON.stringify(mod.startSelector));\r\n this.staffRows.forEach((staffRow) => {\r\n if (staffRow.showCtrl.getValue()) {\r\n mod.endSelector = { staff: nextStaff, measure: maxMeasure, voice: 0, tick: 0, pitches: [] };\r\n nextStaff += 1;\r\n }\r\n });\r\n return this.modifier;\r\n }\r\n setValue(staffGroup: SmoSystemGroup) {\r\n this.modifier = staffGroup;\r\n this.updateGroupMembership();\r\n }\r\n changed() {\r\n this.getValue(); // update modifier\r\n this.handleChanged();\r\n this.updateGroupMembership();\r\n }\r\n bind() {\r\n if (!this.modifier) {\r\n return;\r\n }\r\n // Can't bind before initial set of modifier\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n updateGroupMembership() {\r\n const updateEl = this.getInputElement();\r\n this.setControlRows();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n $(updateEl).find('input').prop('disabled', false);\r\n $(updateEl).find('.toggle-disabled input').prop('checked', true);\r\n $(updateEl).find('.toggle-remove-row input').prop('checked', true);\r\n $(updateEl).find('.toggle-add-row input').prop('checked', false);\r\n $(updateEl).find('.toggle-disabled input').prop('disabled', true);\r\n this.bind();\r\n }\r\n}\r\nexport interface StaffCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface StaffCheckControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffCheckValue {\r\n show: boolean;\r\n}\r\nexport class StaffCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staffRows: StaffCheckControlRow[];\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.staffRows = [];\r\n let previousStaff: string | null = null;\r\n this.view.storeScore.staves.forEach((staff) => {\r\n ;\r\n let name = 'View ' + staff.partInfo.partName;\r\n if (staff.partInfo.stavesBefore > 0 && previousStaff) {\r\n name = previousStaff + ' (2)';\r\n }\r\n previousStaff = name;\r\n const id = 'show-' + staff.staffId;\r\n const toggleParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n id: id,\r\n parentControl: this\r\n }\r\n const rowElement = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n // Is this used for compound controls?\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('.staffContainer');\r\n }\r\n /* export interface StaffCheckValue {\r\n show: boolean;\r\n}*/\r\n getValue(): StaffCheckValue[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.staffRows.length; ++i) {\r\n const show = this.staffRows[i].showCtrl.getValue();\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n setValue(rows: StaffCheckValue[]) {\r\n let i = 0;\r\n rows.forEach((row) => {\r\n this.staffRows[i].showCtrl.setValue(row.show);\r\n i += 1;\r\n });\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from '../components/baseComponent';\r\nimport { SuiToggleComposite } from '../components/toggle';\r\nimport { SuiTextInputComposite } from '../components/textInput';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\ndeclare var $: any;\r\nexport interface TextCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface TextCheckPair {\r\n checked: boolean,\r\n text: string\r\n}\r\nexport class TextCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staticText: Record;\r\n toggleCtrl: SuiToggleComposite;\r\n textCtrl: SuiTextInputComposite;\r\n defaultValue: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: TextCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.defaultValue = '';\r\n const toggleName = this.smoName + 'Toggle';\r\n const textName = this.smoName + 'Text';\r\n this.staticText = this.dialog.getStaticText();\r\n const label = this.staticText[textName];\r\n const show = this.staticText.show;\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, {\r\n smoName: toggleName,\r\n control: 'SuiToggleComposite',\r\n label: show,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n this.textCtrl = new SuiTextInputComposite(this.dialog, {\r\n smoName: textName,\r\n defaultValue: this.defaultValue,\r\n control: 'SuiTextInputComposite',\r\n label,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl textCheckContainer'))\r\n .attr('id', this.parameterId);\r\n q.append(this.textCtrl.html);\r\n q.append(this.toggleCtrl.html);\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue(): TextCheckPair {\r\n return {\r\n checked: this.toggleCtrl.getValue(),\r\n text: this.textCtrl.getValue()\r\n };\r\n }\r\n setValue(val: TextCheckPair) {\r\n this.toggleCtrl.setValue(val.checked);\r\n this.textCtrl.setValue(val.text);\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.textCtrl.bind();\r\n }\r\n}\r\n","import { SmoScoreText, SmoTextGroup } from '../../../smo/data/scoreText';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { SuiTextSession } from '../../../render/sui/textEdit';\r\nimport { SuiScroller } from '../../../render/sui/scroller';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiDialogNotifier, SuiComponentBase, SuiComponentParent } from './baseComponent';\r\nimport { SuiButtonComposite } from './button';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n// ## SuiTextInPlace\r\n// Edit the text in an SVG element, in the same scale etc. as the text in the score SVG DOM.\r\n// This component just manages the text editing component of hte renderer.\r\nexport interface SuiTextInPlaceParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class SuiTextInPlace extends SuiComponentBase {\r\n scroller: SuiScroller;\r\n editMode: boolean = false;\r\n value: SmoTextGroup;\r\n staticText: Record;\r\n altLabel: string;\r\n view: SuiScoreViewOperations;\r\n session: SuiTextSession | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInPlaceParams) {\r\n super(dialog, parameter);\r\n this.scroller = dialog.getView().scroller;\r\n this.value = new SmoTextGroup(SmoTextGroup.defaults);\r\n this.view = this.dialog.getView();\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTextGroup.isTextGroup(modifier)) {\r\n this.value = modifier;\r\n }\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.editorLabel;\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbTextInPlace smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-pencil'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n this.value.skipRender = false;\r\n\r\n if (this.session) {\r\n this.session.textGroup.tryParseUnicode();\r\n this.value = this.session.textGroup;\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n this.handleChanged();\r\n }\r\n get isRunning() {\r\n return this.session && this.session.isRunning;\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _renderInactiveBlocks() {\r\n const modifier = this.value;\r\n const context = this.view.renderer.pageMap.getRendererFromModifier(this.value).getContext();\r\n context.save();\r\n context.setFillStyle('#ddd');\r\n const svgPage = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n modifier.textBlocks.forEach((block) => {\r\n const st = block.text;\r\n if (st.attrs.id !== this.value.getActiveBlock().attrs.id && svgPage) {\r\n const svgText = SuiInlineText.fromScoreText(st, svgPage, this.view.renderer.pageMap, this.scroller);\r\n if (st.logicalBox) {\r\n svgText.startX += st.logicalBox.x - st.x;\r\n svgText.startY += (st.y - st.logicalBox.y) - st.logicalBox.height / 2;\r\n }\r\n const sgrp = context.openGroup();\r\n sgrp.classList.add('inactive-text');\r\n sgrp.classList.add('suiInlineText');\r\n svgText.render();\r\n context.closeGroup();\r\n }\r\n });\r\n context.restore();\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n const modifier = this.value;\r\n modifier.skipRender = true;\r\n let pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n $(pageContext.svg).find('#' + modifier.attrs.id).remove();\r\n this._renderInactiveBlocks();\r\n const ul = modifier.ul();\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiTextSession({\r\n renderer: this.view.renderer,\r\n scroller: this.scroller,\r\n x: ul.x,\r\n y: ul.y,\r\n textGroup: modifier,\r\n text: modifier.getActiveBlock().text,\r\n scoreText: modifier.getActiveBlock()\r\n });\r\n $('body').addClass('text-edit');\r\n this.value = this.session.textGroup;\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n // Erase the original since we are going to edit it now.\r\n if (this.value) {\r\n this.value.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.value.elements = [];\r\n }\r\n this.session.startSession();\r\n // blur the button so key events don't get passed to it.\r\n $(this._getInputElement()).blur();\r\n }\r\n evKey(evdata: KeyEvent) {\r\n if (this.session) {\r\n this.session.evKey(evdata);\r\n }\r\n }\r\n bind() {\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\nexport interface SuiTextBlockComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface SuiTextBlockValue {\r\n modifier: SmoTextGroup,\r\n activeScoreText: SmoScoreText\r\n}\r\nexport class SuiTextBlockComponent extends SuiComponentParent {\r\n addBlockCtrl: SuiButtonComposite;\r\n toggleBlockCtrl: SuiButtonComposite;\r\n removeBlockCtrl: SuiButtonComposite;\r\n relativePositionCtrl: SuiDropdownComposite;\r\n justificationCtrl: SuiDropdownComposite;\r\n spacingCtrl: SuiRockerComposite;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextBlockComponentParams) {\r\n super(dialog, parameter);\r\n this.addBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'addBlock',\r\n smoName: 'addBlock',\r\n parentControl: this,\r\n icon: 'icon-plus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Text Block'\r\n });\r\n\r\n this.toggleBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'toggleBlock',\r\n smoName: 'toggleBlock',\r\n parentControl: this,\r\n icon: 'icon-arrow-right',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Next Block'\r\n });\r\n\r\n this.removeBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'removeBlock',\r\n smoName: 'removeBlock',\r\n parentControl: this,\r\n icon: 'icon-minus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Block'\r\n });\r\n this.relativePositionCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'relativePosition',\r\n smoName: 'relativePosition',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Block Positions',\r\n options: [{\r\n value: SmoTextGroup.relativePositions.ABOVE,\r\n label: 'Above'\r\n }, {\r\n value: SmoTextGroup.relativePositions.BELOW,\r\n label: 'Below'\r\n }, {\r\n value: SmoTextGroup.relativePositions.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.relativePositions.RIGHT,\r\n label: 'Right'\r\n }]\r\n }\r\n );\r\n this.justificationCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'justification',\r\n smoName: 'justification',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Justification',\r\n options: [{\r\n value: SmoTextGroup.justifications.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.justifications.RIGHT,\r\n label: 'Right'\r\n }, {\r\n value: SmoTextGroup.justifications.CENTER,\r\n label: 'Center'\r\n }]\r\n });\r\n this.spacingCtrl = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'spacing',\r\n smoName: 'spacing',\r\n defaultValue: 0,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n const mod = this.dialog.getModifier();\r\n if (mod && SmoTextGroup.isTextGroup(mod)) {\r\n this.modifier = mod;\r\n } else {\r\n this.modifier = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n this.activeScoreText = this.modifier.textBlocks[0].text;\r\n }\r\n changed() {\r\n if (this.addBlockCtrl.changeFlag && this.modifier) {\r\n const nt = new SmoScoreText(this.activeScoreText);\r\n this.modifier.addScoreText(nt);\r\n this.activeScoreText = nt;\r\n this.modifier.setActiveBlock(nt);\r\n this._updateMultiiFields();\r\n }\r\n if (this.relativePositionCtrl.changeFlag) {\r\n this.modifier.setRelativePosition(parseInt(this.relativePositionCtrl.getValue().toString(), 10));\r\n }\r\n if (this.justificationCtrl.changeFlag) {\r\n this.modifier.justification = parseInt(this.justificationCtrl.getValue().toString(), 10);\r\n }\r\n if (this.removeBlockCtrl.changeFlag) {\r\n this.modifier.removeBlock(this.activeScoreText);\r\n this.activeScoreText = this.modifier.firstBlock();\r\n this._updateMultiiFields();\r\n }\r\n if (this.toggleBlockCtrl.changeFlag) {\r\n const curIx = this.modifier.indexOf(this.activeScoreText);\r\n const newIx = (curIx + 1) % this.modifier.textBlocks.length;\r\n this.activeScoreText = this.modifier.textBlocks[newIx].text;\r\n this.modifier.setActiveBlock(this.activeScoreText);\r\n }\r\n if (this.spacingCtrl.changeFlag) {\r\n const val = this.spacingCtrl.getValue();\r\n if (val >= 0) {\r\n this.modifier.spacing = val;\r\n }\r\n }\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl'));\r\n q.append(this.addBlockCtrl.html);\r\n q.append(this.removeBlockCtrl.html);\r\n q.append(this.toggleBlockCtrl.html);\r\n q.append(this.relativePositionCtrl.html);\r\n q.append(this.justificationCtrl.html);\r\n q.append(this.spacingCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n return $(this.dialog.dgDom.element).find('#' + this.parameterId);\r\n }\r\n getValue() {\r\n return {\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n };\r\n }\r\n _updateMultiiFields() {\r\n const fields = [this.justificationCtrl, this.relativePositionCtrl,\r\n this.removeBlockCtrl, this.toggleBlockCtrl, this.spacingCtrl];\r\n fields.forEach((field) => {\r\n if (this.modifier.textBlocks.length < 2) {\r\n $('#' + field.parameterId).addClass('hide');\r\n } else {\r\n $('#' + field.parameterId).removeClass('hide');\r\n }\r\n });\r\n }\r\n setValue(value: SuiTextBlockValue) {\r\n this.activeScoreText = value.activeScoreText;\r\n this.modifier = value.modifier;\r\n this.relativePositionCtrl.setValue(this.modifier.relativePosition);\r\n this._updateMultiiFields();\r\n this.justificationCtrl.setValue(this.modifier.justification);\r\n this.spacingCtrl.setValue(this.modifier.spacing);\r\n }\r\n\r\n bind() {\r\n this.addBlockCtrl.bind();\r\n this.relativePositionCtrl.bind();\r\n this.justificationCtrl.bind();\r\n this.removeBlockCtrl.bind();\r\n this.toggleBlockCtrl.bind();\r\n this.spacingCtrl.bind();\r\n }\r\n}\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for text input component (simple text entry, not SVG text)\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiTextInputComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple text input, like for a filename. Not the text editing component.\r\n */\r\nexport class SuiTextInputComponent extends SuiComponentBase {\r\n defaultValue: string = '';\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInputComponentParams) {\r\n super(dialog, parameter);\r\n\r\n this.dialog = dialog;\r\n this.value = '';\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('text-input smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'text').classes('file-name')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(val: string) {\r\n this.value = val;\r\n $('#' + this.parameterId).find('input').val(val);\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', () => {\r\n self.value = $(this._getInputElement()).val();\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\nexport interface SuiTextInputCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiTextInputComposite extends SuiTextInputComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiTextInputCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SmoSelection } from '../../../smo/xform/selections';\r\nimport { SmoTie, TieLine } from '../../../smo/data/staffModifiers';\r\nimport { SmoNote } from '../../../smo/data/note';\r\ndeclare var $: any;\r\n\r\nexport interface PitchTieControlRow {\r\n leftControl: SuiDropdownComposite,\r\n rightControl: SuiDropdownComposite\r\n}\r\nexport interface TieMappingComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n// ## TieMappingComponent\r\n// Represent the pitches in 2 notes that can be individually tied together\r\nexport class TieMappingComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n startSelection: SmoSelection | null;\r\n endSelection: SmoSelection | null;\r\n modifier: SmoTie;\r\n controlRows: PitchTieControlRow[] = [];\r\n constructor(dialog: SuiDialogNotifier, parameter: TieMappingComponentParams) {\r\n super(dialog, parameter);\r\n let i = 0;\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTie.isTie(modifier)) {\r\n this.modifier = modifier;\r\n } else { // should not happen\r\n this.modifier = new SmoTie(SmoTie.defaults);\r\n }\r\n this.startSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.startSelector);\r\n this.endSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.endSelector);\r\n if (this.startSelection === null || this.startSelection.note === null ||\r\n this.endSelection === null || this.endSelection.note === null) {\r\n return;\r\n }\r\n const pitchCount = Math.max(this.startSelection.note.pitches.length, this.endSelection.note.pitches.length);\r\n\r\n this.controlRows = [];\r\n for (i = 0; i < pitchCount; ++i) {\r\n const smoName = 'Line-' + (i + 1);\r\n const defaultValue = -1;\r\n const leftParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-left',\r\n smoName: smoName + '-left',\r\n classes: 'leftControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['fromNote'],\r\n options: this._generateOptions(this.startSelection.note),\r\n parentControl: this\r\n }\r\n const leftControl = new SuiDropdownComposite(this.dialog, leftParams);\r\n const rightParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-right',\r\n smoName: smoName + '-right',\r\n classes: 'rightControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['toNote'],\r\n options: this._generateOptions(this.endSelection.note),\r\n parentControl: this\r\n\r\n }\r\n const rightControl = new SuiDropdownComposite(this.dialog, rightParams);\r\n this.controlRows.push({ leftControl, rightControl });\r\n }\r\n }\r\n bind() {\r\n this.controlRows.forEach((row) => {\r\n row.rightControl.bind();\r\n row.leftControl.bind();\r\n });\r\n }\r\n\r\n _generateOptions(note: SmoNote) {\r\n const options = [];\r\n let index = 0;\r\n let label = '';\r\n options.push({ value: -1, label: 'No Line' });\r\n note.pitches.forEach((pitch) => {\r\n const value = index;\r\n label = pitch.letter.toUpperCase();\r\n if (pitch.accidental !== 'n') {\r\n label += pitch.accidental;\r\n }\r\n label += pitch.octave;\r\n options.push({ value, label });\r\n index += 1;\r\n });\r\n return options;\r\n }\r\n getValue() {\r\n const lines: TieLine[] = [];\r\n this.controlRows.forEach((row) => {\r\n const left: number = parseInt(row.leftControl.getValue().toString(), 10);\r\n const right: number = parseInt(row.rightControl.getValue().toString(), 10);\r\n if (left >= 0 && right >= 0) {\r\n lines.push({ from: left, to: right });\r\n }\r\n });\r\n return lines;\r\n }\r\n setValue(modifier: TieLine[]) {\r\n let i = 0;\r\n for (i = 0; i < this.controlRows.length; ++i) {\r\n const row = this.controlRows[i];\r\n if (modifier.length > i) {\r\n row.leftControl.setValue(modifier[i].from);\r\n row.rightControl.setValue(modifier[i].to);\r\n }\r\n }\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl dropdownPair'))\r\n .attr('id', this.parameterId);\r\n this.controlRows.forEach((row) => {\r\n q.append(row.leftControl.html).append(row.rightControl.html);\r\n });\r\n return q;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for simple on-off toggle\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiToggleComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple boolean checkbox component\r\n */\r\nexport class SuiToggleComponent extends SuiComponentBase {\r\n defaultValue: boolean = false;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiToggleComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = false;\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('toggleControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'checkbox').classes('toggleInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n setValue(value: boolean) {\r\n $(this._getInputElement()).prop('checked', value);\r\n }\r\n getValue() {\r\n return $(this._getInputElement()).prop('checked');\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('change').on('change',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Params for toggle combined with another component\r\n */\r\nexport interface SuiToggleCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n defaultValue?: string | number,\r\n dataType?: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiToggleComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiToggleComposite extends SuiToggleComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiToggleCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n\r\nexport interface TreeComponentOption {\r\n label: string,\r\n value: string | undefined, \r\n parent: string | undefined,\r\n format: string,\r\n expanded: boolean\r\n}\r\n\r\nexport interface SuiTreeComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n options: TreeComponentOption[]\r\n}\r\n// ### SuiDropdownComponent\r\n// simple dropdown select list.\r\nexport class SuiTreeComponent extends SuiComponentBase {\r\n persistControls: boolean = false;\r\n tree: Record = {};\r\n options: TreeComponentOption[] = [];\r\n root: string;\r\n value: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTreeComponentParams) {\r\n super(dialog, parameter);\r\n this.root = parameter.root;\r\n this.value = this.root;\r\n this.options = parameter.options;\r\n this.calculateOptionTree();\r\n }\r\n calculateOptionTree() {\r\n this.tree = {};\r\n this.options.forEach((option) => {\r\n if (option.parent) {\r\n if (!(this.tree[option.parent])) {\r\n this.tree[option.parent] = [];\r\n }\r\n this.tree[option.parent].push(option);\r\n }\r\n });\r\n }\r\n getNodesWithParent(parent: string | undefined) {\r\n return this.options.filter((oo) => oo.parent === parent);\r\n }\r\n appendOptionRecurse(b: any, option: TreeComponentOption, level: number) {\r\n const children = this.getNodesWithParent(option.value);\r\n let treeClass = 'tree-branch';\r\n let buttonClass = 'expander';\r\n if (option.format === 'library' && children.length > 0) {\r\n if (this.persistControls && option.expanded) {\r\n buttonClass += ' expanded icon-minus';\r\n }\r\n if (this.persistControls && !option.expanded) {\r\n buttonClass += ' collapsed icon-plus';\r\n treeClass += ' collapsed';\r\n }\r\n }\r\n const current = b('li').classes(treeClass).attr('data-value', option.value).attr('data-level', level);\r\n current.append(b('button').classes(buttonClass));\r\n current.append(b('a').classes('tree-link').text(option.label));\r\n if (option.format === 'library') {\r\n current.append(b('span').classes('file-type icon-book'));\r\n } else {\r\n current.append(b('span').classes('file-type icon-file-music'));\r\n }\r\n children.forEach((child) => {\r\n current.append(b('ul').append(this.appendOptionRecurse(b, child, level + 1)));\r\n });\r\n return current;\r\n }\r\n _createTree(builder: any, ul: any) {\r\n // this.checkDefault(s, b);\r\n const options = this.getNodesWithParent(this.root);\r\n options.forEach((option) => {\r\n ul.append(this.appendOptionRecurse(builder, option, 0));\r\n });\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n r.append(ul);\r\n this.persistControls = true;\r\n return r;\r\n }\r\n updateOptions(options: TreeComponentOption[]) {\r\n this.options = options;\r\n this.calculateOptionTree();\r\n const parentEl = $(this._getInputElement());\r\n const oldUl = $(parentEl).find('ul.tree-root');\r\n $(oldUl).remove();\r\n const b = buildDom;\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n $(parentEl).append(ul.dom());\r\n this.bind();\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid);\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: string) {\r\n $('ul.tree li').removeClass('selected');\r\n const option = this.options.find((o) => o.value === value);\r\n const input = this._getInputElement();\r\n const li = $(input).find('li[data-value=\"' + value + '\"]');\r\n $(li).addClass('selected');\r\n if (option && option.format === 'library') {\r\n $(li).find('button').first().addClass('expanded icon-minus');\r\n }\r\n this.bindTreeControls();\r\n }\r\n bindTreeControls() {\r\n $('ul.tree button.expanded').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).removeClass('expanded').removeClass('icon-minus').addClass('icon-plus').addClass('collapsed');\r\n $(button).closest('li').addClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n $('ul.tree button.collapsed').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).addClass('expanded').addClass('icon-minus').removeClass('icon-plus').removeClass('collapsed');\r\n $(button).closest('li').removeClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n this.bindTreeControls();\r\n $(input).find('a.tree-link').each((ix: number, el: any) => {\r\n $(el).removeClass('selected');\r\n $(el).off('click').on('click', (ev: any) => {\r\n $(this._getInputElement()).find('li').removeClass('selected');\r\n const li = $(ev.currentTarget).closest('li.tree-branch');\r\n $(li).addClass('selected');\r\n this.value = $(li).attr('data-value');\r\n this.handleChanged();\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { buildDom, InputTrapper, draggable, createTopDomContainer } from '../../common/htmlHelpers';\r\n// import { SmoTranslator } from '../i18n/language';\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SuiDialogNotifier, DialogDefinitionElement, \r\n SuiComponentBase, DialogDefinitionOption, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SuiScroller } from '../../render/sui/scroller';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { EventHandler } from '../eventSource';\r\nimport { SmoUiConfiguration } from '../configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n/**\r\n * The JSON dialog template is a declaritive structore for the html of the dialog\r\n * and components. \r\n * @param label for the dialog itself\r\n * @param elements a series of elements that define the component\r\n * @param staticText a hash of text for the dialog and components to use\r\n * @category SuiDialog\r\n */\r\nexport interface DialogDefinition {\r\n label: string,\r\n elements: DialogDefinitionElement[],\r\n staticText: Record[]\r\n}\r\n/**\r\n * A translation of the labels in DialogDefintionElement\r\n * @param label the component label\r\n * @param id used as a key in translation tool\r\n * @param options options for dropdown and other array components\r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslationElement {\r\n label: string,\r\n id: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * A translation of all the strings in the dialog itself, used \r\n * when switching languages.\r\n * @param ctor the constructor for the dialog class, used to call static methods\r\n * @param label the translated label\r\n * @param dialogElements the translated component json\r\n * @param staticText translated misc text \r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslation {\r\n ctor: string,\r\n label: string,\r\n dialogElements: DialogTranslationElement[],\r\n staticText: Record\r\n}\r\n\r\n/**\r\n * Dialog params always contain basic information about the runtime\r\n * for modal functionality\r\n * @param ctor dialog constructor\r\n * @param id DOM id for the dialog\r\n * @param tracker to get and set selections\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param startPromise used if this is called from another modal element\r\n * @param view the MVVM object to change the score\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n // definition: DialogDefinition,\r\n modifier?: any,\r\n config?: SmoUiConfiguration\r\n}\r\n\r\n/**\r\n * internal interface used to create the DOM\r\n * @internal\r\n */\r\nexport interface SuiDomParams {\r\n id: string,\r\n top: number,\r\n left: number,\r\n label: string\r\n}\r\n/**\r\n * DOM interface for the dialog\r\n * @param element parent element\r\n * @param trapper used to trap focus events for the dialog\r\n */\r\nexport interface DialogDom {\r\n element: any,\r\n trapper: any\r\n}\r\n\r\n/**\r\n * Note: Most dialogs will inherit from SuiDialogAdapter, not SuiDialogBase.\r\n * You will only want to inherit from SuiDialogBase under 2 conditions:\r\n * 1. the dialog is triviailly simple, like an alert box that makes no changes to the score, or\r\n * 2. the dialog is extremely complicated in how it interacts with the user, such that a form-based approach won't work\r\n * @category SuiDialog\r\n */\r\n export abstract class SuiDialogBase extends SuiDialogNotifier {\r\n static get displayOptions(): Record {\r\n return {\r\n BINDCOMPONENTS: 'bindComponents', DRAGGABLE: 'makeDraggable',\r\n KEYBOARD_CAPTURE: 'captureKeyboardPromise', GLOBALPOS: 'positionGlobally',\r\n SELECTIONPOS: 'positionFromSelection', MODIFIERPOS: 'positionFromModifier',\r\n HIDEREMOVE: 'hideRemoveButton'\r\n };\r\n }\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class: string): DialogTranslation {\r\n const output: DialogTranslationElement[] = [];\r\n const xx: any = eval('globalThis.Smo.' + _class);\r\n xx.dialogElements.elements.forEach((element: DialogDefinitionElement) => {\r\n const component: Partial = {};\r\n if (element.label) {\r\n component.label = element.label ?? '';\r\n component.id = element.smoName;\r\n if (element.options) {\r\n component.options = [];\r\n\r\n element.options.forEach((option) => {\r\n component.options!.push({ value: option.value, label: option.label });\r\n });\r\n }\r\n output.push(component as DialogTranslationElement);\r\n }\r\n });\r\n // convert static text from an array of name/value pairs to a record for translation\r\n const staticText: Record = {};\r\n const dialogStaticText: Record[] = xx.dialogElements.staticText;\r\n if (dialogStaticText) {\r\n dialogStaticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n staticText[key] = st[key];\r\n });\r\n }\r\n return { ctor: xx.ctor, label: xx.dialogElements.label, dialogElements: output, staticText };\r\n }\r\n static getStaticText(staticText: Record[]) {\r\n const rv: Record = {};\r\n staticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n rv[key] = st[key];\r\n });\r\n return rv;\r\n }\r\n id: string;\r\n ctor: string;\r\n boundKeyboard: boolean;\r\n components: SuiComponentBase[] = [];\r\n boundComponents: SuiComponentBase[] = [];\r\n cmap: Record = {};\r\n scroller: SuiScroller;\r\n closeDialogPromise: Promise;\r\n label: string;\r\n staticText: Record[] = [];\r\n startPromise: Promise | null;\r\n dialogElements: DialogDefinition;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n completeNotifier: CompleteNotifier;\r\n modifier: any;\r\n dgDom: DialogDom;\r\n displayOptions: string[] = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'GLOBALPOS', 'HIDEREMOVE'];\r\n keydownHandler: EventHandler | null = null;\r\n // ### SuiDialogBase ctor\r\n // Creates the DOM element for the dialog and gets some initial elements\r\n constructor(dialogElements: DialogDefinition, parameters: SuiDialogParams) {\r\n super();\r\n this.id = parameters.id;\r\n this.boundKeyboard = false;\r\n this.scroller = parameters.view.tracker.scroller;\r\n this.label = dialogElements.label;\r\n this.eventSource = parameters.eventSource;\r\n this.view = parameters.view;\r\n this.completeNotifier = parameters.completeNotifier;\r\n this.modifier = parameters.modifier;\r\n this.ctor = parameters.ctor;\r\n\r\n this.closeDialogPromise = new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', () => {\r\n resolve();\r\n });\r\n });\r\n this.staticText = dialogElements.staticText;\r\n\r\n // If this dialog was spawned by a menu, wait for the menu to dismiss\r\n // before continuing.\r\n // this.startPromise = parameters.closeMenuPromise;\r\n this.startPromise = parameters.startPromise;\r\n\r\n this.dialogElements = dialogElements;\r\n\r\n const left = $('.musicRelief').offset().left + $('.musicRelief').width() / 2;\r\n const top = $('.musicRelief').offset().top + $('.musicRelief').height() / 2;\r\n\r\n this.dgDom = this._constructDialog(dialogElements, {\r\n id: 'dialog-' + this.id,\r\n top,\r\n left,\r\n label: this.label\r\n });\r\n\r\n // SmoTranslator.registerDialog(this.ctor);\r\n }\r\n // ### display\r\n // make3 the modal visible. bind events and elements.\r\n display() {\r\n $('body').addClass('showAttributeDialog');\r\n this.bindComponents();\r\n this.bindElements();\r\n this.applyDisplayOptions();\r\n this.initialValue();\r\n }\r\n\r\n // ### bindElements\r\n // bing the generic controls in most dialogs.\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.modifier) {\r\n this.modifier.cancel();\r\n }\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.complete();\r\n });\r\n }\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n component.bind();\r\n });\r\n }\r\n initialValue(){\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n (comp as any).setValue((this.modifier as any)[comp.smoName]);\r\n });\r\n }\r\n changed() {\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.modifier as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n getId(): string {\r\n return this.id;\r\n }\r\n getModifier() : SmoModifier | null {\r\n return this.modifier ?? null;\r\n }\r\n getEventSource() {\r\n return this.eventSource;\r\n }\r\n getStaticText() {\r\n return SuiDialogBase.getStaticText(this.staticText);\r\n }\r\n async commit(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get closeModalPromise(): Promise {\r\n return this.closeDialogPromise;\r\n }\r\n // ### position\r\n // For dialogs based on selections, tries to place the dialog near the selection and also\r\n // to scroll so the dialog is in view\r\n static position(box: SvgBox, dgDom: DialogDom, scroller: SuiScroller) {\r\n let y = (box.y + box.height) - scroller.netScroll.y;\r\n let x = 0;\r\n\r\n // TODO: adjust if db is clipped by the browser.\r\n const dge = $(dgDom.element).find('.attributeModal');\r\n const dgeHeight: number = $(dge).height();\r\n const maxY: number = $('.musicRelief').height();\r\n const maxX: number = $('.musicRelief').width();\r\n const offset: any = $('.dom-container').offset();\r\n y = y - (offset.top as number);\r\n\r\n const offsetY = dgeHeight + y > window.innerHeight ? (dgeHeight + y) - window.innerHeight : 0;\r\n y = (y < 0) ? -y : y - offsetY;\r\n\r\n y = (y > maxY || y < 0) ? maxY / 2 : y;\r\n\r\n $(dge).css('top', '' + y + 'px');\r\n\r\n x = box.x - scroller.netScroll.x;\r\n x = x - (offset.left as number);\r\n const w: number = $(dge).width();\r\n x = (x > window.innerWidth / 2) ? x - (w + 25) : x + (w + 25);\r\n\r\n x = (x < 0 || x > maxX) ? maxX / 2 : x;\r\n $(dge).css('left', '' + x + 'px');\r\n }\r\n getView() {\r\n return this.view;\r\n }\r\n applyDisplayOptions() {\r\n $('body').addClass('showAttributeDialog');\r\n this.displayOptions.forEach((option) => {\r\n (this as any)[SuiDialogBase.displayOptions[option]]();\r\n });\r\n }\r\n // ### position\r\n // Position the dialog near a selection. If the dialog is not visible due\r\n // to scrolling, make sure it is visible.\r\n position(box: SvgBox) {\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n hideRemoveButton() {\r\n $(this.dgDom.element).find('.remove-button').remove();\r\n }\r\n // ### positionModifier()\r\n positionFromModifier() {\r\n if (this.modifier === null || this.modifier.logicalBox === null) {\r\n this.positionGlobally();\r\n return;\r\n }\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.modifier);\r\n const screenBox = this.view.renderer.pageMap.svgToClient(this.modifier.logicalBox);\r\n this.position(screenBox);\r\n }\r\n // ### positionGlobally\r\n // position the dialog box in the center of the current scroll region\r\n positionGlobally() {\r\n const box = SvgHelpers.boxPoints(250, 250, 1, 1);\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n // ### postionFromSelection\r\n // set initial position of dialog based on first selection\r\n positionFromSelection() {\r\n const note: SmoNote | null = this.view.tracker.selections[0].note;\r\n if (note && note.logicalBox) {\r\n const screenBox = this.view.renderer.pageMap.svgToClient(note.logicalBox);\r\n this.position(screenBox);\r\n }\r\n }\r\n // ### build the html for the dialog, based on the instance-specific components.\r\n _constructDialog(dialogElements: DialogDefinition, parameters: SuiDomParams) {\r\n createTopDomContainer('.attributeDialog');\r\n const id = parameters.id;\r\n const b = buildDom;\r\n const r = b('div').classes('attributeModal').attr('id', 'attr-modal-' + id)\r\n .css('top', parameters.top + 'px').css('left', parameters.left + 'px')\r\n .append(b('spanb').classes('draggable button').append(b('span').classes('icon icon-move jsDbMove')))\r\n .append(b('h2').classes('dialog-label').text(this.label));\r\n\r\n var ctrl = b('div').classes('smoControlContainer');\r\n dialogElements.elements.filter((de) => de.control).forEach((de) => {\r\n let ctor = null;\r\n if (typeof (de.control) === 'function') {\r\n ctor = de.control;\r\n } else {\r\n ctor = eval('globalThis.Smo.' + de.control);\r\n }\r\n const classes = de.classes ? de.classes : '';\r\n const compParams: SuiBaseComponentParams = {\r\n classes, id: id + de.smoName, ...de\r\n }\r\n const control: SuiComponentBase = new ctor(this, compParams);\r\n this.components.push(control);\r\n this.cmap[de.smoName + 'Ctrl'] = control;\r\n ctrl.append(control.html);\r\n });\r\n r.append(ctrl);\r\n r.append(\r\n b('div').classes('buttonContainer').append(\r\n b('button').classes('ok-button button-left').text('OK')).append(\r\n b('button').classes('cancel-button button-center').text('Cancel')).append(\r\n b('button').classes('remove-button button-right').text('Remove').append(\r\n b('span').classes('icon icon-cancel-circle'))));\r\n $('.attributeDialog').html('');\r\n\r\n $('.attributeDialog').append(r.dom());\r\n\r\n const trapper = new InputTrapper('.attributeDialog');\r\n trapper.trap();\r\n $('.attributeDialog').find('.cancel-button').focus();\r\n return {\r\n element: $('.attributeDialog'),\r\n trapper\r\n };\r\n }\r\n // ### Complete\r\n // Dialogs take over the keyboard, so release that and trigger an event\r\n // that the dialog is closing that can resolve any outstanding promises.\r\n complete() {\r\n if (this.boundKeyboard && this.keydownHandler) {\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').trigger('dialogDismiss');\r\n this.dgDom.trapper.close();\r\n }\r\n // ### makeDraggable\r\n // generic code to make the dialog box draggable so it doesn't\r\n // get in front of stuff.\r\n makeDraggable() {\r\n createTopDomContainer('.draganime');\r\n const cb = () => { };\r\n draggable({\r\n parent: $(this.dgDom.element).find('.attributeModal'),\r\n handle: $(this.dgDom.element).find('.jsDbMove'),\r\n animateDiv: '.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n }\r\n // ### captureKeyboardPromise\r\n // capture keyboard events until the dialog closes,\r\n // then give control back to the current keyboard\r\n async captureKeyboardPromise() {\r\n if (!(this.startPromise)) {\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n return;\r\n }\r\n if (this.startPromise) {\r\n await this.startPromise;\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n }\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n }\r\n }\r\n\r\n // ### bindKeyboard\r\n // generic logic to grab keyboard elements for modal\r\n bindKeyboard() {\r\n this.boundKeyboard = true;\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n}\r\nexport function dialogConstructor(type: { new(parameters: SuiDialogParams): T; }, parameters: SuiDialogParams ): T {\r\n return new type(parameters);\r\n}\r\nexport function createAndDisplayDialog(ctor: new (parameters: SuiDialogParams) => T, parameters: SuiDialogParams): T {\r\n const instance: T = dialogConstructor(ctor, parameters);\r\n instance.display();\r\n return instance;\r\n}\r\n","import { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoDynamicText, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiDynamicDialogAdapter extends SuiComponentAdapter {\r\n modifier: SmoDynamicText;\r\n backup: SmoDynamicText;\r\n selection: SmoSelection;\r\n constructor(view: SuiScoreViewOperations, modifier: SmoDynamicText) {\r\n super(view);\r\n this.modifier = modifier;\r\n this.backup = new SmoDynamicText(this.modifier);\r\n this.selection = this.view.tracker.modifierSelections[0].selection!;\r\n }\r\n async cancel() {\r\n await this.view.addDynamic(this.selection, this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get xOffset() {\r\n return this.modifier.xOffset;\r\n }\r\n async remove() {\r\n await this.view.removeDynamic(this.modifier);\r\n }\r\n set xOffset(value: number) {\r\n this.modifier.xOffset = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get fontSize() {\r\n return this.modifier.fontSize;\r\n }\r\n set fontSize(value: number) {\r\n this.modifier.fontSize = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetLine() {\r\n return this.modifier.yOffsetLine;\r\n }\r\n set yOffsetLine(value: number) {\r\n this.modifier.yOffsetLine = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetPixels() {\r\n return this.modifier.yOffsetPixels;\r\n }\r\n set yOffsetPixels(value: number) {\r\n this.modifier.yOffsetPixels = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get text() {\r\n return this.modifier.text;\r\n }\r\n set text(value: string) {\r\n this.modifier.text = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n}\r\n// ## SuiDynamicModifierDialog\r\n// This is a poorly named class, it just allows you to placeText\r\n// dynamic text so it doesn't collide with something.\r\nexport class SuiDynamicModifierDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Dynamics Properties', elements:\r\n [{\r\n smoName: 'yOffsetLine',\r\n defaultValue: 11,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Line'\r\n }, {\r\n smoName: 'yOffsetPixels',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset Px'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'text',\r\n defaultValue: SmoDynamicText.dynamics.P,\r\n options: [{\r\n value: SmoDynamicText.dynamics.P,\r\n label: 'Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.PP,\r\n label: 'Pianissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.MP,\r\n label: 'Mezzo-Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.MF,\r\n label: 'Mezzo-Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.F,\r\n label: 'Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.FF,\r\n label: 'Fortissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.SFZ,\r\n label: 'Sforzando'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Text'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiDynamicDialogAdapter(parameters.view, parameters.modifier);\r\n super(SuiDynamicModifierDialog.dialogElements, { adapter, ...parameters });\r\n this.view.groupUndo(true);\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SuiDialogBase, SuiDialogParams, createAndDisplayDialog } from './dialog';\r\nimport { SuiHairpinAttributesDialog } from './hairpin';\r\nimport { SuiSlurAttributesDialog } from './slur';\r\nimport { SuiVoltaAttributeDialog } from './volta';\r\nimport { SuiLyricDialog } from './lyric';\r\nimport { SuiTieAttributesDialog } from './tie';\r\nimport { SuiDynamicModifierDialog } from './dynamics';\r\nimport { SuiTextBlockDialog } from './textBlock';\r\nimport { SuiTextBracketDialog } from './textBracket';\r\n\r\nexport type ModifiersWithDialogs = 'SmoStaffHairpin' | 'SmoTie' | 'SmoSlur' | 'SmoDynamicText' | 'SmoVolta' | 'SmoScoreText' | 'SmoLoadScore' | 'SmoLyric';\r\nexport var ModifiersWithDialogNames = ['SmoStaffHairpin', 'SmoTie', 'SmoSlur', 'SmoDynamicText', 'SmoVolta',\r\n 'SmoScoreText', 'SmoLoadScore', 'SmoLyric', 'SmoTextGroup', 'SmoStaffTextBracket'];\r\n\r\nexport function isModifierWithDialog(modifier: SmoModifier) {\r\n return ModifiersWithDialogNames.indexOf(modifier.attrs.type) >= 0;\r\n}\r\n/**\r\n * Dialogs bound to selectable elements like slurs, dynamics, are created \r\n * directly from a button/menu option\r\n * @category SuiDialog\r\n */\r\n export class SuiModifierDialogFactory {\r\n static createModifierDialog(modifier: SmoModifier, parameters: SuiDialogParams): SuiDialogBase | null {\r\n if (!isModifierWithDialog(modifier)) {\r\n return null;\r\n }\r\n const ctor = modifier.attrs.type;\r\n parameters.modifier = modifier;\r\n if (ctor === 'SmoStaffHairpin') {\r\n return createAndDisplayDialog(SuiHairpinAttributesDialog, parameters);\r\n } else if (ctor === 'SmoTie') {\r\n return createAndDisplayDialog(SuiTieAttributesDialog, parameters);\r\n } else if (ctor === 'SmoSlur') {\r\n return createAndDisplayDialog(SuiSlurAttributesDialog, parameters);\r\n } else if (ctor === 'SmoDynamicText') {\r\n return createAndDisplayDialog(SuiDynamicModifierDialog, parameters);\r\n } else if (ctor === 'SmoVolta') {\r\n return createAndDisplayDialog(SuiVoltaAttributeDialog, parameters);\r\n } else if (ctor === 'SmoTextGroup') {\r\n return createAndDisplayDialog(SuiTextBlockDialog, parameters);\r\n } else if (ctor === 'SmoStaffTextBracket') {\r\n return createAndDisplayDialog(SuiTextBracketDialog, parameters);\r\n } else {\r\n return createAndDisplayDialog(SuiLyricDialog, parameters);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogBase, SuiDialogParams, DialogDefinition } from './dialog';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SmoToXml } from '../../smo/mxml/smoToXml';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiFileDownloadComponent } from './components/fileDownload';\r\nimport { SuiDialogAdapterBase, SuiComponentAdapter } from './adapter';\r\nimport { addFileLink } from '../../common/htmlHelpers';\r\nimport { SmoToMidi } from '../../smo/midi/smoToMidi';\r\nimport { MidiToSmo } from '../../smo/midi/midiToSmo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoToVex } from '../../render/vex/toVex';\r\ndeclare var $: any;\r\n// declare var MidiParser: any;\r\ndeclare var parseMidi: any;\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\nexport class SuiSmoLoadAdapter extends SuiComponentAdapter {\r\n jsonFile: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.jsonFile;\r\n }\r\n set loadFile(value: string) {\r\n this.jsonFile = value;\r\n }\r\n async commit() {\r\n let scoreWorks = false;\r\n if (this.jsonFile.length > 0) {\r\n try {\r\n const score = SmoScore.deserialize(this.jsonFile);\r\n scoreWorks = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n/**\r\n * Load a SMO JSON file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadFileDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }\r\n ],\r\n staticText: []\r\n };\r\n get loadFileCtrl() {\r\n return this.cmap['loadFileCtrl'] as SuiFileDownloadComponent;\r\n }\r\n modifier: SuiSmoLoadAdapter;\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSmoLoadAdapter(parameters.view);\r\n parameters.ctor = 'SuiLoadFileDialog';\r\n super(SuiLoadFileDialog.dialogElements, { adapter, ...parameters });\r\n this.modifier = adapter;\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.modifier.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n async commit() {\r\n await this.modifier.commit();\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiXmlLoadAdapter extends SuiComponentAdapter {\r\n xmlFile: string = '';\r\n changeScore: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.xmlFile;\r\n }\r\n set loadFile(value: string) {\r\n this.xmlFile = value;\r\n }\r\n async commit() {\r\n try {\r\n const self = this;\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(this.xmlFile, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n this.changeScore = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n\r\n/**\r\n * Load a music XML file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadMxmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n },\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMxmlDialog';\r\n const adapter = new SuiXmlLoadAdapter(parameters.view);\r\n super(SuiLoadMxmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.adapter.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiMidiLoadAdapter extends SuiComponentAdapter {\r\n midiFile: any = null;\r\n changeScore: boolean = false;\r\n quantize: number = MidiToSmo.quantizeTicksDefault;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.midiFile;\r\n }\r\n set loadFile(value: any) {\r\n this.midiFile = value;\r\n }\r\n get quantizeDuration() {\r\n return this.quantize;\r\n }\r\n set quantizeDuration(value: number) {\r\n this.quantize = value;\r\n }\r\n async commit() {\r\n try {\r\n // midi parser expects data in UintArray form\r\n const ar = new Uint8Array(this.midiFile);\r\n const midi: any = parseMidi(ar);\r\n const midiParser = new MidiToSmo(midi, this.quantize);\r\n await this.view.changeScore(midiParser.convert());\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiLoadMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }, {\r\n smoName: 'quantizeDuration',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Quantize to:',\r\n options: [{\r\n value: 1024,\r\n label: '1/16th note'\r\n }, {\r\n value: 512,\r\n label: '1/32nd note'\r\n }, {\r\n value: 2048,\r\n label: '1/8th note'\r\n }]\r\n }, \r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMidiDialog';\r\n const adapter = new SuiMidiLoadAdapter(parameters.view);\r\n super(SuiLoadMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.adapter?.loadFile?.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n\r\nexport class SuiPrintFileDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Print Complete',\r\n elements: [],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiPrintFileDialog';\r\n super(SuiPrintFileDialog.dialogElements, parameters);\r\n }\r\n\r\n changed() { }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n $('body').removeClass('printing');\r\n this.view.renderer.restoreLayoutAfterPrint();\r\n window.dispatchEvent(new Event('resize'));\r\n this.complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').remove();\r\n $(dgDom.element).find('.remove-button').remove();\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiVexSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n page: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n\r\n get pageToRender() {\r\n return this.page;\r\n }\r\n set pageToRender(val: number) {\r\n this.page = val;\r\n }\r\n\r\n async _saveScore() {\r\n const vexText = SmoToVex.convert(this.view.score, { div: 'smoo', page: this.page });\r\n if (!this.fileName.endsWith('.js')) {\r\n this.fileName = this.fileName + '.js';\r\n }\r\n /* TODO: zip multiple render files\r\n const zipname = this.fileName.replace('.js', 'zip');\r\n const zipFile = new JSZip();\r\n zipFile.file(this.fileName, vexText);\r\n const content = await zipFile.generateAsync({ type: 'blob' });\r\n addFileLink(zipname, content, $('.saveLink')); */\r\n addFileLink(this.fileName, vexText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'vexRender.js';\r\n }\r\n if (filename.indexOf('.js') < 0) {\r\n filename = filename + '.js';\r\n }\r\n await this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveVexDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save as Vex Code',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }, {\r\n smoName: 'pageToRender',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Page',\r\n dataType: 'int',\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiVexSaveDialog';\r\n const adapter = new SuiVexSaveAdapter(parameters.view);\r\n super(SuiSaveVexDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSmoSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const json = this.view.storeScore.serialize();\r\n const jsonText = JSON.stringify(json);\r\n if (!this.fileName.endsWith('.json')) {\r\n this.fileName = this.fileName + '.json';\r\n }\r\n addFileLink(this.fileName, jsonText, $('.saveLink'));\r\n $('.saveLink a')[0].click(); \r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n const scoreInfo = this.view.score.scoreInfo;\r\n scoreInfo.name = rawFile;\r\n scoreInfo.version = scoreInfo.version + 1;\r\n await this.view.updateScoreInfo(scoreInfo);\r\n this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveFileDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiSaveFileDialog';\r\n const adapter = new SuiSmoSaveAdapter(parameters.view);\r\n super(SuiSaveFileDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n\r\nexport class SuiXmlSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveXml() {\r\n const dom = SmoToXml.convert(this.view.storeScore);\r\n const ser = new XMLSerializer();\r\n const xmlText = ser.serializeToString(dom);\r\n if (!this.fileName.endsWith('.xml') && !this.fileName.endsWith('.mxml')) {\r\n this.fileName = this.fileName + '.xml';\r\n }\r\n addFileLink(this.fileName, xmlText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.xml';\r\n }\r\n if (filename.indexOf('.xml') < 0) {\r\n filename = filename + '.xml';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveXml();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // noop\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveXmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveXmlDialog';\r\n const adapter = new SuiXmlSaveAdapter(parameters.view);\r\n super(SuiSaveXmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n\r\nexport class SuiMidiSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const bytes = SmoToMidi.convert(this.view.storeScore);\r\n if (!this.fileName.endsWith('.mid')) {\r\n this.fileName = this.fileName + '.mid';\r\n }\r\n addFileLink(this.fileName, bytes, $('.saveLink'), 'audio/midi');\r\n $('.saveLink a')[0].click();\r\n }\r\n\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.mid';\r\n }\r\n if (filename.indexOf('.mid') < 0) {\r\n filename = filename + '.mid';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveScore();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score as Midi',\r\n elements:\r\n [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveMidiDialog';\r\n const adapter = new SuiMidiSaveAdapter(parameters.view);\r\n super(SuiSaveMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n/* \r\nexport class SuiSaveActionsDialog extends SuiDialogBase {\r\n static dialogElements = \r\n {\r\n label: 'Save Score', elements:\r\n [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n value: string;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiSaveActionsDialog.dialogElements, parameters);\r\n this.value = SuiSaveActionsDialog.createName(this.view.score);\r\n }\r\n changed() {\r\n this.value = this.saveFileNameCtrl.getValue();\r\n }\r\n get saveFileNameCtrl() {\r\n return this.cmap['saveFileNameCtrl'] as SuiTextInputComponent;\r\n }\r\n commit() {\r\n let filename = this.value;\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this.view.saveActions(filename);\r\n this.complete();\r\n }\r\n display() {\r\n this.applyDisplayOptions();\r\n this.saveFileNameCtrl.setValue(this.value);\r\n this.bindElements();\r\n }\r\n static createName(score: SmoScore) {\r\n return score.scoreInfo.name + '-' + score.scoreInfo.version + '-actions.json';\r\n }\r\n static createAndDisplay(params: SuiDialogParams) {\r\n var dg = new SuiSaveActionsDialog(params);\r\n dg.display();\r\n }\r\n} */\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoScore, isEngravingFont } from '../../smo/data/score';\r\nimport { FontPurpose } from '../../smo/data/scoreModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreFontAdapter extends SuiComponentAdapter {\r\n fonts: FontPurpose[];\r\n backups: FontPurpose[];\r\n changed: boolean = false;\r\n static get defaultFont(): FontInfo {\r\n return {\r\n family: 'Merriweather',\r\n size: 14,\r\n weight: 'normal',\r\n style: 'normal'\r\n };\r\n }\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fonts = this.view.score.fonts;\r\n this.backups = JSON.parse(JSON.stringify(this.fonts));\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.fonts = this.backups;\r\n // This takes advantage of setter/getter side-effect\r\n this.engravingFont = this.engravingFont;\r\n this.lyricFont = this.lyricFont;\r\n this.chordFont = this.chordFont;\r\n }\r\n return PromiseHelpers.emptyPromise()\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n changeFont(purpose: number, name: string, fontInfo: FontInfo): FontPurpose {\r\n const fontSize = SmoScoreText.fontPointSize(fontInfo.family);\r\n const fontFamily = fontInfo.family ?? 'Arial';\r\n const fp: FontPurpose = {\r\n name,\r\n purpose,\r\n family: fontFamily,\r\n size: fontSize,\r\n custom: false\r\n };\r\n const fonts: FontPurpose[] = this.fonts.filter((ff) => ff.purpose !== purpose);\r\n fonts.push(fp);\r\n this.fonts = fonts;\r\n this.changed = true;\r\n return fp;\r\n }\r\n\r\n toInfo(fontPurpose: FontPurpose): FontInfo {\r\n return {\r\n weight: 'normal',\r\n style: 'normal',\r\n ...fontPurpose\r\n };\r\n }\r\n getInfo(purpose: number): FontInfo {\r\n const font = this.fonts.find((ff) => ff.purpose === purpose);\r\n if (font) {\r\n return this.toInfo(font);\r\n }\r\n return SuiScoreFontAdapter.defaultFont;\r\n }\r\n // Only family can be editor for engraving font, so parameter is just a string\r\n get engravingFont(): string {\r\n const font = this.fonts.find((ff) => ff.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n return this.toInfo(font).family ?? 'Arial';\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: string) {\r\n this.changed = true;\r\n const current = this.getInfo(SmoScore.fontPurposes.ENGRAVING);\r\n current.family = value;\r\n const fp = this.changeFont(SmoScore.fontPurposes.ENGRAVING, 'engraving', current);\r\n if (isEngravingFont(fp.family)) {\r\n this.view.setEngravingFontFamily(fp.family);\r\n }\r\n }\r\n set chordFont(fontInfo: FontInfo) {\r\n const fp = this.changeFont(SmoScore.fontPurposes.CHORDS, 'chords', fontInfo);\r\n this.view.setChordFont(this.toInfo(fp));\r\n\r\n this.changed = true;\r\n }\r\n get chordFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.CHORDS);\r\n }\r\n set lyricFont(fontInfo: FontInfo) {\r\n this.changed = true;\r\n const fp = this.changeFont(SmoScore.fontPurposes.LYRICS, 'lyrics', fontInfo);\r\n this.view.setLyricFont(this.toInfo(fp));\r\n }\r\n get lyricFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.LYRICS);\r\n }\r\n}\r\nexport class SuiScoreFontDialog extends SuiDialogAdapterBase {\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Fonts', elements:\r\n [{\r\n smoName: 'engravingFont',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n label: 'Engraving Font',\r\n options: [{\r\n value: 'Bravura',\r\n label: 'Bravura'\r\n }, {\r\n value: 'Gonville',\r\n label: 'Gonville'\r\n }, {\r\n value: 'Petaluma',\r\n label: 'Petaluma'\r\n }, {\r\n value: 'Leland',\r\n label: 'Leland'\r\n }]\r\n }, {\r\n smoName: 'chordFont',\r\n classes: 'chord-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Chord Font'\r\n }, {\r\n smoName: 'lyricFont',\r\n classes: 'lyric-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Lyric Font'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreFontDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreFontAdapter(params.view);\r\n super(SuiScoreFontDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiGlobalLayoutAdapter extends SuiComponentAdapter {\r\n scoreLayout: SmoGlobalLayout;\r\n backup: SmoGlobalLayout;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreLayout = this.view.score.layoutManager!.globalLayout;\r\n this.backup = this.view.score.layoutManager!.getGlobalLayout();\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n async writeValue(attr: GlobalLayoutAttributes, value: number) {\r\n if (this.scoreLayout[attr] === value) {\r\n return;\r\n }\r\n this.scoreLayout[attr] = value;\r\n await this.view.setGlobalLayout(this.scoreLayout)\r\n this.changed = true;\r\n }\r\n get noteSpacing() {\r\n return this.scoreLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.scoreLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.scoreLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.scoreLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeValue('svgScale', value);\r\n }\r\n get zoomScale() {\r\n return this.scoreLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeValue('zoomScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.scoreLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeValue('maxMeasureSystem', value);\r\n }\r\n\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.scoreLayout.pageWidth, this.scoreLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.scoreLayout.pageWidth = dims.width;\r\n this.scoreLayout.pageHeight = dims.height;\r\n }\r\n this.view.setGlobalLayout(this.scoreLayout)\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.setGlobalLayout(this.backup);\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiGlobalLayoutDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Global Settings', elements:\r\n [{\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measure/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiGlobalLayoutAdapter(params.view);\r\n super(SuiGlobalLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffHairpin, } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SmoHairpinNumberParams = 'xOffsetLeft' | 'xOffsetRight' | 'yOffset' | 'height' | 'position';\r\nexport class SuiHairpinAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffHairpin;\r\n hairpin: SmoStaffHairpin;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, hairpin: SmoStaffHairpin) {\r\n super(view);\r\n this.hairpin = hairpin;\r\n this.view = view;\r\n this.backup = new SmoStaffHairpin(this.hairpin);\r\n this.backup.attrs.id = hairpin.attrs.id;\r\n this.backup.associatedStaff = hairpin.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.hairpin, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.hairpin);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoHairpinNumberParams, val: number) {\r\n const current = new SmoStaffHairpin(this.hairpin);\r\n this.hairpin[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.hairpin);\r\n this.changed = true;\r\n }\r\n get xOffsetLeft() {\r\n return this.hairpin.xOffsetLeft;\r\n }\r\n set xOffsetLeft(val: number) {\r\n this.updateValue('xOffsetLeft', val);\r\n }\r\n get xOffsetRight() {\r\n return this.hairpin.xOffsetRight;\r\n }\r\n set xOffsetRight(val: number) {\r\n this.updateValue('xOffsetRight', val);\r\n }\r\n get yOffset() {\r\n return this.hairpin.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateValue('yOffset', val);\r\n }\r\n get height() {\r\n return this.hairpin.height;\r\n }\r\n set height(val: number) {\r\n this.updateValue('height', val);\r\n }\r\n get position() {\r\n return this.hairpin.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n}\r\nexport class SuiHairpinAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Hairpin Properties', elements:\r\n [{\r\n smoName: 'height',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Height'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Shift'\r\n }, {\r\n smoName: 'xOffsetRight',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Shift'\r\n }, {\r\n smoName: 'xOffsetLeft',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Shift'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiHairpinAdapter(parameters.view, parameters.modifier);\r\n super(SuiHairpinAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiInstrumentAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n backup: SmoInstrument;\r\n selections: SmoSelection[];\r\n selector: SmoSelector;\r\n applies: number = SuiInstrumentDialog.applyTo.selected;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n this.selections = SmoSelection.getMeasureList(this.view.tracker.selections);\r\n this.selector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n this.backup = new SmoInstrument(this.instrument);\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n get applyTo() {\r\n return this.applies;\r\n }\r\n set applyTo(value: number) {\r\n this.applies = value;\r\n if (value === SuiInstrumentDialog.applyTo.score) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, 0);\r\n } else if (this.applyTo === SuiInstrumentDialog.applyTo.remaining) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, this.selector.measure);\r\n } else {\r\n this.selections = this.view.tracker.selections;\r\n }\r\n }\r\n async commit() {\r\n // hack: the family name for musicxml purposes is here.\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(this.instrument.instrument);\r\n await this.view.changeInstrument(this.instrument, this.selections);\r\n }\r\n async cancel() {\r\n await this.view.changeInstrument(this.backup, this.selections);\r\n }\r\n async remove() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiInstrumentDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Name'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass (bowed)'\r\n }, {\r\n value: 'jazzBass',\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 'eGuitar',\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'flute',\r\n label: 'Flute'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [{\r\n value: 'treble',\r\n label:'Treble'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'tenor',\r\n label: 'Tenor'\r\n }, {\r\n value: 'alto',\r\n label: 'Alto'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }]\r\n }, {\r\n smoName: 'applyTo',\r\n defaultValue: SuiInstrumentDialog.applyTo.score,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply To',\r\n options: [{\r\n value: SuiInstrumentDialog.applyTo.score,\r\n label: 'Score'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.selected,\r\n label: 'Selected Measures'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.remaining,\r\n label: 'Remaining Measures'\r\n }]\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiInstrumentAdapter(parameters.view);\r\n super(SuiInstrumentDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { SmoLibrary } from '../fileio/library';\r\nimport { SuiDialogParams } from './dialog';\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { TreeComponentOption, SuiTreeComponent } from './components/tree';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface LibraryDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n label: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\nexport interface LibraryDefinition {\r\n label: string,\r\n elements: LibraryDefinitionElement[],\r\n staticText: Record[]\r\n}\r\nexport class SuiLibraryAdapter extends SuiComponentAdapter {\r\n topLib: SmoLibrary;\r\n elements: LibraryDefinition | null = null;\r\n selectedUrl: string = '';\r\n libHash: Record = {};\r\n config: SmoUiConfiguration;\r\n selectedLib: SmoLibrary | null;\r\n tree: Record = {};\r\n // If the selected lib is a leaf node (a score), this is the same as that\r\n selectedScore: SmoLibrary | null = null;\r\n constructor(view: SuiScoreViewOperations, config: SmoUiConfiguration) {\r\n super(view);\r\n this.config = config;\r\n this.topLib = new SmoLibrary({ url: this.config.libraryUrl });\r\n this.libHash = {};\r\n this.selectedLib = null;\r\n }\r\n loadPromise() {\r\n\r\n }\r\n initialize(): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n self.topLib.load().then(() => {\r\n self.libHash[self.topLib.url!] = self.topLib;\r\n resolve();\r\n });\r\n });\r\n }\r\n static addChildRecurse(options: TreeComponentOption[], parent: SmoLibrary, child: SmoLibrary) {\r\n options.push({ label: child.metadata.name, value: child.url, parent: parent.url, format: child.format, expanded: false });\r\n child.children.forEach((gchild) => {\r\n SuiLibraryAdapter.addChildRecurse(options, child, gchild);\r\n });\r\n }\r\n static createOptions(topLib: SmoLibrary) {\r\n const options: TreeComponentOption[] = [];\r\n topLib.children.forEach((child) => {\r\n SuiLibraryAdapter.addChildRecurse(options, topLib, child);\r\n });\r\n return options;\r\n }\r\n buildTreeRecurse(children: SmoLibrary[]) {\r\n children.forEach((child) => {\r\n this.tree[child.url!] = child;\r\n this.buildTreeRecurse(child.children);\r\n });\r\n }\r\n buildTree() {\r\n this.tree = {};\r\n this.buildTreeRecurse(this.topLib.children);\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n }\r\n async loadOptions(options: TreeComponentOption[]): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n if (self.selectedLib!.format === 'library') {\r\n if (!self.selectedLib!.loaded) {\r\n self.selectedLib!.load().then(() => {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n });\r\n } else {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n }\r\n }\r\n else {\r\n self.selectedScore = this.selectedLib;\r\n resolve();\r\n }\r\n });\r\n }\r\n async _loadScore() {\r\n await this.view.loadRemoteScore(this.selectedScore!.url!);\r\n }\r\n get selectedLibrary(): SmoLibrary | null {\r\n return this.selectedLib;\r\n }\r\n get smoLibrary() {\r\n return this.selectedUrl;\r\n }\r\n set smoLibrary(value: string) {\r\n this.selectedUrl = value;\r\n this.buildTree();\r\n this.selectedLib = this.tree[this.selectedUrl];\r\n if (this.selectedLib.format !== 'library') {\r\n this.selectedScore = this.selectedLib;\r\n } else {\r\n this.selectedScore = null;\r\n }\r\n }\r\n}\r\n// ## SuiLibraryDialog\r\n// Traverse the library nodes or load a score\r\nexport class SuiLibraryDialog extends SuiDialogAdapterBase {\r\n static dialogElements: LibraryDefinition = {\r\n label: 'Music Library', elements: [{\r\n smoName: 'smoLibrary',\r\n control: 'SuiTreeComponent',\r\n root: '',\r\n label: 'Selection',\r\n options: []\r\n }],\r\n staticText: []\r\n };\r\n static _createElements(topLib: SmoLibrary) {\r\n const elements: LibraryDefinition = JSON.parse(JSON.stringify(SuiLibraryDialog.dialogElements));\r\n const tree = elements.elements[0];\r\n tree.root = topLib.url!;\r\n (tree.options as any) = SuiLibraryAdapter.createOptions(topLib);\r\n return elements;\r\n }\r\n static _createAndDisplay(parameters: SuiDialogParams, adapter: SuiLibraryAdapter) {\r\n const elements = SuiLibraryDialog._createElements(adapter.topLib);\r\n const dg = new SuiLibraryDialog(parameters, elements, adapter);\r\n dg.display();\r\n }\r\n /** Library requires a load first, so createAndDisplayDialog won't work on it */\r\n static async createAndDisplay(parameters: SuiDialogParams, config: SmoUiConfiguration) {\r\n const adapter = new SuiLibraryAdapter(parameters.view, config);\r\n await adapter.initialize();\r\n SuiLibraryDialog._createAndDisplay(parameters, adapter);\r\n }\r\n constructor(parameters: SuiDialogParams, dialogElements: LibraryDefinition, adapter: SuiLibraryAdapter) {\r\n super(dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n if (this.adapter.selectedScore !== null) {\r\n await this.adapter._loadScore();\r\n } else {\r\n this.complete();\r\n }\r\n }\r\n get smoLibraryCtrl() {\r\n return this.cmap.smoLibraryCtrl as SuiTreeComponent;\r\n }\r\n async changed() {\r\n const okButton = $(this.dgDom.element).find('.ok-button');\r\n super.changed();\r\n if (this.adapter.selectedLib!.format === 'library') {\r\n $(okButton).prop('disabled', true);\r\n const options: TreeComponentOption[] = [];\r\n await this.adapter.loadOptions(options);\r\n this.smoLibraryCtrl.updateOptions(options);\r\n $(this.smoLibraryCtrl._getInputElement()).find('li[data-value=\"'+this.smoLibraryCtrl.getValue()+'\"] button.expander').click();\r\n } else {\r\n $(okButton).prop('disabled', false);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiLyricComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoSelector, SmoSelection } from '../../smo/xform/selections'\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SmoRenderConfiguration } from '../../render/sui/configuration';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n\r\nfunction isSmoLyric(modifier: any):modifier is SmoLyric {\r\n return modifier?.ctor === 'SmoLyric';\r\n}\r\nexport class SuiLyricDialog extends SuiDialogBase {\r\n static get ctor() {\r\n return 'SuiLyricDialog';\r\n }\r\n static get idleLyricTime() {\r\n return 5000;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Lyric Editor', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Verse',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }, {\r\n value: 3,\r\n label: '4'\r\n }\r\n ]\r\n }, {\r\n smoName: 'translateY',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'lyricEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiLyricComponent',\r\n label: 'Edit Lyrics',\r\n options: []\r\n },\r\n ], staticText: [\r\n { doneEditing: 'Done Editing Lyrics' },\r\n { undo: 'Undo Lyrics' },\r\n { label: 'Lyric Editor' }\r\n ]\r\n };\r\n originalRefreshTimer: number;\r\n modifier: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n config: SmoRenderConfiguration;\r\n verse: number = 0;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiLyricDialog.dialogElements, parameters);\r\n this.config = this.view.config;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n this.originalRefreshTimer = this.config.idleRedrawTime;\r\n this.config.idleRedrawTime = SuiLyricDialog.idleLyricTime;\r\n this.verse = 0;\r\n }\r\n get lyricEditorCtrl(): SuiLyricComponent {\r\n return this.cmap.lyricEditorCtrl as SuiLyricComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get verseCtrl(): SuiDropdownComponent {\r\n return this.cmap.verseCtrl as SuiDropdownComponent;\r\n }\r\n display() {\r\n super.display();\r\n $(this.dgDom.element).find('.smoControl').each((ix: number, ctrl: any) => {\r\n if (!$(ctrl).hasClass('cbLyricEdit')) {\r\n $(ctrl).addClass('fold-textedit');\r\n }\r\n });\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n\r\n if (this.lyricEditorCtrl.session && this.lyricEditorCtrl.session.lyric) {\r\n const lyric = this.lyricEditorCtrl.session.lyric;\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size,\r\n weight: 'normal'\r\n });\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.modifier = lyric;\r\n this.verse = lyric.verse;\r\n this.selector = selector;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n _focusSelection() {\r\n const selection = this.lyricEditorCtrl.session?.selection;\r\n const note = selection?.note;\r\n const box: SvgBox | null = note?.logicalBox ?? null;\r\n if (box) {\r\n this.view.scroller.scrollVisibleBox(this.view.renderer.pageMap.svgToClient(box));\r\n }\r\n }\r\n changed() {\r\n this.lyricEditorCtrl.verse = parseInt(this.verseCtrl.getValue().toString(), 10);\r\n\r\n // TODO: make these undoable\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setLyricFont({ 'family': fontInfo.family, size: fontInfo.size, weight: 'normal' });\r\n }\r\n if (this.translateYCtrl && this.modifier && this.selector) {\r\n this.modifier.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.modifier);\r\n }\r\n }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n this.lyricEditorCtrl.startEditSession();\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.lyricEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.lyricEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n _complete() {\r\n if (this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.endSession();\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.config.idleRedrawTime = this.originalRefreshTimer;\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoMeasureFormat, SmoMeasureFormatNumberAttributes, SmoMeasueFormatBooleanAttributes } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiMeasureFormatAdapter extends SuiComponentAdapter {\r\n format: SmoMeasureFormat;\r\n backup: SmoMeasureFormat;\r\n measure: SmoMeasure;\r\n renumberIndex: number;\r\n originalIndex: number;\r\n edited: boolean = false;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.format = measure.format;\r\n this.renumberIndex = this.originalIndex = measure.measureNumber.localIndex;\r\n this.backup = new SmoMeasureFormat(this.format);\r\n this.measure = measure;\r\n }\r\n writeNumber(param: SmoMeasureFormatNumberAttributes, value: number) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoMeasueFormatBooleanAttributes, value: boolean) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.edited) {\r\n await this.view.setMeasureFormat(this.backup);\r\n }\r\n if (this.localIndex !== this.originalIndex) {\r\n await this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.originalIndex);\r\n }\r\n }\r\n get padLeft() {\r\n return this.format.padLeft;\r\n }\r\n set padLeft(value: number) {\r\n if (value > 0) {\r\n $('.attributeDialog .attributeModal').addClass('pad-left-select');\r\n } else {\r\n $('.attributeDialog .attributeModal').removeClass('pad-left-select');\r\n }\r\n this.writeNumber('padLeft', value);\r\n }\r\n get skipMeasureCount() {\r\n return this.format.skipMeasureCount;\r\n }\r\n set skipMeasureCount(value: boolean) {\r\n this.writeBoolean('skipMeasureCount', value);\r\n }\r\n get localIndex(): number {\r\n return this.renumberIndex;\r\n }\r\n set localIndex(value: number) {\r\n if (this.renumberIndex !== value && value >= 0) {\r\n this.renumberIndex = value;\r\n this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.localIndex);\r\n }\r\n }\r\n get forceRest() {\r\n return this.format.forceRest;\r\n }\r\n set forceRest(value: boolean) {\r\n this.writeBoolean('forceRest', value);\r\n }\r\n get repeatSymbol() {\r\n return this.measure.repeatSymbol;\r\n }\r\n set repeatSymbol(value: boolean) {\r\n const repeatCount = value ? 1 : 0;\r\n this.view.updateRepeatCount(repeatCount);\r\n this.measure.repeatSymbol = value;\r\n this.measure.repeatCount = repeatCount;\r\n }\r\n get restBreak() {\r\n return this.format.restBreak;\r\n }\r\n set restBreak(value: boolean) {\r\n this.writeBoolean('restBreak', value);\r\n }\r\n get customStretch() {\r\n return this.format.customStretch;\r\n }\r\n set customStretch(value: number) {\r\n this.writeNumber('customStretch', value);\r\n }\r\n get customProportion() {\r\n return this.format.proportionality;\r\n }\r\n set customProportion(value: number) {\r\n this.writeNumber('proportionality', value);\r\n }\r\n get autoJustify() {\r\n return this.format.autoJustify;\r\n }\r\n set autoJustify(value: boolean) {\r\n this.writeBoolean('autoJustify', value);\r\n }\r\n get padAllInSystem() {\r\n return this.format.padAllInSystem;\r\n }\r\n set padAllInSystem(value: boolean) {\r\n this.writeBoolean('padAllInSystem', value);\r\n }\r\n get systemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n set systemBreak(value: boolean) {\r\n this.writeBoolean('systemBreak', value);\r\n }\r\n}\r\n// ## measureDialogs.js\r\n// This file contains dialogs that affect all measures at a certain position,\r\n// such as tempo or time signature.\r\nexport class SuiMeasureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Measure Properties',\r\n elements:\r\n [{\r\n smoName: 'padLeft',\r\n control: 'SuiRockerComponent',\r\n label: 'Pad Left (px)'\r\n }, {\r\n smoName: 'customStretch',\r\n control: 'SuiRockerComponent',\r\n label: 'Stretch Contents'\r\n }, {\r\n smoName: 'customProportion',\r\n control: 'SuiRockerComponent',\r\n increment: 10,\r\n label: 'Proportionalality'\r\n }, {\r\n smoName: 'localIndex',\r\n control: 'SuiRockerComponent',\r\n increment: 1,\r\n label: 'Measure Number'\r\n }, {\r\n smoName: 'padAllInSystem',\r\n control: 'SuiToggleComponent',\r\n label: 'Pad all measures in system'\r\n }, {\r\n smoName: 'autoJustify',\r\n control: 'SuiToggleComponent',\r\n label: 'Justify Columns'\r\n }, {\r\n smoName: 'restBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'Break Multimeasure Rest in Part'\r\n }, {\r\n smoName: 'forceRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Force Multimeasure Rest'\r\n }, {\r\n smoName: 'repeatSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Repeat Symbol'\r\n }, {\r\n smoName: 'skipMeasureCount',\r\n control: 'SuiToggleComponent',\r\n label: 'Skip in max measure count'\r\n }, {\r\n smoName: 'systemBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'System break before this measure'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n const adapter = new SuiMeasureFormatAdapter(parameters.view, measure);\r\n super(SuiMeasureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiNewPartAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n alignWithPreviousVal: boolean = true;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n }\r\n set alignWithPrevious(val: boolean) {\r\n this.alignWithPreviousVal = val;\r\n }\r\n get alignWithPrevious() {\r\n return this.alignWithPreviousVal;\r\n }\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n }\r\n async commit() {\r\n const staffParams: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n staffParams.staffId = this.view.storeScore.staves.length;\r\n staffParams.measureInstrumentMap[0] = this.instrument;\r\n staffParams.alignWithPrevious = this.alignWithPreviousVal;\r\n await this.view.addStaff(staffParams);\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiNewPartDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'alignWithPrevious',\r\n control: 'SuiToggleComponent',\r\n label: 'Align Notes with Previous Staff'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [ {\r\n label: 'Treble Clef Staff',\r\n value: 'treble'\r\n }, {\r\n label: 'Bass Clef Staff',\r\n value: 'bass'\r\n }, {\r\n label: 'Alto Clef Staff',\r\n value: 'alto'\r\n }, {\r\n label: 'Tenor',\r\n value: 'tenor'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }] \r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiNewPartAdapter(parameters.view);\r\n super(SuiNewPartDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoPageLayout, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPageLayoutAdapter extends SuiComponentAdapter {\r\n static get layoutTypes(): Record {\r\n return {\r\n 'all': -1,\r\n 'remaining': -2,\r\n 'page': -3\r\n }\r\n }\r\n layouts: SmoPageLayout[];\r\n backup: SmoPageLayout[] = [];\r\n currentPage: number;\r\n changed: boolean = false;\r\n currentLayout: SmoPageLayout;\r\n layoutManager: SmoLayoutManager;\r\n view: SuiScoreViewOperations\r\n applyTo: number = SuiPageLayoutAdapter.layoutTypes.all;\r\n options: DialogDefinitionOption[] = [];\r\n async updateLayouts() {\r\n let i = 0;\r\n let startPage = this.currentPage;\r\n let endPage = this.layouts.length;\r\n if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.page) {\r\n endPage = startPage;\r\n } else if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.all) {\r\n startPage = 0;\r\n }\r\n await this.view.setPageLayouts(this.currentLayout, startPage, endPage);\r\n this.changed = true;\r\n }\r\n get enablePages() {\r\n return this.layouts.length > 1;\r\n }\r\n get applyToPage() {\r\n return this.applyTo;\r\n }\r\n set applyToPage(value: number) {\r\n this.applyTo = value;\r\n this.updateLayouts();\r\n }\r\n set leftMargin(value: number) {\r\n this.currentLayout.leftMargin = value;\r\n this.updateLayouts();\r\n }\r\n get leftMargin() {\r\n return this.currentLayout.leftMargin;\r\n }\r\n get rightMargin() {\r\n return this.currentLayout.rightMargin;\r\n }\r\n set rightMargin(value: number) {\r\n this.currentLayout.rightMargin = value;\r\n this.updateLayouts();\r\n }\r\n get topMargin() {\r\n return this.currentLayout.topMargin;\r\n }\r\n set topMargin(value) {\r\n this.currentLayout.topMargin = value;\r\n this.updateLayouts();\r\n }\r\n get bottomMargin() {\r\n return this.currentLayout.bottomMargin;\r\n }\r\n set bottomMargin(value) {\r\n this.currentLayout.bottomMargin = value;\r\n this.updateLayouts();\r\n }\r\n get interGap() {\r\n return this.currentLayout.interGap;\r\n }\r\n set interGap(value) {\r\n this.currentLayout.interGap = value;\r\n this.updateLayouts();\r\n }\r\n get intraGap() {\r\n return this.currentLayout.intraGap;\r\n }\r\n set intraGap(value) {\r\n this.currentLayout.intraGap = value;\r\n this.updateLayouts();\r\n }\r\n async cancel() {\r\n let i = 0;\r\n if (!this.changed) {\r\n return;\r\n }\r\n for (i = 0; i < this.backup.length; ++i) {\r\n // Avoid multiple page rerender...\r\n this.view._setPageLayout(this.backup[i], i);\r\n }\r\n await this.view.refreshViewport();\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n let i = 0;\r\n this.view = view;\r\n this.layoutManager = this.view.score.layoutManager!;\r\n this.currentPage = this.view.getFocusedPage();\r\n for (i = 0; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.backup.push(new SmoPageLayout(this.layoutManager.pageLayouts[i]));\r\n }\r\n for (i = 1; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.options.push({ value: i + 1, label: 'Page ' + (i + 1) });\r\n }\r\n this.layouts = this.layoutManager.getPageLayouts();\r\n this.currentLayout = this.layoutManager.pageLayouts[this.currentPage];\r\n if (this.layoutManager.pageLayouts.length === 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n } else {\r\n if (this.currentPage >= 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.remaining;\r\n } else {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n }\r\n }\r\n }\r\n}\r\n// ## SuiLayoutDialog\r\n// The layout dialog has page-specific layout parameters\r\nexport class SuiPageLayoutDialog extends SuiDialogAdapterBase {\r\n static get layoutParams() {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Page Layouts', elements:\r\n [{\r\n smoName: 'applyToPage',\r\n defaultValue: -1,\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply to Page',\r\n dataType: 'int',\r\n options: [{\r\n value: -1,\r\n label: 'All'\r\n }, {\r\n value: -2,\r\n label: 'All Remaining'\r\n }, {\r\n value: 1,\r\n label: 'Page 1'\r\n }]\r\n }, {\r\n smoName: 'leftMargin',\r\n defaultValue: SmoPageLayout.defaults.leftMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Margin (px)'\r\n }, {\r\n smoName: 'rightMargin',\r\n defaultValue: SmoPageLayout.defaults.rightMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Margin (px)'\r\n }, {\r\n smoName: 'topMargin',\r\n defaultValue: SmoPageLayout.defaults.topMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Top Margin (px)'\r\n }, {\r\n smoName: 'bottomMargin',\r\n defaultValue: SmoPageLayout.defaults.bottomMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Bottom Margin (px)'\r\n }, {\r\n smoName: 'interGap',\r\n defaultValue: SmoPageLayout.defaults.interGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Inter-System Margin'\r\n }, {\r\n smoName: 'intraGap',\r\n defaultValue: SmoPageLayout.defaults.intraGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Intra-System Margin'\r\n }],\r\n staticText: [\r\n { all: 'Entire Score' },\r\n { remaining: 'Remaining Pages' },\r\n { current: 'Current Page' }\r\n ]\r\n };\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPageLayoutAdapter(params.view);\r\n super(SuiPageLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoPartInfo, SmoPartInfoStringType } from '../../smo/data/partInfo';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPartInfoAdapter extends SuiComponentAdapter {\r\n partInfo: SmoPartInfo;\r\n backup: SmoPartInfo;\r\n selection: SmoSelection;\r\n changed: boolean = false;\r\n currentView: ViewMapEntry[] = [];\r\n resetPart: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n const selector = SmoSelector.default;\r\n this.selection = SmoSelection.measureSelection(this.view.score, selector.staff, selector.measure)!;\r\n this.partInfo = new SmoPartInfo(this.selection.staff.partInfo);\r\n this.backup = new SmoPartInfo(this.selection.staff.partInfo);\r\n }\r\n async update() {\r\n this.changed = true; \r\n // Since update will change the displayed score, wait for any display change to complete first.\r\n await this.view.renderer.updatePromise();\r\n await this.view.updatePartInfo(this.partInfo);\r\n }\r\n writeLayoutValue(attr: GlobalLayoutAttributes, value: number) {\r\n // no change?\r\n if (this.partInfo.layoutManager.globalLayout[attr] === value) {\r\n return;\r\n }\r\n this.partInfo.layoutManager.globalLayout[attr] = value;\r\n this.update();\r\n }\r\n writeStringValue(attr: SmoPartInfoStringType, value: string) {\r\n if (this.partInfo[attr] === value) {\r\n return;\r\n }\r\n this.partInfo[attr] = value;\r\n this.changed = true;\r\n }\r\n get expandMultimeasureRest() {\r\n return this.partInfo.expandMultimeasureRests;\r\n }\r\n set expandMultimeasureRest(value: boolean) {\r\n this.partInfo.expandMultimeasureRests = value;\r\n this.resetPart = true;\r\n this.update();\r\n }\r\n get noteSpacing() {\r\n return this.partInfo.layoutManager.globalLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeLayoutValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.partInfo.layoutManager.globalLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeLayoutValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.partInfo.layoutManager.globalLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeLayoutValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.partInfo.layoutManager.globalLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeLayoutValue('svgScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.partInfo.layoutManager.globalLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeLayoutValue('maxMeasureSystem', value);\r\n }\r\n get zoomScale() {\r\n return this.partInfo.layoutManager.globalLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeLayoutValue('zoomScale', value);\r\n }\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.partInfo.layoutManager.globalLayout.pageWidth, this.partInfo.layoutManager.globalLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.partInfo.layoutManager.globalLayout.pageWidth = dims.width;\r\n this.partInfo.layoutManager.globalLayout.pageHeight = dims.height;\r\n }\r\n this.update();\r\n }\r\n get partName(): string {\r\n return this.partInfo.partName;\r\n }\r\n set partName(value: string) {\r\n this.writeStringValue('partName', value);\r\n }\r\n get partAbbreviation(): string {\r\n return this.partInfo.partAbbreviation;\r\n }\r\n set partAbbreviation(value: string) {\r\n this.writeStringValue('partAbbreviation', value);\r\n }\r\n get includeNext(): boolean {\r\n return this.partInfo.stavesAfter === 1 && this.partInfo.stavesBefore === 0;\r\n }\r\n set includeNext(value: boolean) {\r\n const oldValue = this.partInfo.stavesAfter;\r\n if (value) {\r\n this.partInfo.stavesAfter = 1;\r\n } else {\r\n this.partInfo.stavesAfter = 0;\r\n }\r\n if (oldValue !== this.partInfo.stavesAfter) {\r\n // special case for a 2-stave score. The score and the part are the same so we stick to \r\n // score view.\r\n if (this.partInfo.stavesAfter === 1 && this.view.storeScore.staves.length === 2) {\r\n this.update().then(() => {\r\n this.view.viewAll();\r\n });\r\n return;\r\n }\r\n }\r\n this.update();\r\n }\r\n get cueInScore(): boolean {\r\n return this.partInfo.cueInScore;\r\n }\r\n set cueInScore(value: boolean) {\r\n this.partInfo.cueInScore = value;\r\n this.update();\r\n }\r\n get preserveTextGroups(): boolean {\r\n return this.partInfo.preserveTextGroups;\r\n }\r\n set preserveTextGroups(value: boolean) {\r\n if (value === true && this.partInfo.textGroups.length === 0) {\r\n this.view.score.textGroups.forEach((tg) => {\r\n const ngrp: SmoTextGroup = SmoTextGroup.deserializePreserveId(tg.serialize()) as SmoTextGroup;\r\n this.partInfo.textGroups.push(ngrp);\r\n });\r\n }\r\n this.partInfo.preserveTextGroups = value;\r\n this.update();\r\n }\r\n async commit() {\r\n if (this.changed) {\r\n await this.update();\r\n }\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.partInfo = this.backup;\r\n await this.update();\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiPartInfoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Part Settings', elements:\r\n [{\r\n smoName: 'partName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'partAbbreviation',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Abbrev.'\r\n }, {\r\n smoName: 'preserveTextGroups',\r\n control: 'SuiToggleComponent',\r\n label: 'Part-specific text'\r\n }, {\r\n smoName: 'cueInScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Show as Cues in score'\r\n }, {\r\n smoName: 'includeNext',\r\n control: 'SuiToggleComponent',\r\n label: 'Include Next Staff in Part'\r\n }, {\r\n smoName: 'expandMultimeasureRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Expand Multimeasure Rests'\r\n }, {\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measures/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPartInfoAdapter(params.view);\r\n super(SuiPartInfoDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n if (this.cmap.includeNextCtrl.changeFlag) {\r\n const includeNext = this.cmap.includeNextCtrl as SuiToggleComponent;\r\n if (includeNext.getValue()) {\r\n const partMap = this.view.getPartMap();\r\n if (this.view.storeScore.staves.length === 2) {\r\n this.complete();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScorePreferences } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\n\r\nexport class SuiScorePreferencesAdapter extends SuiComponentAdapter {\r\n preferences: SmoScorePreferences;\r\n backup: SmoScorePreferences;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.preferences = new SmoScorePreferences(view.score.preferences);\r\n this.backup = JSON.parse(JSON.stringify(this.preferences));\r\n }\r\n get autoAdvance(): boolean {\r\n return this.preferences.autoAdvance;\r\n }\r\n set autoAdvance(value: boolean) {\r\n this.preferences.autoAdvance = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get autoPlay(): boolean {\r\n return this.preferences.autoPlay;\r\n }\r\n set autoPlay(value: boolean) {\r\n this.preferences.autoPlay = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get showPiano(): boolean {\r\n return this.preferences.showPiano;\r\n }\r\n set showPiano(value: boolean) {\r\n this.preferences.showPiano = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get hideEmptyLines(): boolean {\r\n return this.preferences.hideEmptyLines;\r\n }\r\n set hideEmptyLines(value: boolean) {\r\n this.preferences.hideEmptyLines = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultDupleDuration() {\r\n return this.preferences.defaultDupleDuration;\r\n }\r\n set defaultDupleDuration(value: number) {\r\n this.preferences.defaultDupleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultTripleDuration() {\r\n return this.preferences.defaultTripleDuration;\r\n }\r\n set defaultTripleDuration(value: number) {\r\n this.preferences.defaultTripleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get transposingScore() {\r\n return this.preferences.transposingScore;\r\n }\r\n set transposingScore(value: boolean) {\r\n this.preferences.transposingScore = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n async cancel() {\r\n const p1 = JSON.stringify(this.preferences);\r\n const p2 = JSON.stringify(this.backup);\r\n if (p1 !== p2) {\r\n await this.view.updateScorePreferences(this.backup);\r\n }\r\n }\r\n commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiScorePreferencesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences',\r\n elements: [{\r\n smoName: 'autoAdvance',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-advance after pitch'\r\n }, {\r\n smoName: 'autoPlay',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-play sounds for note entry'\r\n }, {\r\n smoName: 'showPiano',\r\n control: 'SuiToggleComponent',\r\n label: 'Show Piano widget'\r\n }, {\r\n smoName: 'transposingScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Tranpose Score'\r\n }, {\r\n smoName: 'hideEmptyLines',\r\n control: 'SuiToggleComponent',\r\n label: 'Hide Empty Lines'\r\n }, {\r\n smoName: 'defaultDupleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (even meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 4096,\r\n label: '1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }, {\r\n smoName: 'defaultTripleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (triple meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 6144,\r\n label: 'dotted 1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScorePreferencesAdapter(params.view);\r\n super(SuiScorePreferencesDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreInfo, SmoScoreInfoKeys } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupPurpose } from '../../smo/data/scoreText';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { TextCheckPair } from './components/textCheck';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiScoreIdentificationAdapter extends SuiComponentAdapter {\r\n scoreInfo: SmoScoreInfo;\r\n backup: SmoScoreInfo;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreInfo = this.view.score.scoreInfo;\r\n this.backup = JSON.parse(JSON.stringify(this.scoreInfo));\r\n }\r\n get title(): string {\r\n return this.scoreInfo.title;\r\n }\r\n set title(value: string) {\r\n this.scoreInfo.title = value;\r\n }\r\n get subTitle(): string {\r\n return this.scoreInfo.subTitle;\r\n }\r\n set subTitle(value: string) {\r\n this.scoreInfo.subTitle = value;\r\n }\r\n get composer(): string {\r\n return this.scoreInfo.composer;\r\n }\r\n set composer(value: string) {\r\n this.scoreInfo.composer = value;\r\n }\r\n get copyright(): string {\r\n return this.scoreInfo.copyright;\r\n }\r\n set copyright(value: string) {\r\n this.scoreInfo.copyright = value;\r\n }\r\n get name() {\r\n return this.scoreInfo.name;\r\n }\r\n set name(value: string) {\r\n this.scoreInfo.name = value;\r\n }\r\n async commit() {\r\n await this.view.updateScoreInfo(this.scoreInfo);\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n// ## SuiScoreIdentificationDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiScoreIdentificationDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences', elements:\r\n [{\r\n smoName: 'name',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Score Name',\r\n }, {\r\n smoName: 'title',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Title',\r\n }, {\r\n smoName: 'subTitle',\r\n control: 'SuiTextInputComponent',\r\n label: 'Sub Title',\r\n }, {\r\n smoName: 'composer',\r\n control: 'SuiTextInputComponent',\r\n label: 'Composer',\r\n }, {\r\n smoName: 'copyright',\r\n control: 'SuiTextInputComponent',\r\n label: 'Copyright'\r\n }],\r\n staticText: [\r\n { titleText: 'Title' },\r\n { subTitleText: 'Sub-title' },\r\n { copyrightText: 'Copyright' },\r\n { composerText: 'Composer' },\r\n { show: 'Show' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreIdentificationDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreIdentificationAdapter(params.view);\r\n super(SuiScoreIdentificationDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { StaffCheckComponent } from './components/staffComponents';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\nexport class SuiScoreViewAdapter extends SuiComponentAdapter {\r\n originalView: ViewMapEntry[];\r\n currentView: ViewMapEntry[];\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n this.originalView = JSON.parse(JSON.stringify(this.currentView));\r\n }\r\n async cancel() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.originalView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async commit() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.currentView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get scoreView(): ViewMapEntry[] {\r\n return this.currentView;\r\n }\r\n set scoreView(value: ViewMapEntry[]) {\r\n this.currentView = value;\r\n }\r\n}\r\n// ## SuiScoreViewDialog\r\n// decide which rows of the score to look at\r\nexport class SuiScoreViewDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score View', elements:\r\n [{\r\n smoName: 'scoreView',\r\n control: 'StaffCheckComponent',\r\n label: 'Show staff',\r\n }],\r\n staticText: []\r\n };\r\n originalValue: number[];\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiScoreViewAdapter(parameters.view);\r\n super(SuiScoreViewDialog.dialogElements, { adapter, ...parameters });\r\n this.originalValue = JSON.parse(JSON.stringify(this.view.getView()));\r\n }\r\n get scoreViewCtrl() {\r\n return this.cmap.scoreViewCtrl as StaffCheckComponent;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSlur, SlurNumberParams } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SlurNumber = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' | 'position_end' | 'cp1x'\r\n| 'cp1y' | 'cp2x' | 'cp2y';\r\nexport type SlurBool = 'invert';\r\nexport class SuiSlurAdapter extends SuiComponentAdapter {\r\nslur: SmoSlur;\r\nbackup: SmoSlur;\r\nchanged: boolean = false;\r\nupdating: boolean = false;\r\nconstructor(view: SuiScoreViewOperations, slur: SmoSlur) {\r\n super(view);\r\n this.slur = slur;\r\n this.view = view;\r\n this.backup = new SmoSlur(this.slur);\r\n // Set the same id so the erase works\r\n this.backup.attrs.id = slur.attrs.id;\r\n this.backup.associatedStaff = this.slur.associatedStaff;\r\n}\r\nwriteSlurNumber(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurNumber, value: number) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nwriteSlurBool(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurBool, value: boolean) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nasync cancel() {\r\n if (!this.changed) {\r\n return;\r\n }\r\n await this.view.addOrUpdateStaffModifier(this.slur, this.backup);\r\n}\r\nasync commit() {\r\n return PromiseHelpers.emptyPromise();\r\n}\r\nget resetAll(): boolean {\r\n return false;\r\n}\r\nset resetAll(value: boolean) {\r\n this.resetDefaults = value;\r\n const slurs: SmoSlur[] = [];\r\n const self = this;\r\n this.updating = true;\r\n const updateSlur = async (score: SmoScore, slur: SmoSlur) => {\r\n const params = SmoOperation.getDefaultSlurDirection(score, slur.startSelector, slur.endSelector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n const original = new SmoSlur(slur);\r\n SlurNumberParams.forEach((key) => {\r\n slur[key] = params[key]; \r\n });\r\n await self.view.addOrUpdateStaffModifier(original, slur);\r\n }\r\n new Promise((resolve) => {\r\n const nextSlur = () => {\r\n setTimeout(() => {\r\n if (slurs.length) {\r\n const slur = slurs.pop();\r\n updateSlur(self.view.score, slur!).then(() => {\r\n nextSlur();\r\n });\r\n } else {\r\n self.updating = false;\r\n resolve();\r\n }\r\n }, 1);\r\n }\r\n nextSlur();\r\n });\r\n this.view.score.staves.forEach((staff) => {\r\n staff.modifiers.filter((x) => x.ctor === 'SmoSlur').forEach((smoObj) => {\r\n const slur = smoObj as SmoSlur;\r\n slurs.push(slur);\r\n });\r\n });\r\n this.changed = true;\r\n}\r\nget resetDefaults(): boolean {\r\n return false;\r\n}\r\nset resetDefaults(value: boolean) {\r\n const params = SmoOperation.getDefaultSlurDirection(this.view.score, this.slur.startSelector, this.slur.endSelector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n SlurNumberParams.forEach((key) => {\r\n this.slur[key] = params[key]; \r\n });\r\n this.view.addOrUpdateStaffModifier(this.backup, this.slur);\r\n this.changed = true;\r\n}\r\nget cp2y(): number {\r\n return this.slur.cp2y;\r\n}\r\nset cp2y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2y', value);\r\n} \r\nget cp2x(): number {\r\n return this.slur.cp2x;\r\n}\r\nset cp2x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2x', value);\r\n} \r\nget cp1y(): number {\r\n return this.slur.cp1y;\r\n}\r\nset cp1y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1y', value);\r\n} \r\nget cp1x(): number {\r\n return this.slur.cp1x;\r\n}\r\nset cp1x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1x', value);\r\n} \r\nget invert(): boolean {\r\n return this.slur.invert;\r\n}\r\nset invert(value: boolean) {\r\n this.writeSlurBool(this.view, this.slur, 'invert', value);\r\n}\r\nget position_end(): number {\r\n return this.slur.position_end;\r\n}\r\nset position_end(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position_end', value);\r\n}\r\nget position(): number {\r\n return this.slur.position;\r\n}\r\nset position(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position', value);\r\n}\r\nget yOffset(): number {\r\n return this.slur.yOffset;\r\n}\r\nset yOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'yOffset', value);\r\n}\r\nget xOffset(): number {\r\n return this.slur.xOffset;\r\n}\r\nset xOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'xOffset', value);\r\n}\r\nget thickness(): number {\r\n return this.slur.thickness;\r\n}\r\nset thickness(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'thickness', value);\r\n}\r\nget spacing(): number {\r\n return this.slur.spacing;\r\n}\r\nset spacing(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'spacing', value);\r\n}\r\nasync remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n}\r\n}\r\nexport class SuiSlurAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = { \r\n label: 'Slur Properties', elements: [{\r\n smoName: 'spacing',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing'\r\n }, {\r\n smoName: 'thickness',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Thickness'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'position',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Start Position'\r\n }, {\r\n smoName: 'position_end',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'End Position'\r\n }, {\r\n smoName: 'invert',\r\n control: 'SuiToggleComponent',\r\n label: 'Invert'\r\n }, {\r\n smoName: 'resetDefaults',\r\n control: 'SuiToggleComponent',\r\n label: 'Defaults'\r\n }, {\r\n smoName: 'resetAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Reset All Slurs'\r\n }, {\r\n smoName: 'cp1x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 X'\r\n }, {\r\n smoName: 'cp1y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 Y'\r\n }, {\r\n smoName: 'cp2x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 X'\r\n }, {\r\n smoName: 'cp2y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 Y'\r\n }], staticText: []\r\n };\r\n disableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', true);\r\n }\r\n enableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', false);\r\n }\r\n modalPromise() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n const checkComplete = () => {\r\n setTimeout(() => {\r\n if (self.adapter.updating === false) { \r\n resolve();\r\n } else {\r\n checkComplete();\r\n } \r\n }, 200);\r\n };\r\n checkComplete();\r\n });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.adapter.updating) {\r\n const self = this;\r\n this.disableClose();\r\n this.modalPromise().then(() => {\r\n self.enableClose();\r\n });\r\n }\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSlurAdapter(parameters.view, parameters.modifier);\r\n super(SuiSlurAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffGroupDialogAdapter extends SuiComponentAdapter {\r\n staffGroup: SmoSystemGroup;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n // Reset the view so we can see all the staves\r\n this.view.viewAll();\r\n const staffGroup = this.view.score.getSystemGroupForStaff(selection);\r\n if (!staffGroup) {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(selection.selector));\r\n this.staffGroup = new SmoSystemGroup(params);\r\n } else {\r\n this.staffGroup = staffGroup;\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get leftConnector() {\r\n return this.staffGroup.leftConnector;\r\n }\r\n set leftConnector(val: number) {\r\n this.staffGroup.leftConnector = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n get staffGroups() {\r\n return this.staffGroup;\r\n }\r\n set staffGroups(val: SmoSystemGroup) {\r\n this.staffGroup = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n}\r\n// ## SuiStaffGroupDialog\r\n// A staff group is a grouping of staves that can be bracketed and justified\r\nexport class SuiStaffGroupDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Staff Group', elements:\r\n [{\r\n smoName: 'staffGroups',\r\n control: 'StaffAddRemoveComponent',\r\n label: 'Staves in Group',\r\n }, {\r\n smoName: 'leftConnector',\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Left Connector',\r\n options: [\r\n {\r\n value: SmoSystemGroup.connectorTypes.bracket,\r\n label: 'Bracket'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.brace,\r\n label: 'Brace'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.single,\r\n label: 'Single'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.double,\r\n label: 'Double'\r\n }]\r\n }],\r\n staticText: [\r\n { includeStaff: 'Include Staff' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiStaffGroupDialog(parameters);\r\n dg.display();\r\n }\r\n getModifier() {\r\n return this.adapter.staffGroups;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiStaffGroupDialogAdapter(parameters.view);\r\n super(SuiStaffGroupDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTempoText, SmoTempoNumberAttribute, SmoTempoStringAttribute, SmoTempoBooleanAttribute } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n\r\n\r\nexport class SuiTempoAdapter extends SuiComponentAdapter {\r\n smoTempoText: SmoTempoText;\r\n backup: SmoTempoText;\r\n applyToAllVal: boolean = false; \r\n applyToSelection: boolean = false;\r\n edited: boolean = false;\r\n measure: SmoMeasure;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.measure = measure;\r\n this.smoTempoText = new SmoTempoText(measure.tempo);\r\n this.backup = new SmoTempoText(this.smoTempoText);\r\n }\r\n writeNumber(param: SmoTempoNumberAttribute, value: number) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoTempoBooleanAttribute, value: boolean) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeString(param: SmoTempoStringAttribute, value: string) {\r\n (this.smoTempoText as any)[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async remove() {\r\n await this.view.removeTempo(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n }\r\n async cancel() {\r\n await this.view.updateTempoScore(this.measure, this.backup, this.applyToAll, this.applyToSelection);\r\n }\r\n get applyToAll() {\r\n return this.applyToAllVal;\r\n }\r\n set applyToAll(val: boolean) {\r\n this.applyToAllVal = val;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get tempoText() {\r\n return this.smoTempoText.tempoText;\r\n }\r\n set tempoText(value: string) {\r\n this.writeString('tempoText', value);\r\n }\r\n get tempoMode() {\r\n return this.smoTempoText.tempoMode;\r\n }\r\n set tempoMode(value: string) {\r\n this.writeString('tempoMode', value);\r\n }\r\n get customText() {\r\n return this.smoTempoText.customText;\r\n }\r\n set customText(value: string) {\r\n this.writeString('customText', value);\r\n }\r\n get bpm() {\r\n return this.smoTempoText.bpm;\r\n }\r\n set bpm(value: number) {\r\n this.writeNumber('bpm', value);\r\n }\r\n get display() {\r\n return this.smoTempoText.display;\r\n }\r\n set display(value: boolean) {\r\n this.writeBoolean('display', value);\r\n }\r\n get beatDuration() {\r\n return this.smoTempoText.beatDuration;\r\n }\r\n set beatDuration(value: number) {\r\n this.writeNumber('beatDuration', value);\r\n }\r\n get yOffset() {\r\n return this.smoTempoText.yOffset;\r\n }\r\n set yOffset(value: number) {\r\n this.writeNumber('yOffset', value);\r\n }\r\n}\r\n// ## SuiTempoDialog\r\n// Allow user to choose a tempo or tempo change.\r\nexport class SuiTempoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Tempo Properties',\r\n elements: [\r\n {\r\n smoName: 'tempoMode',\r\n defaultValue: SmoTempoText.tempoModes.durationMode,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Mode',\r\n options: [{\r\n value: 'duration',\r\n label: 'Duration (Beats/Minute)'\r\n }, {\r\n value: 'text',\r\n label: 'Tempo Text'\r\n }, {\r\n value: 'custom',\r\n label: 'Specify text and duration'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'customText',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom Text',\r\n classes: 'hide-when-text-mode'\r\n },\r\n {\r\n smoName: 'bpm',\r\n defaultValue: 120,\r\n control: 'SuiRockerComponent',\r\n label: 'Notes/Minute'\r\n },\r\n {\r\n smoName: 'beatDuration',\r\n defaultValue: 4096,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Unit for Beat',\r\n options: [{\r\n value: 4096,\r\n label: 'Quarter Note',\r\n }, {\r\n value: 2048,\r\n label: '1/8 note'\r\n }, {\r\n value: 6144,\r\n label: 'Dotted 1/4 note'\r\n }, {\r\n value: 8192,\r\n label: '1/2 note'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'tempoText',\r\n defaultValue: SmoTempoText.tempoTexts.allegro,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Text',\r\n classes: 'hide-when-not-text-mode',\r\n options: [{\r\n value: SmoTempoText.tempoTexts.larghissimo,\r\n label: 'Larghissimo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.grave,\r\n label: 'Grave'\r\n }, {\r\n value: SmoTempoText.tempoTexts.lento,\r\n label: 'Lento'\r\n }, {\r\n value: SmoTempoText.tempoTexts.largo,\r\n label: 'Largo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.larghetto,\r\n label: 'Larghetto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagio,\r\n label: 'Adagio'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagietto,\r\n label: 'Adagietto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante_moderato,\r\n label: 'Andante moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante,\r\n label: 'Andante'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andantino,\r\n label: 'Andantino'\r\n }, {\r\n value: SmoTempoText.tempoTexts.moderator,\r\n label: 'Moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegretto,\r\n label: 'Allegretto',\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegro,\r\n label: 'Allegro'\r\n }, {\r\n value: SmoTempoText.tempoTexts.vivace,\r\n label: 'Vivace'\r\n }, {\r\n value: SmoTempoText.tempoTexts.presto,\r\n label: 'Presto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.prestissimo,\r\n label: 'Prestissimo'\r\n }\r\n ]\r\n }, {\r\n smoName: 'applyToAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to all future measures?'\r\n }, {\r\n smoName: 'applyToSelection',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to selection?'\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display Tempo'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }\r\n ],\r\n staticText: []\r\n };\r\n showHideCustom(): void {\r\n if (this.adapter.tempoMode === 'custom') {\r\n this.cmap.customTextCtrl.show();\r\n } else {\r\n this.cmap.customTextCtrl.hide();\r\n }\r\n }\r\n changed() {\r\n super.changed();\r\n this.showHideCustom();\r\n }\r\n initialValue() {\r\n super.initialValue();\r\n this.showHideCustom();\r\n }\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n const measures = SmoSelection.getMeasureList(parameters.view.tracker.selections)\r\n .map((sel) => sel.measure);\r\n const measure = measures[0];\r\n const adapter = new SuiTempoAdapter(parameters.view, measure);\r\n super(SuiTempoDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\n\r\nimport { closeDialogPromise } from '../../common/htmlHelpers';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers, OutlineInfo } from '../../render/sui/svgHelpers';\r\nimport { SuiTextEditor } from '../../render/sui/textEdit';\r\n\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiDragText } from './components/dragText';\r\nimport { SuiTextInPlace } from './components/textInPlace';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SuiHelp } from '../help';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SuiTextBlockComponent } from './components/textInPlace';\r\n\r\nimport { EventHandler } from '../eventSource';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBlockDialog extends SuiDialogBase {\r\n get textEditorCtrl(): SuiTextInPlace {\r\n return this.cmap.textEditorCtrl as SuiTextInPlace;\r\n }\r\n get insertCodeCtrl(): SuiDropdownComponent {\r\n return this.cmap.insertCodeCtrl as SuiDropdownComponent;\r\n }\r\n get textDraggerCtrl(): SuiDragText {\r\n return this.cmap.textDraggerCtrl as SuiDragText;\r\n }\r\n get yCtrl(): SuiRockerComponent {\r\n return this.cmap.yCtrl as SuiRockerComponent;\r\n }\r\n get xCtrl(): SuiRockerComponent {\r\n return this.cmap.xCtrl as SuiRockerComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get textBlockCtrl(): SuiTextBlockComponent {\r\n return this.cmap.textBlockCtrl as SuiTextBlockComponent;\r\n }\r\n get paginationCtrl(): SuiDropdownComponent {\r\n return this.cmap.paginationCtrl as SuiDropdownComponent;\r\n }\r\n get attachToSelectorCtrl(): SuiToggleComponent {\r\n return this.cmap.attachToSelectorCtrl as SuiToggleComponent;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Properties', elements:\r\n [{\r\n smoName: 'textEditor',\r\n defaultValue: 0,\r\n control: 'SuiTextInPlace',\r\n classes: 'show-always hide-when-moving',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'insertCode',\r\n classes: 'show-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Insert Special',\r\n options: [\r\n { value: '@@@', label: 'Pages' },\r\n { value: '###', label: 'Page Number' }\r\n ]\r\n }, {\r\n smoName: 'textDragger',\r\n classes: 'hide-when-editing show-when-moving',\r\n defaultValue: 0,\r\n control: 'SuiDragText',\r\n label: 'Move Text',\r\n options: []\r\n }, {\r\n smoName: 'x',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'X Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'y',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: SmoScoreText.fontFamilies.times,\r\n control: 'SuiFontComponent',\r\n label: 'Font Information'\r\n },\r\n {\r\n smoName: 'textBlock',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: '',\r\n control: 'SuiTextBlockComponent',\r\n label: 'Text Block Properties'\r\n },\r\n { // {every:'every',even:'even',odd:'odd',once:'once'}\r\n smoName: 'pagination',\r\n defaultValue: SmoTextGroup.paginations.ONCE,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Behavior',\r\n startRow: true,\r\n options: [{ value: SmoTextGroup.paginations.ONCE, label: 'Once' },\r\n { value: SmoTextGroup.paginations.EVERY, label: 'Every' },\r\n { value: SmoTextGroup.paginations.ODD, label: 'Odd' },\r\n { value: SmoTextGroup.paginations.SUBSEQUENT, label: 'Subsequent' }\r\n ]\r\n }, {\r\n smoName: 'attachToSelector',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Attach to Selection'\r\n }],\r\n staticText: [\r\n { label: 'Text Properties' },\r\n { editorLabel: 'Done Editing Text' },\r\n { draggerLabel: 'Done Dragging Text' }\r\n ]\r\n };\r\n edited: boolean;\r\n isNew: boolean;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n textElement: any;\r\n mouseMoveHandler: EventHandler | null;\r\n mouseUpHandler: EventHandler | null;\r\n mouseDownHandler: EventHandler | null;\r\n mouseClickHandler: EventHandler | null;\r\n outlineRect: OutlineInfo | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n let edited = false;\r\n let isNew = false;\r\n const tracker = parameters.view.tracker;\r\n ['staffModifier', 'suggestion'].forEach((outlineType) => {\r\n if (tracker.outlines[outlineType]) {\r\n SvgHelpers.eraseOutline(tracker.outlines[outlineType]);\r\n }\r\n });\r\n const layout = parameters.view.score.layoutManager!.getGlobalLayout();\r\n\r\n // Create a new text modifier, if this is new text. Else use selection\r\n if (!parameters.modifier) {\r\n isNew = true;\r\n const textParams = SmoScoreText.defaults;\r\n const newText = new SmoScoreText(textParams);\r\n // convert scroll from screen coord to svg coord\r\n const svgScroll = tracker.renderer.pageMap.clientToSvg(SvgHelpers.smoBox(tracker.scroller.scrollState));\r\n newText.y += svgScroll.y;\r\n newText.x += svgScroll.x;\r\n if (tracker.selections.length > 0) {\r\n const sel = tracker.selections[0].measure.svg;\r\n if (typeof (sel.logicalBox) !== 'undefined') {\r\n if (sel.logicalBox.y >= newText.y) {\r\n newText.y = sel.logicalBox.y;\r\n newText.x = sel.logicalBox.x;\r\n }\r\n }\r\n }\r\n const grpParams = SmoTextGroup.defaults;\r\n grpParams.textBlocks = [{ text: newText, position: SmoTextGroup.relativePositions.LEFT, activeText: true }];\r\n const newGroup = new SmoTextGroup(grpParams);\r\n parameters.modifier = newGroup;\r\n parameters.modifier.setActiveBlock(newText);\r\n parameters.view.addTextGroup(parameters.modifier);\r\n edited = true;\r\n } else {\r\n // Make sure there is a score text to start the editing.\r\n parameters.modifier.setActiveBlock(parameters.modifier.textBlocks[0].text);\r\n }\r\n super(SuiTextBlockDialog.dialogElements, parameters);\r\n this.isNew = isNew;\r\n this.modifier = parameters.modifier;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS']\r\n this.edited = edited;\r\n this.view.groupUndo(true);\r\n this.activeScoreText = this.modifier.getActiveBlock();\r\n this.mouseMoveHandler = null;\r\n this.mouseUpHandler = null;\r\n this.mouseDownHandler = null;\r\n this.mouseClickHandler = null;\r\n }\r\n populateInitial() {\r\n this.textBlockCtrl.setValue({\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n });\r\n const fontFamily = this.activeScoreText.fontInfo.family;\r\n const fontSize = this.activeScoreText.fontInfo.size;\r\n this.fontCtrl.setValue({\r\n family: fontFamily,\r\n size: fontSize,\r\n style: this.activeScoreText.fontInfo.style,\r\n weight: this.activeScoreText.fontInfo.weight\r\n });\r\n this.attachToSelectorCtrl.setValue(this.modifier.attachToSelector);\r\n const ul = this.modifier.ul();\r\n this.xCtrl.setValue(ul.x);\r\n this.yCtrl.setValue(ul.y);\r\n this.paginationCtrl.setValue(this.modifier.pagination);\r\n this.highlightActiveRegion();\r\n }\r\n display() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n this.textElement = $(svg).find('.' + this.activeScoreText.attrs.id)[0];\r\n $('body').addClass('showAttributeDialog');\r\n $('body').addClass('textEditor');\r\n this.applyDisplayOptions();\r\n this.populateInitial();\r\n this.bindElements();\r\n if (!this.modifier.logicalBox) {\r\n this.view.renderer.renderTextGroup(this.modifier);\r\n }\r\n\r\n // If this control has not been edited this session, assume they want to\r\n // edit the text and just right into that.\r\n if (!this.modifier.edited) {\r\n this.modifier.edited = true;\r\n layoutDebug.addDialogDebug('text transform db: startEditSession');\r\n this.textEditorCtrl.startEditSession();\r\n }\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseUpHandler = this.eventSource.bindMouseUpHandler(this, 'mouseUp');\r\n this.mouseDownHandler = this.eventSource.bindMouseDownHandler(this, 'mouseDown');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n }\r\n _resetAttachToSelector() {\r\n this.modifier.attachToSelector = false;\r\n this.modifier.selector = SmoTextGroup.defaults.selector;\r\n this.modifier.musicXOffset = SmoTextGroup.defaults.musicXOffset;\r\n this.modifier.musicYOffset = SmoTextGroup.defaults.musicYOffset;\r\n }\r\n _activateAttachToSelector() {\r\n this.modifier.attachToSelector = true;\r\n this.modifier.selector = JSON.parse(JSON.stringify(this.view.tracker.selections[0].selector));\r\n if (this.modifier.logicalBox) {\r\n this.modifier.musicXOffset = this.modifier.logicalBox.x - this.view.tracker.selections[0].measure.svg.logicalBox.x;\r\n this.modifier.musicYOffset = this.modifier.logicalBox.y - this.view.tracker.selections[0].measure.svg.logicalBox.y;\r\n }\r\n }\r\n\r\n changed() {\r\n this.edited = true;\r\n if (this.insertCodeCtrl.changeFlag && this.textEditorCtrl.session) {\r\n const val = this.insertCodeCtrl.getValue().toString().split('');\r\n val.forEach((key) => {\r\n this.evKey({ key });\r\n });\r\n this.insertCodeCtrl.unselect();\r\n }\r\n\r\n if (this.textBlockCtrl.changeFlag) {\r\n const nval = this.textBlockCtrl.getValue();\r\n this.activeScoreText = nval.activeScoreText;\r\n this.highlightActiveRegion();\r\n }\r\n if (this.textEditorCtrl.changeFlag) {\r\n this.highlightActiveRegion();\r\n }\r\n\r\n if (this.attachToSelectorCtrl.changeFlag) {\r\n const toSet = this.attachToSelectorCtrl.getValue();\r\n if (toSet) {\r\n this._activateAttachToSelector();\r\n this.paginationCtrl.setValue(SmoTextGroup.paginations.ONCE);\r\n this.modifier.pagination = SmoTextGroup.paginations.ONCE;\r\n } else {\r\n this._resetAttachToSelector();\r\n }\r\n }\r\n\r\n const pos = this.modifier.ul();\r\n\r\n // position can change from drag or by dialog - only update from\r\n // dialog entries if that changed.\r\n if (this.xCtrl.changeFlag) {\r\n this.modifier.offsetX(this.xCtrl.getValue() - pos.x);\r\n }\r\n if (this.yCtrl.changeFlag) {\r\n this.modifier.offsetY(this.yCtrl.getValue() - pos.y);\r\n }\r\n if (this.textDraggerCtrl.changeFlag) {\r\n this.xCtrl.setValue(pos.x);\r\n this.yCtrl.setValue(pos.y);\r\n }\r\n\r\n if (this.paginationCtrl.changeFlag) {\r\n this.modifier.pagination = parseInt(this.paginationCtrl.getValue().toString(), 10);\r\n // Pagination and attach to measure don't mix.\r\n this._resetAttachToSelector();\r\n this.attachToSelectorCtrl.setValue(false);\r\n }\r\n\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.activeScoreText.fontInfo.family = fontInfo.family;\r\n // transitioning away from non-point-based font size units\r\n this.activeScoreText.fontInfo.size = fontInfo.size;\r\n this.activeScoreText.fontInfo.weight = fontInfo.weight;\r\n this.activeScoreText.fontInfo.style = fontInfo.style;\r\n }\r\n // Use layout context because render may have reset svg.\r\n this.view.updateTextGroup(this.modifier);\r\n }\r\n highlightActiveRegion() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n if (this.activeScoreText.logicalBox) {\r\n const stroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: pageContext,\r\n classes: '',\r\n stroke,\r\n box: this.activeScoreText.logicalBox,\r\n scroll: this.scroller.scrollState,\r\n timeOff: 1000\r\n };\r\n }\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect.box = this.activeScoreText.logicalBox;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n this.textEditorCtrl.evKey(evdata);\r\n }\r\n }\r\n\r\n // ### Event handlers, passed from dialog\r\n mouseUp() {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseUp(null);\r\n }\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseMove(ev);\r\n } else if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n\r\n mouseDown(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseDown(ev);\r\n }\r\n }\r\n\r\n _complete() {\r\n this.view.groupUndo(false);\r\n this.modifier.setActiveBlock(null);\r\n this.view.tracker.updateMap(); // update the text map\r\n this.view.renderer.setDirty();\r\n if (this.mouseDownHandler) {\r\n this.eventSource.unbindMouseDownHandler(this.mouseDownHandler);\r\n }\r\n if (this.mouseUpHandler) {\r\n this.eventSource.unbindMouseUpHandler(this.mouseUpHandler);\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n }\r\n // Hack - this comes from SuiInlineText and SuiTextEdit.\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n _removeText() {\r\n this.view.removeTextGroup(this.modifier);\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.updateTextGroup(this.modifier);\r\n this._complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.edited) {\r\n this.modifier.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n this.modifier.elements = [];\r\n this.view.undo();\r\n }\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this._removeText();\r\n this._complete();\r\n });\r\n }\r\n}\r\n\r\nexport class helpModal {\r\n static createAndDisplay() {\r\n SuiHelp.displayHelp();\r\n return closeDialogPromise();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffTextBracket, SmoTextBracketNumberType, SmoTextBracketStringType} from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBracketAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffTextBracket;\r\n bracket: SmoStaffTextBracket;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, bracket: SmoStaffTextBracket) {\r\n super(view);\r\n this.bracket = bracket;\r\n this.view = view;\r\n this.backup = new SmoStaffTextBracket(this.bracket);\r\n this.backup.attrs.id = bracket.attrs.id;\r\n this.backup.associatedStaff = bracket.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.removeTextBracket(this.bracket);\r\n await this.view.addOrReplaceTextBracket(this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.bracket);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoTextBracketNumberType, val: number) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = parseInt(val.toString(), 10);\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n async updateText(param: SmoTextBracketStringType, val: string) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n get text() {\r\n return this.bracket.text;\r\n }\r\n set text(val: string) {\r\n this.updateText('text', val);\r\n }\r\n get superscript() {\r\n return this.bracket.superscript;\r\n }\r\n set superscript(val: string) {\r\n this.updateText('superscript', val);\r\n }\r\n get position() {\r\n return this.bracket.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n get line() {\r\n return this.bracket.line;\r\n }\r\n set line(val: number) {\r\n this.updateValue('line', val);\r\n }\r\n}\r\nexport class SuiTextBracketDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Bracket Properties', elements:\r\n [{\r\n smoName: 'line',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'Line'\r\n }, {\r\n smoName: 'position',\r\n control: 'SuiDropdownComponent',\r\n label: 'Position',\r\n options: [\r\n {\r\n value: '1',\r\n label: 'Above'\r\n }, {\r\n value: '-1',\r\n label: 'Below'\r\n }]\r\n }, {\r\n smoName: 'text',\r\n control: 'SuiTextInputComponent',\r\n label: 'Text'\r\n }, {\r\n smoName: 'superscript',\r\n control: 'SuiTextInputComponent',\r\n label: 'SubText'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTextBracketAdapter(parameters.view, parameters.modifier);\r\n super(SuiTextBracketDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoTie, TieLine } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type TieNumber = 'tie_spacing' | 'cp1' | 'cp2' | 'first_x_shift' | 'last_x_shift' | 'y_shift';\r\n\r\nexport class SuiTieAdapter extends SuiComponentAdapter {\r\n tie: SmoTie;\r\n backup: SmoTie;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, tie: SmoTie) {\r\n super(view);\r\n this.tie = tie;\r\n this.backup = new SmoTie(tie);\r\n // Make it have same ID so remove works.\r\n this.backup.attrs.id = tie.attrs.id;\r\n this.backup.associatedStaff = tie.associatedStaff;\r\n }\r\n writeTieNumber(value: number, param: TieNumber) {\r\n this.tie[param] = value;\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n this.changed = true;\r\n }\r\n get lines(): TieLine[] {\r\n return this.tie.lines;\r\n }\r\n set lines(value: TieLine[]) {\r\n this.tie.lines = JSON.parse(JSON.stringify(value));\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n }\r\n get tie_spacing(): number {\r\n return this.tie.tie_spacing;\r\n }\r\n set tie_spacing(value: number) {\r\n this.writeTieNumber(value, 'tie_spacing');\r\n } \r\n get first_x_shift(): number {\r\n return this.tie.first_x_shift;\r\n }\r\n set first_x_shift(value: number) {\r\n this.writeTieNumber(value, 'first_x_shift');\r\n } \r\n get last_x_shift(): number {\r\n return this.tie.last_x_shift;\r\n }\r\n set last_x_shift(value: number) {\r\n this.writeTieNumber(value, 'last_x_shift');\r\n } \r\n get y_shift(): number {\r\n return this.tie.y_shift;\r\n }\r\n set y_shift(value: number) {\r\n this.writeTieNumber(value, 'y_shift');\r\n } \r\n get cp1(): number {\r\n return this.tie.cp1;\r\n }\r\n set cp1(value: number) {\r\n this.writeTieNumber(value, 'cp1');\r\n }\r\n get cp2(): number {\r\n return this.tie.cp2;\r\n }\r\n set cp2(value: number) {\r\n this.writeTieNumber(value, 'cp2');\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.backup, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n }\r\n}\r\nexport class SuiTieAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Tie Properties',\r\n\r\n staticText: [\r\n { label: 'Tie Properties' },\r\n { fromNote: 'From Note' },\r\n { toNote: 'To Note' }\r\n ], elements: [{\r\n smoName: 'lines',\r\n control: 'TieMappingComponent',\r\n label: 'Lines'\r\n }, {\r\n smoName: 'cp1',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1'\r\n }, {\r\n smoName: 'cp2',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2'\r\n }, {\r\n smoName: 'first_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 1'\r\n }, {\r\n smoName: 'last_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 2'\r\n }, {\r\n smoName: 'y_shift',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'tie_spacing',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Tie Spacing'\r\n }],\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n if (!parameters.modifier) {\r\n throw new Error('modifier attribute dialog must have modifier');\r\n }\r\n const tie = parameters.modifier as SmoTie;\r\n const adapter = new SuiTieAdapter(parameters.view, tie);\r\n super(SuiTieAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureAdapter extends SuiComponentAdapter {\r\n measure: SmoMeasure;\r\n backup: TimeSignature;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.measure = this.view.tracker.selections[0].measure;\r\n this.backup = new TimeSignature(this.measure.timeSignature);\r\n }\r\n get numerator() {\r\n return this.measure.timeSignature.actualBeats;\r\n }\r\n set numerator(value: number) {\r\n this.measure.timeSignature.actualBeats = value;\r\n }\r\n get denominator() {\r\n return this.measure.timeSignature.beatDuration;\r\n }\r\n set denominator(value: number) {\r\n this.measure.timeSignature.beatDuration = value;\r\n }\r\n get display() {\r\n return this.measure.timeSignature.display;\r\n }\r\n set display(value: boolean) {\r\n this.measure.timeSignature.display = value;\r\n }\r\n get useSymbol() {\r\n return this.measure.timeSignature.useSymbol;\r\n }\r\n set useSymbol(value: boolean) {\r\n this.measure.timeSignature.useSymbol = value;\r\n }\r\n get customString() {\r\n return this.measure.timeSignature.displayString;\r\n }\r\n set customString(value: string) {\r\n const tr = value.trim();\r\n if (!(tr.indexOf('/') >= 0)) {\r\n if (tr === 'C' || tr === 'C|') {\r\n this.measure.timeSignature.displayString = tr;\r\n return;\r\n }\r\n }\r\n const ar = tr.split('/');\r\n if (isNaN(parseInt(ar[0], 10)) || isNaN(parseInt(ar[1], 10))) {\r\n this.measure.timeSignature.displayString = '';\r\n return;\r\n }\r\n this.measure.timeSignature.displayString = tr;\r\n }\r\n async commit() {\r\n await this.view.setTimeSignature(this.measure.timeSignature);\r\n }\r\n async cancel() {\r\n this.measure.timeSignature = this.backup;\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiTimeSignatureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Custom Time Signature',\r\n elements:\r\n [\r\n {\r\n smoName: 'numerator',\r\n defaultValue: 3,\r\n control: 'SuiRockerComponent',\r\n label: 'Beats/Measure',\r\n },\r\n {\r\n smoName: 'denominator',\r\n defaultValue: 8,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Beat Value',\r\n options: [{\r\n value: 16,\r\n label: '16',\r\n }, {\r\n value: 8,\r\n label: '8',\r\n }, {\r\n value: 4,\r\n label: '4'\r\n }, {\r\n value: 2,\r\n label: '2'\r\n }]\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display',\r\n }, {\r\n smoName: 'useSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Common/Cut',\r\n }, {\r\n smoName: 'customString',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom',\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTimeSignatureAdapter(parameters.view);\r\n super(SuiTimeSignatureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTransposeScoreAdapter extends SuiComponentAdapter {\r\n transposeOffset: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n get offset() {\r\n return this.transposeOffset;\r\n }\r\n set offset(value: number) {\r\n if (value > -13 && value < 13) {\r\n this.transposeOffset = value;\r\n }\r\n }\r\n async commit() { \r\n if (this.transposeOffset !== 0) {\r\n this.view.transposeScore(this.transposeOffset);\r\n }\r\n }\r\n async cancel() {\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiTransposeScoreDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Transpose Score', elements:\r\n [{\r\n smoName: 'offset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose (1/2 steps)'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiTransposeScoreAdapter(params.view);\r\n super(SuiTransposeScoreDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition,SuiDialogParams } from './dialog';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport type SmoVoltaNumberParam = 'startBar' | 'endBar' | 'xOffsetStart' | 'xOffsetEnd' | 'yOffset' | 'number';\r\n\r\nexport class SuiVoltaAdapter extends SuiComponentAdapter {\r\n volta: SmoVolta;\r\n backup: SmoVolta;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, volta: SmoVolta) {\r\n super(view);\r\n this.volta = volta;\r\n this.backup = new SmoVolta(this.volta); \r\n }\r\n async remove() {\r\n await this.view.removeEnding(this.volta);\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.updateEnding(this.backup);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n updateVolta(param: SmoVoltaNumberParam, value: number) {\r\n this.volta[param] = value;\r\n this.view.updateEnding(this.volta);\r\n this.changed = true;\r\n }\r\n get startBar() {\r\n return this.volta.startBar;\r\n }\r\n set startBar(val: number) {\r\n this.updateVolta('startBar', val);\r\n }\r\n get endBar() {\r\n return this.volta.endBar;\r\n }\r\n set endBar(val: number) {\r\n this.updateVolta('endBar', val);\r\n }\r\n get xOffsetStart() {\r\n return this.volta.xOffsetStart;\r\n }\r\n set xOffsetStart(val: number) {\r\n this.updateVolta('xOffsetStart', val);\r\n }\r\n get xOffsetEnd() {\r\n return this.volta.xOffsetEnd;\r\n }\r\n set xOffsetEnd(val: number) {\r\n this.updateVolta('xOffsetEnd', val);\r\n }\r\n get yOffset() {\r\n return this.volta.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateVolta('yOffset', val);\r\n }\r\n get number() {\r\n return this.volta.number;\r\n }\r\n set number(val: number) {\r\n this.updateVolta('number', val);\r\n }\r\n} \r\n// ## SuiVoltaAttributeDialog\r\n// aka first and second endings\r\nexport class SuiVoltaAttributeDialog extends SuiDialogAdapterBase {\r\n\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Volta Properties', elements:\r\n [{\r\n smoName: 'number',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'number'\r\n }, {\r\n smoName: 'xOffsetStart',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X1 Offset'\r\n }, {\r\n smoName: 'xOffsetEnd',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X2 Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n if (parameters.modifier.logicalBox === null) {\r\n return null;\r\n }\r\n const dg = new SuiVoltaAttributeDialog(parameters);\r\n dg.display();\r\n return dg;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiVoltaAdapter(parameters.view, parameters.modifier)\r\n super(SuiVoltaAttributeDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\ndeclare var $: any;\r\nimport { scoreChangeEvent } from '../render/sui/renderState';\r\n\r\n/**\r\n * Event handler for smoosic. Any UI element can have any number\r\n * of event handlers. For modals, event handlers are added/removed \r\n * as the gain/relinquish control\r\n * @param sink - an object that implements:\r\n * @param method - the callback method on sink\r\n * @param symbol - used to distinguish handler instances of the same type\r\n */\r\nexport interface EventHandler {\r\n sink: any,\r\n method: string,\r\n symbol: Symbol\r\n}\r\n/**\r\n * This is the event generating interface for Smoosic. It is kept as \r\n * skeletal as possible so applications can call event handling methods from\r\n * their own event logic.\r\n * @category SuiUiBase\r\n */\r\nexport class BrowserEventSource {\r\n keydownHandlers: EventHandler[];\r\n mouseMoveHandlers: EventHandler[];\r\n mouseClickHandlers: EventHandler[];\r\n mouseUpHandlers: EventHandler[];\r\n mouseDownHandlers: EventHandler[];\r\n scoreChangeHandlers: EventHandler[] = [];\r\n domTriggers: EventHandler[];\r\n handleMouseMove: ((ev: any) => void) | null = null;\r\n handleMouseClick: ((ev: any) => void) | null = null;\r\n handleMouseUp: ((ev: any) => void) | null = null;\r\n handleMouseDown: ((ev: any) => void) | null = null;\r\n\r\n handleKeydown: (ev: KeyEvent) => void;\r\n handleScoreChangeEvent: (ev: KeyEvent) => void;\r\n renderElement: any;\r\n constructor() {\r\n this.keydownHandlers = [];\r\n this.mouseMoveHandlers = [];\r\n this.mouseClickHandlers = [];\r\n this.mouseUpHandlers = [];\r\n this.mouseDownHandlers = [];\r\n this.domTriggers = [];\r\n this.handleKeydown = this.evKey.bind(this);\r\n this.handleScoreChangeEvent = this.evScoreChange.bind(this);\r\n window.addEventListener(\"keydown\", this.handleKeydown as any, true);\r\n window.addEventListener(scoreChangeEvent, this.handleScoreChangeEvent as any, true);\r\n }\r\n\r\n async evKey(event: KeyEvent) {\r\n let i = 0;\r\n for (i = 0; i < this.keydownHandlers.length; ++i) {\r\n const handler = this.keydownHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n async evScoreChange(event: any) {\r\n let i = 0;\r\n for (i = 0; i < this.scoreChangeHandlers.length; ++i) {\r\n const handler = this.scoreChangeHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n mouseMove(event: any) {\r\n this.mouseMoveHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseClick(event: any) {\r\n this.mouseClickHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseDown(event: any) {\r\n this.mouseDownHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseUp(event: any) {\r\n this.mouseUpHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n setRenderElement(renderElement: any) {\r\n this.renderElement = renderElement;\r\n var self = this;\r\n this.handleMouseMove = this.mouseMove.bind(this);\r\n this.handleMouseClick = this.mouseClick.bind(this);\r\n this.handleMouseUp = this.mouseUp.bind(this);\r\n this.handleMouseDown = this.mouseDown.bind(this);\r\n $(document)[0].addEventListener(\"mousemove\", this.handleMouseMove);\r\n $(this.renderElement)[0].addEventListener(\"click\", this.handleMouseClick);\r\n $(document)[0].addEventListener(\"mouseup\", this.handleMouseUp);\r\n $(document)[0].addEventListener(\"mousedown\", this.handleMouseDown);\r\n }\r\n\r\n _unbindHandlerArray(arSrc: EventHandler[], arDest: EventHandler[], handler: EventHandler) {\r\n arSrc.forEach((htest) => {\r\n if (handler.symbol !== htest.symbol) {\r\n arDest.push(htest);\r\n }\r\n });\r\n }\r\n\r\n unbindMouseMoveHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseMoveHandlers, handlers, handler);\r\n this.mouseMoveHandlers = handlers;\r\n }\r\n unbindMouseDownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseDownHandlers, handlers, handler);\r\n this.mouseDownHandlers = handlers;\r\n }\r\n unbindMouseUpHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseUpHandlers, handlers, handler);\r\n this.mouseUpHandlers = handlers;\r\n }\r\n unbindMouseClickHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseClickHandlers, handlers, handler);\r\n this.mouseClickHandlers = handlers;\r\n }\r\n\r\n unbindKeydownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.keydownHandlers, handlers, handler);\r\n this.keydownHandlers = handlers;\r\n } \r\n\r\n bindScroller() { }\r\n\r\n // ### bindKeydownHandler\r\n // add a handler for the evKey event, for keyboard data.\r\n bindKeydownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.keydownHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseMoveHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseMoveHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseUpHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseUpHandlers.push(handler);\r\n return handler;\r\n }\r\n bindScoreChangeHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.scoreChangeHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseDownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseDownHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseClickHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseClickHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n domClick(selector: string, sink: any, method: string, args: any) {\r\n $(selector).off('click').on('click', function (ev: any) {\r\n sink[method](ev, args);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SuiEventHandler } from '../application/eventHandler';\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\ndeclare var $: any;\r\n\r\nexport class SuiExceptionHandler {\r\n view: SuiScoreView;\r\n thrown: boolean;\r\n static _instance: SuiExceptionHandler;\r\n constructor(params: any) {\r\n this.view = params.view;\r\n this.thrown = false;\r\n SuiExceptionHandler._instance = this;\r\n }\r\n static get instance() {\r\n return SuiExceptionHandler._instance;\r\n }\r\n exceptionHandler(e: any) {\r\n let stack = '';\r\n let doing = '';\r\n let scoreString = '';\r\n if (this.thrown) {\r\n return;\r\n }\r\n this.thrown = true;\r\n if (SuiEventHandler.reentry) {\r\n return;\r\n }\r\n\r\n SuiEventHandler.reentry = true;\r\n scoreString = 'Could not serialize score.';\r\n try {\r\n scoreString = JSON.stringify(this.view.score.serialize(), null, ' ');\r\n } catch (e: any) {\r\n if (e.message) {\r\n scoreString += ' ' + e.message;\r\n }\r\n }\r\n const message = e.message;\r\n stack = 'No stack trace available';\r\n\r\n try {\r\n if (e.error && e.error.stack) {\r\n stack = e.error.stack;\r\n } else if (e.stack) {\r\n stack = e.stack;\r\n }\r\n } catch (e2: any) {\r\n stack = 'Error with stack: ' + e2.message;\r\n }\r\n doing = 'Last operation not available.';\r\n\r\n const lastOp = this.view.storeUndo.peek();\r\n if (lastOp) {\r\n doing = lastOp.title;\r\n }\r\n const url = 'https://github.com/AaronDavidNewman/Smoosic/issues';\r\n const bodyObject = JSON.stringify({\r\n message,\r\n stack,\r\n lastOperation: doing,\r\n scoreString\r\n }, null, ' ');\r\n createTopDomContainer('.bugDialog');\r\n const b = buildDom;\r\n const r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', '../styles/images/logo.png').classes('bug-logo'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('span').classes('bug-title').text('oh nooooo! You\\'ve found a bug'))\r\n .append(b('p').text('It would be helpful if you would submit a bug report, and copy the data below into an issue'))\r\n .append(b('div')\r\n .append(b('textarea').attr('id', 'bug-text-area').text(bodyObject))\r\n .append(\r\n b('div').classes('button-container').append(b('button').classes('bug-submit-button').text('Submit Report'))));\r\n\r\n $('.bugDialog').html('');\r\n $('.bugDialog').append(r.dom());\r\n\r\n $('.bug-dismiss-button').off('click').on('click', () => {\r\n $('body').removeClass('bugReport');\r\n if (lastOp) {\r\n this.view.storeUndo.undo(this.view.score, {}, true);\r\n this.view.renderer.render();\r\n SuiEventHandler.reentry = false;\r\n }\r\n });\r\n $('.bug-submit-button').off('click').on('click', () => {\r\n $('#bug-text-area').select();\r\n document.execCommand('copy');\r\n window.open(url, 'Report Smoosic issues');\r\n });\r\n $('body').addClass('bugReport');\r\n if (!this.thrown) {\r\n this.thrown = true;\r\n throw (e);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\ndeclare var JSZip: any;\r\n// ## SuiFileInput\r\n// Get a string or binary file from a file input control and transparently\r\n// decompress it if it's mxml file (compressed). This will read any text or\r\n// binary file,\r\n// but it will only unzip .mxml files first and has a consistent async interface\r\nexport class SuiFileInput {\r\n compressed: boolean = false;\r\n binary: boolean = false;\r\n value: any;\r\n event: any;\r\n constructor(evt: any) {\r\n this.compressed = false;\r\n this.binary = false;\r\n this.value = null;\r\n this.event = evt;\r\n if (evt.target.files[0].name.endsWith('.mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (evt.target.files[0].name.endsWith('.mid')) {\r\n this.binary = true;\r\n }\r\n }\r\n _handleZip() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n JSZip.loadAsync(self.value).then((zip: any) => {\r\n // Find the real xml file in the zip (not metadata)\r\n const filename =\r\n Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n zip.file(filename).async('text').then((str: any) => {\r\n self.value = str;\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n loadAsync() {\r\n const self = this;\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (file) => {\r\n if (file === null || file.target === null || file.target.result === null) {\r\n reject();\r\n return;\r\n }\r\n self.value = file.target.result;\r\n if (!self.compressed) {\r\n resolve();\r\n } else {\r\n self._handleZip().then(() => {\r\n resolve();\r\n });\r\n }\r\n };\r\n if (self.binary) {\r\n reader.readAsArrayBuffer(self.event.target.files[0])\r\n } else {\r\n reader.readAsText(self.event.target.files[0]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiXhrLoader } from './xhrLoader';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\ninterface kvPair { [key: string]: string }\r\nexport interface LibraryParams {\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined;\r\n format: string;\r\n metadata: kvPair;\r\n children: SmoLibrary[];\r\n data: any;\r\n}\r\n\r\n// ## SmoLibrary\r\n// A class to organize smoosic files (or any format smoosic accepts) into libraries.\r\nexport class SmoLibrary {\r\n static _defaults: Partial;\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined = '';\r\n format: string = 'smo';\r\n metadata: kvPair = {};\r\n children: SmoLibrary[] = [];\r\n constructor(parameters: Partial) {\r\n this.loaded = false;\r\n this.parentLib = {};\r\n if (parameters.url) {\r\n this.url = parameters.url;\r\n } else if (parameters.data) {\r\n this.initialize(parameters.data);\r\n }\r\n }\r\n initialize(parameters: LibraryParams) {\r\n smoSerialize.serializedMerge(\r\n SmoLibrary.parameterArray, SmoLibrary.defaults, this);\r\n // if the object was loaded from URL, use that.\r\n if (!this.url) {\r\n this.url = parameters.url;\r\n }\r\n this.format = parameters.format;\r\n Object.keys(parameters.metadata).forEach((key: string) => {\r\n this.metadata[key] = parameters.metadata[key];\r\n });\r\n this.children = [];\r\n if (typeof(parameters.children) !== 'undefined') {\r\n parameters.children.forEach((childLib: SmoLibrary) => {\r\n this.children.push(new SmoLibrary({ data: childLib }));\r\n });\r\n }\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n static get metadataNames() {\r\n return ['name', 'icon', 'tags', 'composer', 'artist', 'copyright',\r\n 'title', 'subtitle', 'movement', 'source'];\r\n }\r\n static get formatTypes() {\r\n return ['smoosic', 'library', 'mxml', 'midi', 'abc'];\r\n }\r\n static get libraryTypes() {\r\n return ['work', 'transcription', 'library', 'collection'];\r\n }\r\n static get defaults() {\r\n if (typeof(SmoLibrary._defaults) === 'undefined') {\r\n SmoLibrary._defaults = { children: [], metadata: {} };\r\n }\r\n return SmoLibrary._defaults;\r\n }\r\n static get parameterArray() {\r\n return ['children', 'metadata', 'format', 'url'];\r\n }\r\n load() {\r\n const self = this;\r\n if (this.loaded) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const loader = new SuiXhrLoader(this.url!);\r\n return new Promise((resolve) => {\r\n loader.loadAsync().then(() => {\r\n const jsonObj = JSON.parse(loader.value);\r\n self.initialize(jsonObj);\r\n self.loaded = true;\r\n resolve();\r\n });\r\n });\r\n }\r\n _inheritMetadata(parent: any) {\r\n // eslint-disable-next-line\r\n for (const key in parent) {\r\n if (typeof(this.metadata[key]) === 'undefined') {\r\n this.metadata[key] = parent[key];\r\n }\r\n }\r\n this.parentLib = { name: parent.metadata.name, value: parent };\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * Load a file. Guess based on the extension whether the file is string or binary\r\n */\r\nexport class SuiXhrLoader {\r\n compressed: boolean = false;\r\n value: any = null;\r\n path: string;\r\n binary: boolean = false;\r\n isMidi: boolean = false;\r\n constructor(path: string) {\r\n this.path = path;\r\n if (path.endsWith('mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (path.endsWith('mid')) {\r\n this.isMidi = true;\r\n this.binary = true;\r\n }\r\n }\r\n async _uncompress(result: any): Promise {\r\n const self = this;\r\n const zip = await JSZip.loadAsync(result);\r\n // Find the real xml file in the zip (not metadata)\r\n const filename = Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n self.value = await zip.file(filename).async('text');\r\n return self.value\r\n }\r\n /**\r\n * \r\n * @returns promise resolved when the target file is loaded\r\n */\r\n loadAsync(): Promise {\r\n const req = new XMLHttpRequest();\r\n const self = this;\r\n const promise = new Promise((resolve) => {\r\n req.addEventListener('load', () => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', async () => {\r\n if (self.isMidi) {\r\n self.value = new Uint8Array(reader.result as ArrayBuffer);\r\n resolve(self.value);\r\n }\r\n else if (!self.compressed) {\r\n self.value = reader.result;\r\n resolve(self.value);\r\n } else {\r\n self.value = await self._uncompress(reader.result);\r\n resolve(self.value);\r\n }\r\n });\r\n if (this.isMidi) {\r\n reader.readAsArrayBuffer(req.response);\r\n }\r\n else if (this.binary) {\r\n reader.readAsBinaryString(req.response);\r\n } else {\r\n reader.readAsText(req.response);\r\n }\r\n });\r\n });\r\n req.responseType = 'blob';\r\n req.open('GET', this.path);\r\n req.send();\r\n return promise;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, draggable, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SmoLanguage } from './i18n/language';\r\ndeclare var $: any;\r\n\r\nexport interface HtmlHelpBlock {\r\n title: string,\r\n html: string,\r\n index: number\r\n}\r\nexport type HelpMode = 'cards' | 'expand';\r\nexport class SuiHelp {\r\n static helpMode: HelpMode = 'cards';\r\n static created = false;\r\n static currentCard: number = 0;\r\n static displayHelp() {\r\n $('body').addClass('showHelpDialog');\r\n if (!SuiHelp.created) {\r\n createTopDomContainer('helpDialog');\r\n SuiHelp.created = true;\r\n }\r\n $('.helpDialog').html('');\r\n $('.helpDialog').append(SuiHelp.closeButton.dom());\r\n SuiHelp.helpHtml.forEach((cat, catIx) => {\r\n const r = SuiHelp._buildElements(cat);\r\n $('.helpDialog').append(r.dom());\r\n });\r\n $('button.help-title').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).closest('div.helpLine').toggleClass('showSection');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-plus');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-minus');\r\n });\r\n $('.helpDialog button.icon-cross').off('click').on('click', () => {\r\n $('body').removeClass('showHelpDialog');\r\n $('.workspace').css('height', '');\r\n });\r\n const wsh = window.innerHeight;\r\n $('.workspace').css('height', '' + wsh + 'px');\r\n const cb = () => {};\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.helpDialog'),\r\n handle: $('.helpDialog').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n SuiHelp.setCards();\r\n }\r\n static setCards() {\r\n $('.helpDialog').addClass('card-view');\r\n const lines = $('.helpDialog .helpLine');\r\n const numLines = $(lines).length;\r\n $(lines).each((ix: number, line: any) => {\r\n const lineno = parseInt($(line).attr('data-index'));\r\n if (lineno !== SuiHelp.currentCard) {\r\n $(line).addClass('hide');\r\n } else {\r\n $(line).removeClass('hide');\r\n const prevButton = $(line).find('button.prev-topic');\r\n const nextButton = $(line).find('button.next-topic');\r\n if (lineno === numLines - 1) {\r\n $(nextButton).addClass('hide');\r\n }\r\n if (lineno === 0) {\r\n $(prevButton).addClass('hide');\r\n }\r\n $(prevButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + (numLines - 1)) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n $(nextButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + 1) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n }\r\n });\r\n }\r\n\r\n static get closeButton() {\r\n const b = buildDom;\r\n const r = b('div').append(b('span').classes('icon icon-move')).append('div').classes('help-closer').append(\r\n b('button').classes('icon-cross close'));\r\n return r;\r\n }\r\n\r\n static _buildElements(helps: HtmlHelpBlock) {\r\n const b = buildDom;\r\n const r = b('div').classes('helpLine').attr('data-index', helps.index.toString())\r\n .append(b('div').classes('help-category-button')\r\n .append(b('button')\r\n .append(b('span').classes('icon icon-plus')).classes('help-title')\r\n .append(b('span').classes('help-category-text').text(helps.title))))\r\n .append(b('h3').text(helps.title)) \r\n .append(b('div').classes('help-content').html(helps.html))\r\n .append(b('div').classes('button-container')\r\n .append(b('button').classes('prev-topic')\r\n .append(b('span').classes('icon icon-arrow-left'))\r\n .append(b('span').classes('prev-topic-text').text('Previous Topic')))\r\n .append(b('button').classes('next-topic')\r\n .append(b('span').classes('next-topic-text').text('Next Topic'))\r\n .append(b('span').classes(' icon icon-arrow-right'))));\r\n return r;\r\n }\r\n\r\n static get helpHtml() {\r\n /* [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardVoicesHiddenNotesHtmlEn\r\n]; */\r\n const cards = [\r\n { title: 'Keys', html: SmoLanguage.getHelpFile('cardKeysHtml') },\r\n { title: 'Notes - letter notes', html: SmoLanguage.getHelpFile('cardNotesLetterHtml') },\r\n { title: 'Notes - chromatic and octave', html: SmoLanguage.getHelpFile('cardNotesChromaticHtml') },\r\n { title: 'Notes - chords', html: SmoLanguage.getHelpFile('cardNotesChordsHtml') },\r\n { title: 'Notes - rests', html: SmoLanguage.getHelpFile('cardNotesRestsHtml') },\r\n { title: 'Duration', html: SmoLanguage.getHelpFile('cardDurationNotesHtml') },\r\n { title: 'Duration - tuplets', html: SmoLanguage.getHelpFile('cardDurationTupletsHtml') },\r\n { title: 'Selections - notes', html: SmoLanguage.getHelpFile('cardSelectionsNotesHtml') },\r\n { title: 'Selections - modifiers', html: SmoLanguage.getHelpFile('cardSelectionsModifiersHtml') },\r\n { title: 'Selections - non-selectable modifiers', html: SmoLanguage.getHelpFile('cardSelectionsNonSelectableHtml') },\r\n { title: 'Selections - slash menus', html: SmoLanguage.getHelpFile('cardSelectionsSlashHtml') },\r\n { title: 'Beams and Stems - direction', html: SmoLanguage.getHelpFile('cardBeamsAndStemsDirectionHtml') },\r\n { title: 'Beams and Stems - grouping', html: SmoLanguage.getHelpFile('cardBeamsAndStemsGroupingHtml') },\r\n { title: 'Measures - insert and delete', html: SmoLanguage.getHelpFile('cardMeasuresAddDeleteHtml') },\r\n { title: 'Staves - add and delete', html: SmoLanguage.getHelpFile('cardPartAddDeleteHtml') },\r\n { title: 'Voices - create and delete', html: SmoLanguage.getHelpFile('cardVoicesCreateDeleteHtml') },\r\n ];\r\n const blocks: HtmlHelpBlock[] = [];\r\n cards.forEach((card, cardIx) => {\r\n blocks.push({ index: cardIx, ...card});\r\n });\r\n return blocks;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoLanguageStringAr } from './language_ar';\r\nimport { smoLanguageStringDe } from './language_de';\r\nimport { smoLanguageStringEn } from './language_en';\r\nimport { MenuChoiceDefinition, MenuDefinition, MenuTranslation } from '../menus/menu';\r\nimport { ButtonLabel } from '../buttons/button';\r\nimport { RibbonButtons } from '../buttons/ribbon';\r\nimport { DialogTranslation } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport interface TranslationStrings {\r\n dialogs: DialogTranslation[],\r\n menus: MenuTranslation[],\r\n buttonText: ButtonLabel[]\r\n}\r\nexport type languageDirection = 'ltr' | 'rtl';\r\nexport interface LanguageTranslation {\r\n dir: languageDirection, strings: TranslationStrings, helpHtml: any\r\n}\r\nexport class SmoTranslator {\r\n static dialogs: any[] = [];\r\n\r\n static menus: any[] = [];\r\n\r\n static registerMenu(_class: any) {\r\n if (!SmoTranslator.menus[_class]) {\r\n SmoTranslator.menus[_class] = true;\r\n }\r\n }\r\n static registerDialog(_class: any) {\r\n if (!SmoTranslator.dialogs[_class]) {\r\n SmoTranslator.dialogs[_class] = true;\r\n }\r\n }\r\n\r\n static printLanguages() {\r\n const dialogs: any[] = [];\r\n const menus: any[] = [];\r\n SmoTranslator.allDialogs.forEach((key) => {\r\n SmoTranslator.registerDialog(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n dialogs.push(translatable.printTranslate(key));\r\n });\r\n SmoTranslator.allMenus.forEach((key) => {\r\n SmoTranslator.registerMenu(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n menus.push(translatable.printTranslate(key));\r\n });\r\n const buttonText: any[] = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n\r\n console.log(JSON.stringify({ dialogs, menus, buttonText }, null, ' '));\r\n }\r\n\r\n static _updateDialog(dialogStrings: DialogTranslation, _dialogClass: any, dialogClass: string) {\r\n if (!dialogStrings) {\r\n console.log('no strings for Dialog ' + dialogClass);\r\n return;\r\n }\r\n _dialogClass.label = dialogStrings.label;\r\n const staticText = dialogStrings.staticText;\r\n if (staticText || _dialogClass.dialogElements.staticText) {\r\n const keys = Object.keys(staticText);\r\n keys.forEach((key) => {\r\n _dialogClass.dialogElements.staticText[key] = staticText[key];\r\n });\r\n }\r\n _dialogClass.dialogElements.label = dialogStrings.label;\r\n _dialogClass.dialogElements.elements.forEach((component: any) => {\r\n const componentStrings = dialogStrings.dialogElements.find((ds: any) => ds.id === component.smoName);\r\n if (componentStrings) {\r\n component.label = componentStrings.label;\r\n if (component.options) {\r\n component.options.forEach((option: any) => {\r\n const optionString = componentStrings!.options!.find((cs: any) => cs.value === option.value);\r\n if (!optionString) {\r\n console.log('no string for option ' + option.value + ' in component ' + component.smoName + ' in dialog ' + dialogClass);\r\n } else {\r\n option.label = optionString.label;\r\n }\r\n });\r\n }\r\n } else {\r\n console.log('Untranslated component in ' + dialogClass);\r\n }\r\n });\r\n }\r\n\r\n static _updateMenu(menuStrings: MenuTranslation, _menuClass: any, menuClass: string) {\r\n if (!menuStrings) {\r\n console.log('no strings for Menu ' + menuClass);\r\n return;\r\n }\r\n const defaults = _menuClass.defaults as MenuDefinition;\r\n defaults.menuItems.forEach((menuItem: MenuChoiceDefinition) => {\r\n const val = menuItem.value;\r\n const nvPair = menuStrings.menuItems.find((ff: any) => ff.value === val);\r\n if (!nvPair) {\r\n console.log('no xlate for ' + val + ' in menu ' + menuClass);\r\n } else {\r\n menuItem.text = nvPair.text;\r\n console.log('setting menu item value ' + val + ' to ' + nvPair.text);\r\n }\r\n });\r\n }\r\n\r\n static setLanguage(language: string) {\r\n if (!(SmoLanguage as any)[language]) {\r\n return; // no xlate exists\r\n }\r\n const trans = (SmoLanguage as any)[language] as LanguageTranslation;\r\n // Set the text in all the menus\r\n SmoTranslator.allMenus.forEach((menuClass) => {\r\n const _class = eval('globalThis.Smo.' + menuClass);\r\n const menuStrings = trans.strings.menus.find((mm: MenuTranslation) => mm.ctor === menuClass);\r\n if (menuStrings) {\r\n SmoTranslator._updateMenu(menuStrings, _class, menuClass);\r\n\r\n // Set text in ribbon buttons that invoke menus\r\n const menuButton = $('.ribbonButtonContainer button.' + menuClass).find('.left-text .text-span');\r\n if (menuButton.length && menuStrings) {\r\n $(menuButton).text(menuStrings.label);\r\n }\r\n }\r\n });\r\n\r\n SmoTranslator.allDialogs.forEach((dialogClass) => {\r\n const _class = eval('globalThis.Smo.' + dialogClass);\r\n const dialogStrings = trans.strings.dialogs.find((mm: any) => mm.ctor === dialogClass);\r\n if (typeof (_class) === 'undefined') {\r\n console.log('no eval for class ' + dialogClass);\r\n return;\r\n }\r\n if (!dialogStrings) {\r\n return;\r\n }\r\n // Set text in ribbon buttons that invoke menus\r\n const dialogButton = $('.ribbonButtonContainer button.' + dialogClass).find('.left-text .text-span');\r\n if (dialogButton.length && dialogStrings) {\r\n $(dialogButton).text(dialogStrings.label);\r\n }\r\n\r\n SmoTranslator._updateDialog(dialogStrings, _class, dialogClass);\r\n });\r\n\r\n // Translate the buttons on the ribbon\r\n const langButtons = trans.strings.buttonText;\r\n if (langButtons) {\r\n RibbonButtons.translateButtons.forEach((button: any) => {\r\n const langButton = langButtons.find((lb: any) => lb.buttonId === button.buttonId);\r\n if (langButton) {\r\n const buttonDom = $('.ribbonButtonContainer #' + button.buttonId);\r\n if (buttonDom.length) {\r\n $(buttonDom).find('.left-text').text(langButton.buttonText);\r\n }\r\n }\r\n });\r\n }\r\n // Handle rtl languages\r\n $('body').find('.language-dir').each((ix: number, dd: any) => { $(dd).attr('dir', trans.dir); });\r\n }\r\n\r\n static get allMenus() {\r\n return [\r\n 'SuiDynamicsMenu',\r\n 'SuiFileMenu',\r\n 'SuiKeySignatureMenu',\r\n 'SuiLanguageMenu',\r\n 'SuiMeasureMenu',\r\n 'SuiPartMenu',\r\n 'SuiScoreMenu',\r\n 'SuiStaffModifierMenu',\r\n 'SuiTimeSignatureMenu',\r\n ];\r\n }\r\n\r\n static get allDialogs() {\r\n return [\r\n // file dialogs\r\n 'SuiChordChangeDialog',\r\n 'SuiDynamicModifierDialog',\r\n 'SuiGlobalLayoutDialog',\r\n 'SuiHairpinAttributesDialog',\r\n 'SuiInsertMeasures',\r\n 'SuiInstrumentDialog',\r\n 'SuiLoadFileDialog',\r\n 'SuiLoadMxmlDialog',\r\n 'SuiLyricDialog',\r\n 'SuiMeasureDialog',\r\n 'SuiPageLayoutDialog',\r\n 'SuiPartInfoDialog',\r\n 'SuiPrintFileDialog',\r\n 'SuiSaveFileDialog',\r\n 'SuiSaveMidiDialog',\r\n 'SuiSaveXmlDialog',\r\n 'SuiScoreFontDialog',\r\n 'SuiScorePreferencesDialog',\r\n 'SuiScoreIdentificationDialog',\r\n 'SuiScoreViewDialog',\r\n 'SuiSlurAttributesDialog',\r\n 'SuiStaffGroupDialog',\r\n 'SuiTempoDialog',\r\n 'SuiTextBlockDialog',\r\n 'SuiTieAttributesDialog',\r\n 'SuiTimeSignatureDialog',\r\n 'SuiVoltaAttributeDialog'\r\n ];\r\n }\r\n}\r\n\r\nexport class SmoLanguage {\r\n static getHelpFile(category: any) {\r\n // TODO: how to express language if it is not part of the config?\r\n return eval('globalThis.Smo.' + category + 'En');\r\n }\r\n static get en(): LanguageTranslation {\r\n const strings: TranslationStrings = JSON.parse(smoLanguageStringEn) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get ar(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringAr) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'rtl', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get de(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringDe) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n}\r\n","\r\nexport const smoLanguageStringAr = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"وضع الإيقاع\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"وحدة لكل ضربه\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"ملف\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"جديدe\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"فتح\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"حفظ\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"طباعه\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"إلغاء\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"الدليل\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"وزن الإيقاع\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"خطوط\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"تصاعد\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"تهابط\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"طمس / تعادل\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"النهاية التاسعة\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"ملف\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\n\r\nexport const quickStartHtmlar = `(Arabic)\r\n

Quick start guide

\r\n

If you don't like to read instructions, this cook's tour of Smoosic was made for you.

\r\n
    \r\n
  • One of buttons on the left is called 'File'. Click on it. The menu items before 'cancel' are pre-canned projects that you can use as a template to get you started.

    \r\n
  • \r\n
  • The cursor keys will navigate you to the different notes.

    \r\n
  • \r\n
  • Letters a-g on the computer keyboard change the note to those pitches

    \r\n
  • \r\n
  • 'Insert' adds a new, blank measure.

    \r\n
  • \r\n
  • The ribbon of thick blue buttons on the top expand to button groups, that contain most of the functionality of Smoosic.

    \r\n
  • \r\n
  • The buttons on the left bring up menus or dialogs that do basically what the buttons say.

    \r\n
  • \r\n
  • There are a few 'instant gratification' buttons for playing the music, refreshing the screen or changing the zoom level on the left part of the ribbon.

    \r\n
  • \r\n
  • The piano tool is an alternate way of entering music, or can be dismissed by the close button in the lower left.

    \r\n
  • \r\n
\r\n

\"\"

\r\n`;\r\n\r\n\r\nexport const selectionHtmlar = `(Arabic)\r\n

Selecting things

\r\n

Almost all operations in Smoosic act on the selected music. You can select notes in different ways:

\r\n
    \r\n
  1. with the computer mouse
  2. \r\n
  3. with the keyboard's navigation keys
  4. \r\n
  5. with the navigation keys on the ribbon
  6. \r\n
  7. with the piano tool, to some extent.
  8. \r\n
\r\n

\"\"

\r\n

You can select multiple things with the keyboard navigation keys, by selecting 'shift-arrow', just like many applications. There is a similar control for selection in the navigation ribbon. Some operations, like changing pitch for instance, act on all the selected notes.

\r\n

Sometimes a selection of one line affects all the measures in that column (or all the measures of the system, if you like). When you change the key, for instance, the selection determines where the key change starts. If you have multiple measures selected, it applies to those measures, and then changes back to whatever it was before.

\r\n`;\r\n\r\n\r\nexport const enterDurationsHtmlar = `(Arabic)\r\n

Note duration in Smoosic is done by changing the duration of an existing note. Usually, doubling the duration or cutting it in two, or adding a dot - duration to a note. You can also create tuplets for uneven sets of notes (3, 5, or 7).

\r\n

There are actually 3 ways to do many duration operations - using the piano tool, using the computer keyboard, or using the button ribbon. Like with many things, you should find entering duration using the keyboard fastest, once you have some experience with Smoosic. But the ribbon or the

\r\n

Changing note length with the keyboard

\r\n

You can change the length of notes using the ',' and '.' (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 3/4 for the second dot, if you like to think of it that way) or remove a dot, using the '>' and '<'. The mnemonic device for these is '>' makes note duration greater. '<' makes note duration...less. (On most QWERTY keyboards, comma shifted is '<' and period shifted is '>').

\r\n

\"\"

\r\n

Note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had. You can use the cursor navigation keys to move to a specific selected note.

\r\n

\"\"

\r\n

When you increase the length of a note, Smoosic always 'borrows' from the next note in the measure that is eligible. So when you double the length of the 8th note, it combines the 16th, and 2 32nd notes, and collapses them into a single quarter. If Smoosic can't honor the request, it does nothing. For instance, it can't remove the dot from a note with no dot, and it can't extend beyond the length of the measure.

\r\n

You can create tuplets from the keyboard by typing Ctrl-3, Ctrl-5 or Ctrl-7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys '-' (minus) and '=' (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl-0.

\r\n

\"\"

\r\n

Changing note length with piano widget

\r\n

The piano widget is shown when the application starts, and can be restored from the left menu 'Piano' button when closed.

\r\n

You can double or halve note duration, or add dot duration, to a note using the piano tool.

\r\n

\"\"

\r\n

Changing note length from the button ribbon

\r\n

All the duration commands can be accomplished from the ribbon buttons.

\r\n

\"\"

\r\n

Note that the equivalent keyboard commands are also indicated on the right of each button, when it's available. (there are only so many keys, so there are some ribbon buttons with no key shortcut).

\r\n`;\r\n\r\n\r\nexport const enterPitchesHtmlar = `(Arabic)\r\n

There are a few ways to enter notes in Smoosic. You can click on the piano widget keys, or you can enter notes directly from the keyboard.

\r\n

Your first Smoosical notes

\r\n

Notes from the keyboard

\r\n

The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff (Most key commands in Smoosic have a mnemonic device). The default behavior is for the cursor to advance when a note is entered in this way. (Future behavior, auto-advance can be overridden). You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

You change the octave from the keyboard using the '_' and '+' (underscore, aka shift-minus, and plus), and change notes chromatically using '-' and '=' key. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the 'Shift-E' (mnemonic: E for enharmonic - get it?). And Shift-F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The '3' key makes a third, the '4' key a fourth, and so on. Shift+number gives you the interval down.

\r\n

\"\"

\r\n

Note that the interval starts from the highest note in the chord, for intervals going up, and the lowest note in the chord, for intervals going down. You can select individual pitches in the chord using 'Shift-Up Arrow' as shown. This is similar to how modifiers like dynamics are selected. Once you have the pitch selected, you can change it using the up-down commands shows above, or change the enharmonic spelling.

\r\n

There is currently no way to remove a single pitch from the chord. If you want to collapse the chord, just type a letter a-g on the keyboard, and it will be replaced with a single note.

\r\n

Notes from the piano tool

\r\n

You can also add notes to your score with the piano tool, by clicking on the corresponding notes.

\r\n

\"\"

\r\n

Clicking on the piano gives the selected note the piano pitch. The octave of the note is based on the clef, so for treble clef, the 'C' is middle 'C'. You can change the octave of the note, and move the pitch up and down. The top buttons affect the pitch, and the bottom buttons navigate or change the length of the note. Clicking on the chord button acts like a 'sustain' that puts additional notes in chords.

\r\n

Everything that can be done from the piano widget, and most things in Smoosic generally, can be done more efficiently with keyboard commands. Once you are comfortable with the computer keyboard, you can free up some screen real-estate by closing the piano widget (cross control in lower left). You can bring it up again with the piano menu button on the left.

\r\n`;\r\n","\r\nexport const smoLanguageStringDe = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Datei laden\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Takt Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Takt Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Modus\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Dauer (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Text und Dauer festlegen\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Einheit für Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Seitengröße\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Brief\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Brief (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"benutzerdefiniert\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Schriftart\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Schriftart\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Startposition\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Endposition\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"Datei\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"Neu\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Öffnen\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Schnellspeichern\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Speichern\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Drucken\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Tonlage\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Taktzeit\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"benutzerdefiniert\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Bogen/Bindung\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth Ende\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n}`;\r\n","\r\nexport const smoLanguageStringEn = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Mode\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Unit for Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"File\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"New Score\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Open\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Print\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }, \r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Key\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Time Sig\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Slur\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth ending\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\nexport const cardKeysHtmlEn = `\r\n

Welcome to Smoosic

\r\n

Smoosic was designed to allow you to enter music as fast as you can type, once you learn some basic commands and patterns. While music can be entered in multiple ways, the fastest/easiest way to create or edit in Smoosic is to use some basic keyboard shortcuts.

\r\n

You can customize the key bindings (which keys do what) by changing the files in src/ui/keyBindings/ directory, or by providing your own bindings. See the custom-keybinding.html in the project that demonstrates how to create your own key bindings.\r\n\"\"

\r\n`;\r\n\r\nexport const cardNotesLetterHtmlEn = `\r\n

Most key commands in Smoosic have a mnemonic device. The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff. The default behavior is for the cursor to advance when a note is entered in this way. This can be overridden in the 'Score Preferences' dialog. You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

Some conventions used in this documentation:

\r\n

Keystrokes are specified in bold, e.g. x means the 'x' key. Shift+E means to press the Shift and E keys at the same time.

\r\n

Key sequences are specified on their own line:

\r\n

/ a

\r\n

means to press the / key followed by the a key.

\r\n`;\r\n\r\nexport const cardNotesChromaticHtmlEn = `\r\n

You change notes chromatically using - and = key. You can change the octave using the _ (underscore) and + (plus) keys. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the Shift+E (mnemonic: E for enharmonic - get it?). And Shift+F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesChordsHtmlEn = `\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The 3 key makes a third, the 4 key a fourth, and so on. Shift+3 gives you the 3rd below.

\r\n

You can toggle selection to individual pitches by using Shift+UpArrow. So to create a G triad, starting with g, hit 3 for the 'B', 3 again for the 'D'. So far, we have G major. To lower the 3rd, Shift+up to select the 'B', then - to lower the pitch.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesRestsHtmlEn = `\r\n

You can toggle notes to rests by pressing r or Delete.

\r\n

In Smoosic, you can't truly delete a note - a 4/4 bar will always have 4 beats of music. But you can 'hide' notes by creating invisible rests. This is another use of Delete.

\r\n

Delete follows standard toggle behavior - deleted notes become rests, and delete rests become invisible rests. Hitting Delete a third time restores the note.

\r\n

Invisible rests show up as partially opaque in the display. But when printed, they are truly invisible.

\r\n

\"\"

\r\n`\r\nexport const cardDurationNotesHtmlEn = `\r\n

Changing duration is a little different in Smoosic than other programs. Rather than selecting a duration (quarter note, etc.), you change (increase/decrease) the duration of existing notes.

\r\n

You can change the length of notes using the , and . (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 5/4 for the second dot, if you like to think of it that way) or remove a dot, using the > (Shift+,) and ,. The mnemonic device for these is > makes note duration greater. < makes note duration less. (On most QWERTY keyboards, comma shifted is < and period shifted is >).

\r\n

\"\"

`;\r\n\r\nexport const cardDurationTupletsHtmlEn = `\r\n

You can create tuplets from the keyboard by typing Ctrl+3, Ctrl+5 or Ctrl+7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys - (minus) and = (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl+0.

\r\n

\"\"

`;\r\n\r\nexport const cardSelectionsNotesHtmlEn = `

Many operations in Smoosic act on the selected music. You select the music the way you select text in a text app, with the to move right, to move left. Shift+→ expands the selection left, etc.

\r\n

\"\"

\r\n

In the last example, note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had when the music changes.\r\nYou can also use the mouse to select notes. Selecting a range across multiple staves is not supported (yet). But you can use Control+click to select notes in multiple staves.

\r\n`;\r\nexport const cardSelectionsModifiersHtmlEn = ` \r\n

A modifier is anything that affects a note, such as an articulation or dynamic. Many modifiers, especially those that affect multiple notes, can be selected with the keyboard. To select a modifier such as a slur, crescendo, or ending, use 'Alt-left arrow' or 'Alt-right arrow' when the first or last note of the modifier is selected. This will move the selecttion between modifiers that apply to that note.

\r\n

You can also select modifiers with the mouse.

\r\n

Once selected, you can bring up the modifier dialog by hitting 'Enter'.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardSelectionsNonSelectableHtmlEn = `\r\n

Some modifiers, such as articulations, aren't selectable. The keys h, i, j, and k bring up articulations that aren't selectable, but are placed on the note automatically. You can toggle position and on/off by repeating the key.

\r\n

Additional articulations are available from the of articulation button group.

\r\n

You can customize the articulations selected by the key bindings by changing the ui/keyBindings/editorKeys.ts file, or by providing your own bindings. See the custom-keybinding.html example in the project.

\r\n

\"\"

`;\r\n\r\n\r\nexport const cardSelectionsSlashHtmlEn = `\r\n

The buttons on the left (for L-to-R languages) bring up menus and dialogs. These dialogs can also be accessed via the 'Slash' menus.

\r\n

For instance, slurs, ties, hairpins and other modifiers that work on a range of music are created from the 'Lines' menu. You can access this via the slash menu:

\r\n

/ l (el, not one) 2

\r\n

Then you can use the modifier selection to edit the phrase marking to your taste.

\r\n

You can also select modifiers or any menu option with the mouse.

\r\n

\"\"

`;\r\n\r\nexport const cardBeamsAndStemsDirectionHtmlEn = `\r\n

Beams and Stems part 1: Direction

\r\n

The direction of beams and stems is controlled selecting the notes you want to affect and typing Shift+B. The selection will be toggled between auto (default), up, and down. 'Auto' means stems are up if the notes are below 3rd line, so the beam direction will change if the notes do.

\r\n

Note that there are 3 settings, even though only 2 will produce a visible change for any given stem, since 'auto' will be either up or down.

\r\n

\"\"

\r\n`;\r\nexport const cardBeamsAndStemsGroupingHtmlEn = `\r\n

By default, notes are auto-beamed so that a 1/4 note is beamed. So 1/8 notes in 4/4 time will be beamed in 2's, 16th notes in 4's etc. In triple time (e.g. 6/8, 9/8), 1/8 notes are beamed in 3's. You can change this default in the Score Preferences.

\r\n

You can split a beam at any point using the x (mnemonic: x to cancel beaming. You can create a beam by selecting the notes and typing Shift-X. Only notes with 1/8 note duration or less can be beamed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardMeasuresAddDeleteHtmlEn = `\r\n

You can add a single measure at the current selection point by pressing Insert. Shift+Insert appends the new measure to the selected measure.

\r\n

To add many measures, you can do this from the 'Add Measures' dialog. This can be brought up through the 'Measure' button on the left, or by pressing

\r\n

/ a 0 (zero)

\r\n

Deleting the selected measures can be done from the 'Measures' menu on the left, or by pressing

\r\n

/ a 1.

\r\n

Note the insert and delete key behavior is asymmetric. The Delete key is used to toggle notes to rests, and also I thought this made it too easy to accidentally delete a lot of music.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardVoicesCreateDeleteHtmlEn = `\r\n

If you need different rhythms in the same stave, you can do this by creating multiple voices. You add a voice to a measure using the voice buttons - you can have up to 4 voices in a measure.

\r\n

You can select a differnt voice using the voice buttons also.

\r\n

You can delete any voice except voice 1 by selecting the voice, and selecting the Vx button. When a voice is deleted, any voices with a higher number are bumped down - e.g., if you delete voice 2, voice 3 becomes voice 2, etc.

\r\n

By default, the odd-numbered voices (indexed from 1) have stems that point up. You can use the Ctrl+B to change the staff direction if you want.

\r\n

Notes in voices > 1 have different colors in the editor. This is to make editing easier. All voices are black when the music is printed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardPartAddDeleteHtmlEn = `

You can add a new stave/part from the parts menu.

\r\n

/ p 0 (zero)

\r\n

From the dialog, you can select the initial properties of the new stave, such as the clef and transposition.

\r\n

To delete the selected staves:\r\n/ p 1 (zero)

\r\n

Note that you can't delete the only stave - the music will always contain at least one stave.

\r\n

Note: The 'Part' menu may show different options depending on what else is in the score. Other characteristics of the part and staff are covered in the 'Working with Scores' section.

\r\n

\"\"

\r\n`;\r\n\r\nexport const helpCards = [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n];","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from \"../../common/htmlHelpers\";\r\nimport { SmoLanguage, SmoTranslator, TranslationStrings } from \"./language\";\r\nimport { RibbonButtons } from \"../buttons/ribbon\";\r\nimport { ButtonLabel } from \"../buttons/button\";\r\nimport { DialogTranslation, DialogDefinition } from \"../dialogs/dialog\";\r\nimport { DialogDefinitionElement, DialogDefinitionOption } from \"../dialogs/components/baseComponent\";\r\n\r\ndeclare var $: any;\r\n\r\n// ## SmoTranslationEditor\r\n// Create a somewhat user-friendly editor DOM to translate SMO\r\n// dialogs and menus, and any subset, into other languages.\r\nexport class SmoTranslationEditor {\r\n // ### _getHtmlTextInput\r\n // All the editable text elements contain: the code label or value from the\r\n // UI element, the En string, and the translated string, or a copy of the\r\n // EN string if the string has not been translated.\r\n static _getHtmlTextInput(dbLabel: string, enLabel: string, langLabel: string, labelType: string, labelId: string) {\r\n var b = buildDom;\r\n\r\n const compHtml = b('div').classes('dialog-element-container')\r\n .attr('data-' + labelType, labelId).append(\r\n b('div').classes('dialog-component-label').append(\r\n b('span').classes('trans-label').append(\r\n b('span').classes('trans-db-text').text(dbLabel)\r\n ).append(\r\n b('span').classes('trans-en-text').text(enLabel)\r\n ).append(\r\n b('input').classes('trans-label-input')\r\n ).append(\r\n b('span').classes('plaintext-translate hide').text(langLabel)\r\n )\r\n )\r\n ).dom();\r\n return compHtml;\r\n }\r\n\r\n // ### _getMenuTextDialogHtml\r\n // Get all the menu item labels for translation\r\n static _getMenuTextDialogHtml(menuCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n const menuClass = eval('globalThis.Smo.' + menuCtor);\r\n const menuItems = menuClass['defaults'].menuItems;\r\n var enMenu = enStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n\r\n // Get the JSON EN menu, or copy the DB strings if it doesn't exist\r\n if (!enMenu) {\r\n enMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n enMenu!.ctor = menuCtor;\r\n }\r\n // Get the JSON language menu strings, or copy the EN strings if it doesn't exist\r\n var langMenu = langStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n if (!langMenu) {\r\n langMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n langMenu!.ctor = menuCtor;\r\n }\r\n\r\n // create the DOM menu container\r\n var b = buildDom;\r\n const container = b('div').classes('menu-translate-container')\r\n .attr('data-menucontainer', menuCtor).append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('menu-translate-title').text(menuCtor)\r\n ).dom();\r\n const menuItemsDom = b('div').classes('menu-element-container').dom();\r\n\r\n // create the label editor\r\n const menuLabel = SmoTranslationEditor._getHtmlTextInput(menuClass['defaults'].label, enMenu!.label, langMenu!.label,\r\n 'menulabel', menuCtor);\r\n $(menuItemsDom).append(menuLabel);\r\n $(container).append(menuItemsDom);\r\n\r\n // create the editor for each item\r\n menuItems.forEach((item: any) => {\r\n var enItem = enMenu!.menuItems.find((mi: any) => mi.value === item.value);\r\n if (!enItem) {\r\n enItem = JSON.parse(JSON.stringify(item));\r\n }\r\n var langItem = langMenu!.menuItems!.find((mi: any) => mi.value === item.value);\r\n if (!langItem) {\r\n langItem = JSON.parse(JSON.stringify(item));\r\n }\r\n const menuItemDom = b('div').classes('menu-item-container').dom();\r\n const itemEditDom = SmoTranslationEditor._getHtmlTextInput(\r\n item.value, enItem!.text, langItem!.text,\r\n 'itemtext', item.value);\r\n $(menuItemDom).append(itemEditDom);\r\n $(menuItemsDom).append(menuItemDom);\r\n });\r\n return container;\r\n }\r\n static getButtonTranslateHtml(enStrings: TranslationStrings, langStrings: TranslationStrings, transContainer: HTMLElement) {\r\n var b = buildDom;\r\n var buttonDom: HTMLElement = b('div').classes('ribbon-translate-container')\r\n .attr('data-ribbon-translate', 'buttons').append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('ribbon-translate-title').text('Button Text')\r\n ).dom() as HTMLElement;\r\n\r\n var enKeys: ButtonLabel[] = enStrings.buttonText;\r\n if (!enKeys) {\r\n enKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n var langKeys = langStrings.buttonText;\r\n if (!langKeys) {\r\n langKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n enKeys.forEach((button: ButtonLabel) => {\r\n const langObj = langKeys.find((langText: any) => langText.buttonId === button.buttonId);\r\n const langString = langObj ? langObj.buttonText : button.buttonText;\r\n var buttonContainer: HTMLElement = b('div').classes('ribbon-button-container')\r\n .attr('data-buttoncontainer', button.buttonId).dom();\r\n $(buttonContainer).append(\r\n SmoTranslationEditor._getHtmlTextInput(button.buttonId, button.buttonText, langString, 'ribbon-button', button.buttonId)\r\n );\r\n $(buttonDom).append(buttonContainer);\r\n });\r\n $(transContainer).append(buttonDom);\r\n }\r\n\r\n // ### _getStaticTextDialogHtml\r\n // create DOM for the static text section of the dialogs.\r\n static _getStaticTextDialogHtml(elements: DialogDefinition, enDb: Record, langDb: Record, htmlContainer: HTMLElement) {\r\n var b = buildDom;\r\n const keys = Object.keys(elements.staticText);\r\n const nodeContainer = b('div')\r\n .classes('dialog-element-container')\r\n .attr('data-component', 'staticText')\r\n .dom();\r\n elements.staticText.forEach((nv: any) => {\r\n const name = Object.keys(nv)[0];\r\n const value = nv[name];\r\n var enVal = enDb[name] ? enDb[name] : value;\r\n var langVal = langDb[name] ? langDb[name] : enDb[name];\r\n const translateElement = SmoTranslationEditor._getHtmlTextInput(\r\n name, enVal, langVal, 'statictext', name);\r\n $(nodeContainer).append(translateElement);\r\n });\r\n $(htmlContainer).append(nodeContainer);\r\n }\r\n static _getDialogComponentHtml(element: DialogDefinitionElement, enDb: DialogTranslation, langDb: DialogTranslation, container: HTMLElement) {\r\n var b = buildDom;\r\n var label = element.label;\r\n var smoName = element.smoName;\r\n if (typeof (enDb.dialogElements.find) !== 'function') {\r\n console.warn('no ENDB!');\r\n }\r\n var enComponent = enDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!enComponent) {\r\n enComponent = JSON.parse(JSON.stringify(element))\r\n }\r\n var langComponent = langDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!langComponent) {\r\n langComponent = JSON.parse(JSON.stringify(element));\r\n }\r\n const enLabel = enComponent!.label ? enComponent!.label : label;\r\n const langLabel = langComponent!.label ? langComponent!.label : label;\r\n const compHtml = SmoTranslationEditor._getHtmlTextInput(\r\n label, enLabel, langLabel, 'component', smoName);\r\n\r\n if (element.options) {\r\n const optionsHtml = b('div').classes('dialog-component-options').dom();\r\n $(compHtml).append(optionsHtml);\r\n if (!enComponent!.options) {\r\n enComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n if (!langComponent!.options) {\r\n langComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n\r\n element.options.forEach((option: DialogDefinitionOption) => {\r\n var enOption = enComponent!.options!.find((op: any) => op.value === option.value);\r\n var langOption = langComponent!.options!.find((op: any) => op.value === option.value);\r\n if (!enOption || !enOption.label) {\r\n enOption = JSON.parse(JSON.stringify(option));\r\n }\r\n if (!langOption || !langOption.label) {\r\n langOption = JSON.parse(JSON.stringify(option));\r\n }\r\n const optionHtml = SmoTranslationEditor._getHtmlTextInput(\r\n option.value.toString(), enOption!.label, langOption!.label, 'component-option', option!.value.toString());\r\n $(optionsHtml).append(optionHtml)\r\n });\r\n }\r\n $(container).append(compHtml);\r\n }\r\n\r\n static getDialogTranslationHtml(dialogCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('db-translate-container').attr('data-dbcontainer', dialogCtor)\r\n .append(b('button').classes('icon-plus trans-expander'))\r\n .append(b('span').classes('db-translate-title').text(dialogCtor)).dom() as HTMLElement;\r\n var ctor = eval('globalThis.Smo.' + dialogCtor);\r\n if (!ctor) {\r\n console.warn('Bad dialog in translate: ' + dialogCtor);\r\n return;\r\n }\r\n var elements = ctor.dialogElements as DialogDefinition;\r\n var enDb = enStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!enDb) {\r\n enDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }\r\n ));\r\n }\r\n var langDb = langStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!langDb) {\r\n langDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }));\r\n }\r\n const htmlText = SmoTranslationEditor._getHtmlTextInput(dialogCtor, enDb!.label, langDb!.label, 'dialog-label', dialogCtor);\r\n $(container).append(htmlText);\r\n if (elements.staticText) {\r\n SmoTranslationEditor._getStaticTextDialogHtml(elements, enDb!.staticText, langDb!.staticText, container);\r\n }\r\n elements.elements.forEach((element: DialogDefinitionElement) => {\r\n if (element.smoName && element.label) {\r\n SmoTranslationEditor._getDialogComponentHtml(element, enDb!, langDb!, container);\r\n }\r\n });\r\n return container;\r\n }\r\n static getAllTranslationHtml(lang: string) {\r\n const enStr: TranslationStrings = SmoLanguage.en.strings;\r\n const langStr: TranslationStrings = (SmoLanguage as any)[lang].strings;\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('top-translate-container')\r\n .attr('dir', (SmoLanguage as any)[lang].dir).dom() as HTMLElement;\r\n SmoTranslator.allDialogs.forEach((dialog) => {\r\n const htmlDom: HTMLElement | undefined = SmoTranslationEditor.getDialogTranslationHtml(dialog, enStr, langStr);\r\n if (htmlDom) {\r\n $(container).append(htmlDom);\r\n }\r\n });\r\n SmoTranslator.allMenus.forEach((menu) => {\r\n $(container).append(SmoTranslationEditor._getMenuTextDialogHtml(menu, enStr, langStr));\r\n });\r\n SmoTranslationEditor.getButtonTranslateHtml(enStr, langStr, container);\r\n var resultDom = b('div').classes('translation-json-container').append(\r\n b('textarea').classes('translation-json-text')).append(\r\n b('div').append(\r\n b('button').classes('translate-submit-button').text('Submit')\r\n )\r\n ).dom() as HTMLElement;\r\n $(container).append(resultDom);\r\n return container;\r\n }\r\n static parseDom() {\r\n var json = [];\r\n // $('.top-translate-container .db-translate-container[data-dbcontainer] [data-component=\"staticText\"]')\r\n $('.top-translate-container .db-translate-container[data-dbcontainer]').each((ix: number, dbEl: any) => {\r\n var db = $(dbEl).attr('data-dbcontainer');\r\n var obj: any = { ctor: db };\r\n var elements: any[] = [];\r\n var domComponents = $(dbEl).find('[data-component]');\r\n $(domComponents).each(function (ix: number, domComponent: any) {\r\n const compType = $(domComponent).attr('data-component');\r\n if (compType === 'staticText') {\r\n var stElements: any[] = [];\r\n $(domComponent).find('[data-statictext]').each((ix: number, stDom: any) => {\r\n const key = $(stDom).attr('data-statictext');\r\n const value = $(stDom).find('input.trans-label-input').val();\r\n const stNode = JSON.parse('{\"' + key + '\":\"' + value + '\"}');\r\n stElements.push(stNode);\r\n });\r\n elements.push({ staticText: stElements });\r\n } else {\r\n var dbComponent = { id: compType, label: '', options: {} };\r\n dbComponent.label = $(domComponent).find('input.trans-label-input').val();\r\n var compOptions: any[] = [];\r\n $(domComponent).find('[data-component-option]').each(function (ix: number, optionDom: any) {\r\n const value = $(optionDom).find('.trans-db-text').text();\r\n const label = $(optionDom).find('input.trans-label-input').val();\r\n compOptions.push({ value: value, label: label });\r\n });\r\n dbComponent.options = compOptions;\r\n elements.push(dbComponent);\r\n }\r\n });\r\n obj.dialogElements = elements;\r\n json.push(obj);\r\n });\r\n $('.menu-translate-container[data-menucontainer]').each((ix: number, menuEl: any) => {\r\n var menuId = $(menuEl).attr('data-menucontainer');\r\n var obj = { ctor: menuId, label: '', options: {}, menuItems: {} };\r\n const menuLabel = $(menuEl)\r\n .find('.dialog-element-container[data-menulabel] .trans-label-input')\r\n .val();\r\n obj.label = menuLabel;\r\n var menuItems: any[] = [];\r\n var itemsDom = $(menuEl).find('.menu-item-container .dialog-element-container');\r\n $(itemsDom).each((ix: number, itemDom: any) => {\r\n const value = $(itemDom).find('.trans-db-text').text();\r\n const text = $(itemDom).find('input.trans-label-input').val();\r\n menuItems.push({ value: value, text: text });\r\n });\r\n obj.menuItems = menuItems;\r\n json.push(obj);\r\n });\r\n var ribbonText: any[] = [];\r\n $('.ribbon-translate-container .ribbon-button-container').each((ix: number, buttonEl: any) => {\r\n const buttonId = $(buttonEl).find('.trans-db-text').text();\r\n const buttonText = $(buttonEl).find('input.trans-label-input').val();\r\n ribbonText.push({ buttonId: buttonId, buttonText: buttonText });\r\n });\r\n json.push({ ribbonText: ribbonText });\r\n return json;\r\n }\r\n static startEditor(lang: string) {\r\n createTopDomContainer('.translation-editor');\r\n var transDom = SmoTranslationEditor.getAllTranslationHtml(lang);\r\n $('.translation-editor').append(transDom);\r\n $('body').addClass('translation-mode');\r\n $('.plaintext-translate').each(function (ix: number, el: any) {\r\n var txt = $(el).text();\r\n $(el).closest('.trans-label').find('input.trans-label-input').val(txt);\r\n });\r\n\r\n $('.db-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.db-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.menu-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.menu-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.ribbon-translate-container button.trans-expander').off('click').on('click', function () {\r\n const dom = $('.ribbon-translate-container button.trans-expander');\r\n var exp = $(dom).closest('.ribbon-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(dom).removeClass('icon-minus');\r\n $(dom).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(dom).addClass('icon-minus');\r\n $(dom).removeClass('icon-plus');\r\n }\r\n });\r\n $('.translate-submit-button').off('click').on('click', () => {\r\n var json = SmoTranslationEditor.parseDom();\r\n $('.translation-json-text').val(JSON.stringify(json, null, ' '));\r\n });\r\n\r\n\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultEditorKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"=\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"-\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"+\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"upOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"_\",\r\n ctrlKey:false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"downOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"F\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleCourtesyAccidental\"\r\n }, {\r\n event: \"keydown\",\r\n key: \".\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"doubleDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \",\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"halveDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \">\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"dotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"<\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"undotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"a\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"A\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"slashGraceNotes\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"b\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"G\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"removeGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"e\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"f\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeRest\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"rerender\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"p\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"playScore\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"P\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"pausePlayer\"\r\n },\r\n { event: \"keydown\",\r\n key: \" \",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"togglePlayer\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"s\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"stopPlayer\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"t\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"tempoDialog\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n },\r\n // interval commands\r\n {\r\n event: \"keydown\",\r\n key: \"2\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"4\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"6\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"@\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"$\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"#\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"%\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"^\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"&\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"*\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"0\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"unmakeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"B\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleBeamDirection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Delete\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"z\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"undo\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"copy\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"x\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"toggleBeamGroup\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"X\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"beamSelections\"\r\n },{\r\n event: \"keydown\",\r\n key: \"v\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"paste\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"h\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"j\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"k\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"l\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemovePizzicato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"H\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"J\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"K\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"L\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemovePizzicato\"\r\n },{\r\n event: \"keydown\",\r\n key: \"E\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleEnharmonic\"\r\n }\r\n ];\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultTrackerKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeftMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchUp\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchDown\"\r\n }\r\n ];\r\n }\r\n}\r\n","import { SmoDynamicText } from '../../smo/data/noteModifiers';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiDynamicsMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Dynamics',\r\n menuItems: [{\r\n icon: 'pianissimo',\r\n text: 'Pianissimo',\r\n value: 'pp'\r\n }, {\r\n icon: 'piano',\r\n text: 'Piano',\r\n value: 'p'\r\n }, {\r\n icon: 'mezzopiano',\r\n text: 'Mezzo-piano',\r\n value: 'mp'\r\n }, {\r\n icon: 'mezzoforte',\r\n text: 'Mezzo-forte',\r\n value: 'mf'\r\n }, {\r\n icon: 'forte',\r\n text: 'Forte',\r\n value: 'f'\r\n }, {\r\n icon: 'fortissimo',\r\n text: 'Fortissimo',\r\n value: 'ff'\r\n }, {\r\n icon: 'sfz',\r\n text: 'sfortzando',\r\n value: 'sfz'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiDynamicsMenu.defaults;\r\n }\r\n\r\n selection(ev: any) {\r\n const text: string = $(ev.currentTarget).attr('data-value');\r\n const props = SmoDynamicText.defaults;\r\n props.text = text;\r\n const dynamic = new SmoDynamicText(props);\r\n this.view.addDynamic(this.tracker.selections[0], dynamic);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {\r\n SuiSaveFileDialog, SuiPrintFileDialog, \r\n // SuiSaveActionsDialog, SuiLoadActionsDialog, \r\n SuiLoadFileDialog, SuiLoadMidiDialog,\r\n SuiSaveXmlDialog, SuiSaveMidiDialog, SuiLoadMxmlDialog, SuiSaveVexDialog\r\n} from '../dialogs/fileDialogs';\r\nimport { SmoScore } from '../../smo/data/score';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiFileMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults = {\r\n label: 'File',\r\n menuItems: [{\r\n icon: 'folder-new',\r\n text: 'New Score',\r\n value: 'newFile'\r\n }, {\r\n icon: 'folder-open',\r\n text: 'Open',\r\n value: 'openFile'\r\n }, {\r\n icon: '',\r\n text: 'Quick Save',\r\n value: 'quickSave'\r\n }, {\r\n icon: 'folder-save',\r\n text: 'Save',\r\n value: 'saveFile'\r\n }, {\r\n icon: '',\r\n text: 'Print',\r\n value: 'printScore'\r\n }, {\r\n icon: '',\r\n text: 'Import MusicXML',\r\n value: 'importMxml'\r\n }, {\r\n icon: '',\r\n text: 'Export MusicXML',\r\n value: 'exportXml'\r\n }, {\r\n icon: '',\r\n text: 'Export Midi',\r\n value: 'exportMidi'\r\n }, {\r\n icon: '',\r\n text: 'Import Midi',\r\n value: 'importMidi'\r\n }, {\r\n icon: '',\r\n text: 'Export Vex',\r\n value: 'exportVex'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiFileMenu.defaults;\r\n }\r\n systemPrint() {\r\n window.print();\r\n createAndDisplayDialog(SuiPrintFileDialog, {\r\n ctor: 'SuiPrintFileDialog',\r\n id: 'print',\r\n eventSource: this.eventSource,\r\n modifier: null,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n tracker: this.tracker\r\n });\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n const self = this;\r\n if (text === 'saveFile') {\r\n createAndDisplayDialog(SuiSaveFileDialog, {\r\n ctor: 'SuiSaveFileDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'openFile') {\r\n createAndDisplayDialog(SuiLoadFileDialog, {\r\n ctor: 'SuiLoadFileDialog',\r\n id: 'loadFile',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'newFile') {\r\n const score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n this.view.changeScore(score);\r\n } else if (text === 'quickSave') {\r\n this.view.quickSave();\r\n } else if (text === 'printScore') {\r\n const systemPrint = () => {\r\n self.systemPrint();\r\n };\r\n this.view.renderer.renderForPrintPromise().then(systemPrint);\r\n } else if (text === 'exportXml') {\r\n createAndDisplayDialog(SuiSaveXmlDialog, {\r\n ctor: 'SuiSaveXmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportVex') {\r\n createAndDisplayDialog(SuiSaveVexDialog, {\r\n ctor: 'SuiSaveVexDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportMidi') {\r\n createAndDisplayDialog(SuiSaveMidiDialog, {\r\n ctor: 'SuiSaveMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'importMxml') {\r\n createAndDisplayDialog(SuiLoadMxmlDialog, {\r\n ctor: 'SuiLoadMxmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n }); \r\n } else if (text === 'importMidi') {\r\n createAndDisplayDialog(SuiLoadMidiDialog, {\r\n ctor: 'SuiLoadMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiKeySignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiKeySignatureMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Key',\r\n menuItems: [{\r\n icon: 'key-sig-c',\r\n text: 'C Major',\r\n value: 'KeyOfC',\r\n }, {\r\n icon: 'key-sig-f',\r\n text: 'F Major',\r\n value: 'KeyOfF',\r\n }, {\r\n icon: 'key-sig-g',\r\n text: 'G Major',\r\n value: 'KeyOfG',\r\n }, {\r\n icon: 'key-sig-bb',\r\n text: 'Bb Major',\r\n value: 'KeyOfBb'\r\n }, {\r\n icon: 'key-sig-d',\r\n text: 'D Major',\r\n value: 'KeyOfD'\r\n }, {\r\n icon: 'key-sig-eb',\r\n text: 'Eb Major',\r\n value: 'KeyOfEb'\r\n }, {\r\n icon: 'key-sig-a',\r\n text: 'A Major',\r\n value: 'KeyOfA'\r\n }, {\r\n icon: 'key-sig-ab',\r\n text: 'Ab Major',\r\n value: 'KeyOfAb'\r\n }, {\r\n icon: 'key-sig-e',\r\n text: 'E Major',\r\n value: 'KeyOfE'\r\n }, {\r\n icon: 'key-sig-bd',\r\n text: 'Db Major',\r\n value: 'KeyOfDb'\r\n }, {\r\n icon: 'key-sig-b',\r\n text: 'B Major',\r\n value: 'KeyOfB'\r\n }, {\r\n icon: 'key-sig-fs',\r\n text: 'F# Major',\r\n value: 'KeyOfF#'\r\n }, {\r\n icon: 'key-sig-cs',\r\n text: 'C# Major',\r\n value: 'KeyOfC#'\r\n },\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiKeySignatureMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n let keySig = $(ev.currentTarget).attr('data-value');\r\n keySig = (keySig === 'cancel' ? keySig : keySig.substring(5, keySig.length));\r\n if (keySig === 'cancel') {\r\n return;\r\n }\r\n this.view.addKeySignature(keySig);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoTranslator } from '../i18n/language';\r\n\r\ndeclare var $: any;\r\nexport class SuiLanguageMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiLanguageMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Language',\r\n menuItems: [{\r\n icon: '',\r\n text: 'English',\r\n value: 'en'\r\n }, {\r\n icon: '',\r\n text: 'Deutsch',\r\n value: 'de'\r\n }, {\r\n icon: '',\r\n text: 'اَلْعَرَبِيَّةُ',\r\n value: 'ar'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n getDefinition() {\r\n return SuiLanguageMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n\r\n SmoTranslator.setLanguage(op);\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier, ModalComponent } from '../common';\r\nimport { BrowserEventSource, EventHandler } from '../eventSource';\r\nimport { KeyBinding } from '../../application/common';\r\nimport { Qwerty } from '../qwerty';\r\nimport { SuiMenuBase, SuiMenuParams } from './menu';\r\ndeclare var $: any;\r\n\r\nexport interface SuiMenuManagerParams {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer?: HTMLElement;\r\n}\r\n\r\nexport class SuiMenuManager {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer: HTMLElement;\r\n bound: boolean = false;\r\n hotkeyBindings: Record = {};\r\n closeMenuPromise: Promise | null = null;\r\n menu: SuiMenuBase | null = null;\r\n keydownHandler: EventHandler | null = null;\r\n menuPosition: SvgBox = { x: 250, y: 40, width: 1, height: 1 };\r\n tracker: SuiTracker;\r\n menuBind: KeyBinding[] = SuiMenuManager.menuKeyBindingDefaults;\r\n constructor(params: SuiMenuManagerParams) {\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.bound = false; \r\n this.menuContainer = params.menuContainer ?? createTopDomContainer('.menuContainer');\r\n this.completeNotifier = params.completeNotifier;\r\n this.undoBuffer = params.undoBuffer;\r\n this.tracker = params.view.tracker;\r\n }\r\n\r\n static get defaults() {\r\n return {\r\n menuBind: SuiMenuManager.menuKeyBindingDefaults,\r\n menuContainer: '.menuContainer'\r\n };\r\n }\r\n\r\n get closeModalPromise() {\r\n return this.closeMenuPromise;\r\n }\r\n\r\n setController(c: CompleteNotifier) {\r\n this.completeNotifier = c;\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n // ### Description:\r\n // slash ('/') menu key bindings. The slash key followed by another key brings up\r\n // a menu.\r\n static get menuKeyBindingDefaults(): KeyBinding[] {\r\n return [\r\n {\r\n event: 'keydown',\r\n key: 'n',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiLanguageMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'k',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiKeySignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'p',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'l',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiStaffModifierMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'd',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiDynamicsMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'f',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiFileMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'm',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiTimeSignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'a',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiMeasureMenu'\r\n }, {\r\n event: 'partSelection',\r\n key: '',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartSelectionMenu'\r\n }\r\n ];\r\n }\r\n _advanceSelection(inc: number) {\r\n if (!this.menu) {\r\n return;\r\n }\r\n const options = $('.menuContainer ul.menuElement li.menuOption');\r\n inc = inc < 0 ? options.length - 1 : 1;\r\n this.menu.focusIndex = (this.menu.focusIndex + inc) % options.length;\r\n $(options[this.menu.focusIndex]).find('button').focus();\r\n }\r\n\r\n unattach() {\r\n if (!this.keydownHandler) {\r\n return;\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n $('body').removeClass('modal');\r\n $(this.menuContainer).html('');\r\n $('body').off('dismissMenu');\r\n this.bound = false;\r\n this.menu = null;\r\n }\r\n\r\n attach() {\r\n if (!this.menu) {\r\n return;\r\n }\r\n let hotkey = 0;\r\n\r\n $(this.menuContainer).html('');\r\n $(this.menuContainer).attr('z-index', '12');\r\n const b = buildDom;\r\n const r = b('ul').classes('menuElement').attr('size', this.menu.menuItems.length.toString())\r\n .css('left', '' + this.menuPosition.x + 'px')\r\n .css('top', '' + this.menuPosition.y + 'px');\r\n this.menu.menuItems.forEach((item) => {\r\n var vkey = (hotkey < 10) ? String.fromCharCode(48 + hotkey) :\r\n String.fromCharCode(87 + hotkey);\r\n\r\n r.append(\r\n b('li').classes('menuOption').append(\r\n b('button').attr('data-value', item.value).append(\r\n b('span').classes('menuText').text(item.text))\r\n .append(b('span').classes('icon icon-' + item.icon))\r\n .append(b('span').classes('menu-key').text('' + vkey))));\r\n item.hotkey = vkey;\r\n hotkey += 1;\r\n });\r\n $(this.menuContainer).append(r.dom());\r\n $('body').addClass('modal');\r\n this.bindEvents();\r\n }\r\n\r\n slashMenuMode(completeNotifier: CompleteNotifier) {\r\n var self = this;\r\n if (this.closeMenuPromise) {\r\n console.log('menu already open, skipping');\r\n return;\r\n }\r\n this.bindEvents();\r\n layoutDebug.addDialogDebug('slash menu creating closeMenuPromise');\r\n // A menu asserts this event when it is done.\r\n this.closeMenuPromise = new Promise((resolve) => {\r\n $('body').off('menuDismiss').on('menuDismiss', () => {\r\n layoutDebug.addDialogDebug('menuDismiss received, resolve closeMenuPromise');\r\n self.unattach();\r\n $('body').removeClass('slash-menu');\r\n self.closeMenuPromise = null;\r\n resolve();\r\n });\r\n });\r\n // take over the keyboard\r\n if (this.closeModalPromise) {\r\n completeNotifier.unbindKeyboardForModal(this as ModalComponent);\r\n }\r\n }\r\n\r\n dismiss() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n displayMenu(menu: SuiMenuBase | null) {\r\n this.menu = menu;\r\n if (!this.menu) {\r\n return;\r\n }\r\n this.menu.preAttach();\r\n this.attach();\r\n this.menu!.menuItems.forEach((item) => {\r\n if (typeof(item.hotkey) !== 'undefined') {\r\n this.hotkeyBindings[item.hotkey] = item.value;\r\n }\r\n });\r\n }\r\n\r\n createMenu(action: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menuPosition = { x: 250, y: 40, width: 1, height: 1 };\r\n // If we were called from the ribbon, we notify the controller that we are\r\n // taking over the keyboard. If this was a key-based command we already did.\r\n layoutDebug.addDialogDebug('createMenu creating ' + action);\r\n const ctor = eval('globalThis.Smo.' + action);\r\n const params: SuiMenuParams = \r\n {\r\n position: this.menuPosition,\r\n tracker: this.tracker,\r\n score: this.score,\r\n completeNotifier: this.completeNotifier,\r\n closePromise: this.closeMenuPromise,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n undoBuffer: this.undoBuffer,\r\n ctor: action\r\n };\r\n this.displayMenu(new ctor(params));\r\n }\r\n\r\n // ### evKey\r\n // We have taken over menu commands from controller. If there is a menu active, send the key\r\n // to it. If there is not, see if the keystroke creates one. If neither, dismissi the menu.\r\n evKey(event: any) {\r\n Qwerty.handleKeyEvent(event);\r\n if (['Tab', 'Enter'].indexOf(event.code) >= 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (event.code === 'Escape') {\r\n this.dismiss();\r\n }\r\n if (this.menu) {\r\n if (event.code === 'ArrowUp') {\r\n this._advanceSelection(-1);\r\n } else if (event.code === 'ArrowDown') {\r\n this._advanceSelection(1);\r\n } else if (this.hotkeyBindings[event.key]) {\r\n $('button[data-value=\"' + this.hotkeyBindings[event.key] + '\"]').click();\r\n } else {\r\n this.menu.keydown();\r\n }\r\n return;\r\n }\r\n const binding = this.menuBind.find((ev) =>\r\n ev.key === event.key\r\n );\r\n if (!binding) {\r\n this.dismiss();\r\n return;\r\n }\r\n this.createMenu(binding.action);\r\n }\r\n\r\n bindEvents() {\r\n this.hotkeyBindings = { };\r\n $('body').addClass('slash-menu');\r\n // We need to keep track of is bound, b/c the menu can be created from\r\n // different sources.\r\n if (!this.bound) {\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n this.bound = true;\r\n }\r\n $(this.menuContainer).find('button').off('click').on('click', (ev: any) => {\r\n if ($(ev.currentTarget).attr('data-value') === 'cancel') {\r\n this.menu!.complete();\r\n return;\r\n }\r\n this.menu!.selection(ev);\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiInsertMeasures } from '../dialogs/addMeasure';\r\nimport { SuiMeasureDialog } from '../dialogs/measureFormat';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\nexport class SuiMeasureMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Add Measures',\r\n value: 'addMenuCmd'\r\n }, {\r\n icon: 'icon-cross',\r\n text: 'Delete Selected Measures',\r\n value: 'deleteSelected'\r\n }, {\r\n icon: '',\r\n text: 'Format Measure',\r\n value: 'formatMeasureDialog'\r\n }, {\r\n icon: '',\r\n text: 'Remove system breaks selection',\r\n value: 'removeSystemBreaks'\r\n }, {\r\n icon: '',\r\n text: 'Reset formatting selection',\r\n value: 'resetFormatting'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n getDefinition() {\r\n return SuiMeasureMenu.defaults;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'formatMeasureDialog') {\r\n createAndDisplayDialog(SuiMeasureDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'measure-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n return;\r\n }\r\n if (text === 'addMenuCmd') {\r\n createAndDisplayDialog(SuiInsertMeasures, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n }\r\n if (text === 'addMenuAfterCmd') {\r\n this.view.addMeasure(true);\r\n this.complete();\r\n }\r\n if (text === 'deleteSelected') {\r\n this.view.deleteMeasure();\r\n }\r\n if (text === 'removeSystemBreaks') {\r\n this.view.removeSystemBreaks();\r\n }\r\n if (text === 'resetFormatting') {\r\n this.view.setMeasureFormat(new SmoMeasureFormat(SmoMeasureFormat.defaults));\r\n }\r\n this.complete();\r\n }\r\n}","import { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { CompleteNotifier } from '../common';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SmoTranslator } from '../i18n/language';\r\ndeclare var $: any;\r\n/**\r\n * Data for a menu choice. 'value' indicates which options selected\r\n * @param icon - .icon class will be added to the choice\r\n * @param text - text to describe the choice\r\n * @param value - the value received by the menu loop\r\n * @param hotkey - optional key binding, if not supplied one is selected\r\n */\r\nexport interface MenuChoiceDefinition {\r\n icon: string,\r\n text: string,\r\n value: string,\r\n hotkey?: string\r\n}\r\n/**\r\n * Menu just array of choices\r\n * @param label - Not currently displayed\r\n * @param menuItems - list of choices\r\n */\r\nexport interface MenuDefinition {\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\nexport interface MenuTranslation {\r\n ctor: string,\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\n/**\r\n * All menus take the same options. Menu choices can alter the score\r\n * directly, or call dialogs or even other menus\r\n * @param ctor dialog constructor\r\n * @param position - menu position\r\n * @param view the MVVM object to change the score\r\n * @param score SmoScore, could also be read from the view\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param closePromise resolved when the menu closes, used to syncronize with other modals\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n*/\r\nexport interface SuiMenuParams {\r\n ctor: string,\r\n position: SvgBox,\r\n tracker: SuiTracker,\r\n score: SmoScore,\r\n completeNotifier: CompleteNotifier,\r\n closePromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer: UndoBuffer\r\n}\r\nexport abstract class SuiMenuBase {\r\n label: string;\r\n menuItems: MenuChoiceDefinition[];\r\n ctor: string;\r\n completeNotifier: CompleteNotifier;\r\n score: SmoScore;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n focusIndex: number = -1;\r\n closePromise: Promise | null;\r\n tracker: SuiTracker;\r\n constructor(params: SuiMenuParams) {\r\n this.ctor = params.ctor;\r\n const definition: MenuDefinition = this.getDefinition();\r\n this.label = definition.label;\r\n this.menuItems = definition.menuItems;\r\n this.completeNotifier = params.completeNotifier;\r\n this.score = params.score;\r\n this.view = params.view;\r\n this.undoBuffer = params.undoBuffer;\r\n this.eventSource = params.eventSource;\r\n this.closePromise = params.closePromise;\r\n this.tracker = params.tracker;\r\n SmoTranslator.registerMenu(this.ctor);\r\n }\r\n abstract selection(ev: any): void;\r\n abstract getDefinition(): MenuDefinition;\r\n /**\r\n * Base class can override this, called before display and event binding to \r\n * add or remove options from the static list\r\n */\r\n preAttach() { }\r\n static printTranslate(_class: string): MenuTranslation {\r\n const xx: any = eval('Smo.' + _class);\r\n const items: MenuChoiceDefinition[] = xx.defaults.menuItems as MenuChoiceDefinition[];\r\n const rvItems: MenuChoiceDefinition[] = [];\r\n items.forEach((item) => {\r\n rvItems.push({ value: item.value, text: item.text, icon: '' });\r\n });\r\n return { ctor: _class, label: xx.defaults.label, menuItems: items };\r\n }\r\n\r\n complete() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n // Most menus don't process their own events\r\n keydown() {}\r\n}","import { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {SuiScoreArpeggioDialog } from '../dialogs/arpeggio';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiNoteMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Toggle Cue',\r\n value: 'toggleCueCmd'\r\n }, {\r\n icon: '',\r\n text: 'Arpeggio',\r\n value: 'arpeggioDialog'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n getDefinition() {\r\n return SuiNoteMenu.defaults;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'toggleCueCmd') {\r\n await this.view.toggleCue();\r\n } else if (text === 'arpeggioDialog') {\r\n createAndDisplayDialog(SuiScoreArpeggioDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiArpeggioDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n }\r\n this.complete(); \r\n }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartSelectionMenu extends SuiMenuBase {\r\n partMap: { keys: number[], partMap: Record } = { keys: [], partMap: {} };\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartSelectionMenu.defaults;\r\n }\r\n selectPart(val: number) {\r\n if (val < 0) {\r\n this.view.viewAll();\r\n this.complete();\r\n return;\r\n }\r\n const partInfo = this.partMap.partMap[val];\r\n this.view.exposePart(this.view.storeScore.staves[partInfo.associatedStaff]);\r\n this.complete();\r\n } \r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.partMap = this.view.getPartMap();\r\n if (this.view.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push({\r\n icon: '',\r\n text: 'View All',\r\n value: '-1'\r\n });\r\n }\r\n this.partMap.keys.forEach((key) => {\r\n defs.push({\r\n icon: '',\r\n text: this.partMap.partMap[key].partName,\r\n value: key.toString()\r\n });\r\n });\r\n defs.push({\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n const choice = parseInt(op);\r\n if (isNaN(choice)) {\r\n this.complete(); // cancel\r\n }\r\n this.selectPart(choice);\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiScoreViewDialog } from '../dialogs/scoreView';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { SuiPartInfoDialog } from '../dialogs/partInfo';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiNewPartDialog } from '../dialogs/newPart';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Create New Part/Stave',\r\n value: 'createPart'\r\n }, {\r\n icon: 'cancel-circle',\r\n text: 'Remove Selected Parts/Staves',\r\n value: 'removePart'\r\n }, {\r\n icon: '',\r\n text: 'Part Properties',\r\n value: 'editPart'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'View Partial Score',\r\n value: 'view'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Instrument Properties',\r\n value: 'editInstrument'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartMenu.defaults;\r\n }\r\n createPart() {\r\n createAndDisplayDialog(SuiNewPartDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'newPartDialog',\r\n ctor: 'SuiNewPartDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execView() {\r\n createAndDisplayDialog(SuiScoreViewDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreViewDialog',\r\n ctor: 'SuiScoreViewDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n editPart() {\r\n const selection = this.view.tracker.selections[0];\r\n const self = this;\r\n\r\n if (this.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) {\r\n this.view.exposePart(selection.staff);\r\n }\r\n this.view.renderPromise().then(() => {\r\n createAndDisplayDialog(SuiPartInfoDialog,\r\n {\r\n completeNotifier: self.completeNotifier!,\r\n view: self.view,\r\n eventSource: self.eventSource,\r\n id: 'editPart',\r\n ctor: 'SuiPartInfoDialog',\r\n tracker: self.view.tracker,\r\n modifier: null,\r\n startPromise: self.closePromise\r\n }\r\n );\r\n });\r\n }\r\n editInstrument() {\r\n createAndDisplayDialog(SuiInstrumentDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'instrumentModal',\r\n ctor: 'SuiInstrumentDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n removePart() {\r\n this.view.removeStaff();\r\n this.complete();\r\n }\r\n pageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n preAttach() {\r\n const fullScore = this.view.score.staves.length < this.view.storeScore.staves.length;\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // Only show 'display all' if the full score is not already displayed\r\n if (item.value === 'viewAll') {\r\n if (!fullScore) {\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'pageLayout') {\r\n // only show the page layout in part menu if we are in part mode\r\n if (this.view.isPartExposed()) {\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'view') {\r\n if (this.view.isPartExposed() === false) {\r\n // don't let the user restrict the view if we are already viewing a part.\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'editPart') {\r\n if (this.view.isPartExposed()) {\r\n item.text = 'Part Properties';\r\n defs.push(item);\r\n }\r\n } else {\r\n defs.push(item);\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n if (op === 'pageLayout') {\r\n this.pageLayout();\r\n this.complete();\r\n } else if (op === 'view') {\r\n this.execView();\r\n this.complete();\r\n } else if (op === 'createPart') {\r\n this.createPart();\r\n this.complete();\r\n } else if (op === 'removePart') {\r\n this.removePart();\r\n this.complete();\r\n } else if (op === 'editPart') {\r\n this.editPart();\r\n this.complete();\r\n } else if (op === 'editInstrument') {\r\n this.editInstrument();\r\n this.complete();\r\n } else if (op === 'cancel') {\r\n this.complete();\r\n } else if (op === 'viewAll') {\r\n this.view.viewAll();\r\n this.complete();\r\n }\r\n }\r\n keydown() { }\r\n}\r\n","import { MenuDefinition, MenuChoiceDefinition, SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { SuiScorePreferencesDialog } from '../dialogs/preferences';\r\nimport { SuiScoreIdentificationDialog } from '../dialogs/scoreId';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiScoreFontDialog } from '../dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../dialogs/globalLayout';\r\nimport { SuiTransposeScoreDialog } from '../dialogs/transposeScore';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiStaffGroupDialog } from '../dialogs/staffGroup';\r\nimport { SuiAudioSettingsDialog } from '../dialogs/audioSettings';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Score Settings',\r\n menuItems: [{\r\n icon: '',\r\n text: 'Smoosic Preferences',\r\n value: 'preferences'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Global Layout',\r\n value: 'globalLayout'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'Audio Settings',\r\n value: 'audioSettings'\r\n }, {\r\n icon: '',\r\n text: 'System Groups',\r\n value: 'staffGroups'\r\n }, {\r\n icon: '',\r\n text: 'Score Fonts',\r\n value: 'fonts'\r\n }, {\r\n icon: '',\r\n text: 'Score Info',\r\n value: 'identification'\r\n }, {\r\n icon: '',\r\n text: 'Transpose Score',\r\n value: 'transposeScore'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiScoreMenu.defaults;\r\n }\r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // show these options no matter what\r\n if (['fonts', 'cancel', 'identification', 'preferences', 'audioSettings', 'transposeScore'].findIndex((x) => x === item.value) >= 0) {\r\n defs.push(item);\r\n } else if (item.value === 'pageLayout' || item.value === 'globalLayout' || item.value === 'staffGroups') {\r\n if (this.view.isPartExposed() === false) {\r\n // only show the page layout in score menu if we are in score mode\r\n defs.push(item);\r\n } \r\n } else if (item.value === 'viewAll') {\r\n // Only show 'view all' if we are not viewing all\r\n if (this.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push(item);\r\n }\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n execStaffGroups() {\r\n createAndDisplayDialog(SuiStaffGroupDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n }\r\n );\r\n }\r\n execScoreId() {\r\n SuiScoreIdentificationDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiScoreIdentificationDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execFonts() {\r\n SuiScoreFontDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'fontDialog',\r\n ctor: 'SuiScoreFontDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execGlobalLayout() {\r\n createAndDisplayDialog(SuiGlobalLayoutDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'globalLayout',\r\n ctor: 'SuiGlobalLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPreferences() {\r\n createAndDisplayDialog(SuiScorePreferencesDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'preferences',\r\n ctor: 'SuiScorePreferencesDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execAudioSettings() {\r\n createAndDisplayDialog(SuiAudioSettingsDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'audioSettings',\r\n ctor: 'SuiAudioSettingsDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execTransposeScore() {\r\n createAndDisplayDialog(SuiTransposeScoreDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiTransposeScoreDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'pageLayout') {\r\n this.execPageLayout();\r\n } else if (text === 'staffGroups') {\r\n this.execStaffGroups();\r\n } else if (text === 'preferences') {\r\n this.execPreferences();\r\n } else if (text === 'fonts') {\r\n this.execFonts();\r\n } else if (text === 'globalLayout') {\r\n this.execGlobalLayout();\r\n } else if (text === 'identification') {\r\n this.execScoreId();\r\n } else if (text === 'viewAll') {\r\n this.view.viewAll();\r\n } else if (text === 'audioSettings') {\r\n this.execAudioSettings();\r\n } else if (text === 'transposeScore') {\r\n this.execTransposeScore();\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SuiScoreView } from '../../render/sui/scoreView';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffModifierMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Lines',\r\n menuItems: [{\r\n icon: 'cresc',\r\n text: 'Cresc. Hairpin',\r\n value: 'crescendo'\r\n }, {\r\n icon: 'decresc',\r\n text: 'Dim. Hairpin',\r\n value: 'decrescendo'\r\n }, {\r\n icon: 'slur',\r\n text: 'Slur',\r\n value: 'slur'\r\n }, {\r\n icon: 'slur',\r\n text: 'Tie',\r\n value: 'tie'\r\n }, {\r\n icon: 'ending',\r\n text: 'nth ending',\r\n value: 'ending'\r\n }, {\r\n icon: '',\r\n text: 'Dim. Bracket',\r\n value: 'dimenuendo'\r\n }, {\r\n icon: '',\r\n text: 'Cresc. Bracket',\r\n value: 'crescendoBracket'\r\n }, {\r\n icon: '',\r\n text: 'Accelerando',\r\n value: 'accel'\r\n }, {\r\n icon: '',\r\n text: 'Ritard',\r\n value: 'ritard'\r\n }, {\r\n icon: 'slur',\r\n text: 'Reset slurs',\r\n value: 'resetSlurs'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiStaffModifierMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n if (op === 'ending') {\r\n this.view.addEnding();\r\n } else if (op === 'slur') {\r\n this.view.slur();\r\n } else if (op === 'tie') {\r\n this.view.tie();\r\n } else if (op === 'accel') {\r\n this.view.accelerando();\r\n } else if (op === 'dimenuendo') {\r\n this.view.dimenuendo();\r\n } else if (op === 'ritard') {\r\n this.view.ritard();\r\n } else if (op === 'crescendoBracket') {\r\n this.view.crescendoBracket();\r\n } else if (op === 'crescendo') {\r\n this.view.crescendo();\r\n } else if (op === 'decrescendo') {\r\n this.view.decrescendo();\r\n } else if (op === 'resetSlurs') {\r\n const self = this;\r\n this.view.refreshViewport().then(() => {\r\n self.complete();\r\n });\r\n return;\r\n }\r\n // else cancel...\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiTimeSignatureDialog } from '../dialogs/timeSignature';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Time Sig',\r\n menuItems: [{\r\n icon: 'sixeight',\r\n text: '6/8',\r\n value: '6/8',\r\n }, {\r\n icon: 'fourfour',\r\n text: '4/4',\r\n value: '4/4',\r\n }, {\r\n icon: 'threefour',\r\n text: '3/4',\r\n value: '3/4',\r\n }, {\r\n icon: 'twofour',\r\n text: '2/4',\r\n value: '2/4',\r\n }, {\r\n icon: 'twelveeight',\r\n text: '12/8',\r\n value: '12/8',\r\n }, {\r\n icon: 'seveneight',\r\n text: '7/8',\r\n value: '7/8',\r\n }, {\r\n icon: 'fiveeight',\r\n text: '5/8',\r\n value: '5/8',\r\n }, {\r\n icon: '',\r\n text: 'Other',\r\n value: 'TimeSigOther',\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiTimeSignatureMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'TimeSigOther') {\r\n createAndDisplayDialog(SuiTimeSignatureDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n this.complete();\r\n return;\r\n }\r\n this.view.setTimeSignature(SmoMeasure.convertLegacyTimeSignature(text));\r\n this.complete();\r\n }\r\n\r\n keydown() { }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer, draggable } from \"../common/htmlHelpers\";\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\nexport interface SuiKbRow {\r\n row: string, shifted: string;\r\n};\r\nexport interface SuiKbKey {\r\n icon: string, text: string, shifted: string, classes: string, dataKey: string\r\n};\r\ndeclare var $: any;\r\nexport class Qwerty {\r\n static _shiftTime: number = 0;\r\n static displayed: boolean = false;\r\n static created: boolean = false;\r\n static get navigationElements() {\r\n const kbRows: SuiKbRow[] =\r\n [\r\n { row: '1234567890-=',shifted:'!@#$%^&*()_+'},\r\n { row: 'QWERTYUIOP[]',shifted:'QWERTYUIOP{}'},\r\n { row:\"ASDFGHJKL;'\", shifted:'ASDFGHJKL:\"'},\r\n { row:'ZXCVBNM,./',shifted:'ZXCVBNM<>?'}\r\n ];\r\n const arrows: SuiKbKey[] = [\r\n {icon: 'icon-arrow-left',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowLeft'},\r\n {icon: 'icon-arrow-right',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowRight'},\r\n {icon:'',text:'Space',classes:'wideKey',shifted:'',dataKey:'Space'},\r\n {icon: 'icon-arrow-up',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowUp'},\r\n {icon: 'icon-arrow-down' ,text:'', shifted:'',classes:'helpKey',dataKey:'ArrowDown'},\r\n {icon: '' ,text:'Ins', shifted:'',classes:'helpKey',dataKey:'Insert'},\r\n {icon: '' ,text:'Del', shifted:'',classes:'helpKey',dataKey:'Delete'},\r\n {icon: '' ,text:'Enter', shifted:'',classes:'wideKey',dataKey:'Enter'}\r\n ];\r\n let keyRows: Record = {};\r\n const labels: string[] = ['topNumbers','keys1','keys2','keys3','arrows'];\r\n let j = 0;\r\n\r\n kbRows.forEach((kbRow) => {\r\n var str = kbRow.row;\r\n var shifted = kbRow.shifted;\r\n var keys: SuiKbKey[] = [];\r\n for (var i = 0;i < str.length;++i) {\r\n if (j === 2 && i === 0) {\r\n keys.push({icon:'',text:'Shift',shifted: '', classes:'wideKey',dataKey:'shift'});\r\n }\r\n if (j === 3 && i === 0) {\r\n keys.push({icon:'', text:'Ctrl',shifted: '', classes:'wideKey', dataKey:'ctrl'});\r\n keys.push({icon:'', text:'Alt', shifted: '',classes:'helpKey', dataKey:'alt'});\r\n }\r\n keys.push({icon:'', text:str[i], shifted:shifted[i], classes:'helpKey', dataKey:str[i]});\r\n }\r\n keyRows[labels[j]] = keys;\r\n j += 1;\r\n });\r\n keyRows[labels[j]] = arrows;\r\n return keyRows;\r\n }\r\n static flashShift() {\r\n if (Qwerty._shiftTime) {\r\n Qwerty._shiftTime = 0;\r\n setTimeout(function() {\r\n Qwerty.flashShift();\r\n }, 1000);\r\n } else {\r\n $('.kb-float').removeClass('shifted');\r\n }\r\n }\r\n\r\n static displayForDuration() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n $('#row-4').hide();\r\n }\r\n\r\n static displayForTuplet() {\r\n Qwerty.displayAll();\r\n $('#row-1').hide();\r\n $('#row-2').hide();\r\n }\r\n\r\n static displayForNav() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n }\r\n\r\n static displayAll() {\r\n $('#row-0').show();\r\n $('#row-1').show();\r\n $('#row-2').show();\r\n $('#row-3').show();\r\n $('#row-4').show();\r\n }\r\n\r\n static _flashButton(key: string) {\r\n var e = $('[data-key=\"'+key+'\"]');\r\n if (!e.length) {\r\n e = $('[data-shift=\"'+key+'\"]');\r\n }\r\n if (e.length) {\r\n $(e).removeClass('transition-button');\r\n $(e).addClass('reverse-button');\r\n setTimeout(function() {\r\n $(e).removeClass('reverse-button');\r\n $(e).addClass('transition-button');\r\n },750);\r\n }\r\n }\r\n static get editingKeys() {\r\n return ['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','Insert','Delete'];\r\n }\r\n static handleKeyEvent(evdata: KeyEvent) {\r\n if (Qwerty.editingKeys.indexOf(evdata.code) >= 0) {\r\n Qwerty._flashButton(evdata.code);\r\n } else if (evdata.key.length === 1\r\n && evdata.key.charCodeAt(0) > 32\r\n && evdata.key.charCodeAt(0) < 127) {\r\n Qwerty._flashButton(evdata.key.toUpperCase());\r\n }\r\n if (evdata.code === 'Space') {\r\n Qwerty._flashButton('Space');\r\n }\r\n if (evdata.code === 'Enter') {\r\n Qwerty._flashButton('Enter');\r\n }\r\n if (evdata.ctrlKey) {\r\n Qwerty._flashButton('ctrl');\r\n }\r\n if (evdata.shiftKey) {\r\n Qwerty._flashButton('shift');\r\n $('.kb-float').addClass('shifted');\r\n Qwerty._shiftTime = 1;\r\n Qwerty.flashShift();\r\n }\r\n if (evdata.altKey) {\r\n Qwerty._flashButton('alt');\r\n }\r\n }\r\n\r\n static _kbButton(buttons: SuiKbKey[]) {\r\n var b = buildDom;\r\n var r = b('span').classes('keyContainer');\r\n buttons.forEach((button) => {\r\n var text = button.text;\r\n var shiftedText = button.shifted ? button.shifted : text;\r\n r.append(b('span').classes(button.icon + ' ' + button.classes)\r\n .attr('data-key',button.dataKey).attr('data-shift',shiftedText)\r\n .append(b('span').classes('button-text').text(text))\r\n .append(b('span').classes('button-shifted').text(shiftedText))\r\n );\r\n });\r\n return r;\r\n }\r\n static _buttonBlock(buttons: SuiKbKey[], id: string) {\r\n var b = buildDom;\r\n var r = b('div').classes('keyBlock').attr('id', id);\r\n r.append(Qwerty._kbButton(buttons));\r\n return r;\r\n }\r\n\r\n static _buildElements(rows: Record) {\r\n const b = buildDom;\r\n const r = b('div').classes('buttonLine')\r\n .append(b('span').classes('icon icon-move'));\r\n const keys = Object.keys(rows);\r\n keys.forEach((key, rowIx) => {\r\n const row = rows[key];\r\n r.append(Qwerty._buttonBlock(row, 'row-'+rowIx));\r\n });\r\n return r;\r\n }\r\n static hideKb() {\r\n $('body').removeClass('showQwerty');\r\n Qwerty.displayed = false;\r\n }\r\n static displayKb() {\r\n if (Qwerty.created) {\r\n $('body').addClass('showQwerty');\r\n Qwerty.displayed = true;\r\n return;\r\n }\r\n createTopDomContainer('.qwertyKb');\r\n $('body').addClass('showQwerty');\r\n $('.qwertyKb').html('');\r\n var b = buildDom;\r\n var r = b('div').classes('kb-float');\r\n r.append(Qwerty._buildElements(Qwerty.navigationElements));\r\n $('.qwertyKb').append(r.dom());\r\n\r\n var cb = function (x: any, y: any ) {}\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.qwertyKb'),\r\n handle: $('.qwertyKb').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb: cb,\r\n moveParent: true\r\n });\r\n Qwerty.displayed = true;\r\n Qwerty.created = true;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class defaultRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = defaultRibbonLayout.leftRibbonIds;\r\n var top = defaultRibbonLayout.displayIds.concat(defaultRibbonLayout.noteButtonIds).concat(defaultRibbonLayout.navigateButtonIds)\r\n .concat(defaultRibbonLayout.articulateButtonIds).concat(defaultRibbonLayout.microtoneIds)\r\n .concat(defaultRibbonLayout.durationIds)\r\n .concat(defaultRibbonLayout.beamIds).concat(defaultRibbonLayout.measureIds)\r\n .concat(defaultRibbonLayout.staveIds)\r\n .concat(defaultRibbonLayout.textIds).concat(defaultRibbonLayout.playerIds)\r\n .concat(defaultRibbonLayout.voiceButtonIds).concat(defaultRibbonLayout.debugIds);\r\n\r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get ribbonButtons(): ButtonDefinition[] {\r\n return defaultRibbonLayout.leftRibbonButtons.concat(\r\n defaultRibbonLayout.navigationButtons).concat(\r\n defaultRibbonLayout.noteRibbonButtons).concat(\r\n defaultRibbonLayout.articulationButtons).concat(\r\n defaultRibbonLayout.microtoneButtons).concat(\r\n defaultRibbonLayout.chordButtons).concat(\r\n defaultRibbonLayout.durationRibbonButtons).concat(defaultRibbonLayout.beamRibbonButtons).concat(defaultRibbonLayout.measureRibbonButtons)\r\n .concat(defaultRibbonLayout.staveRibbonButtons)\r\n .concat(defaultRibbonLayout.textRibbonButtons).concat(defaultRibbonLayout.playerButtons)\r\n .concat(defaultRibbonLayout.voiceRibbonButtons).concat(defaultRibbonLayout.displayButtons).concat(defaultRibbonLayout.debugRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return ['helpDialog', 'languageMenu', 'fileMenu', 'libraryMenu',\r\n 'scoreMenu', 'partMenu', 'noteMenu', 'addStaffMenu', 'measureModal', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton', 'AddGraceNote', 'RemoveGraceNote', 'SlashGraceNote',\r\n 'XNoteHead', 'TriUpNoteHead', 'CircleXNoteHead', 'DiamondNoteHead',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n static get voiceButtonIds() {\r\n return ['VoiceButtons', 'V1Button', 'V2Button', 'V3Button', 'V4Button', 'VXButton'];\r\n }\r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n static get articulateButtonIds() {\r\n return ['articulationButtons', 'accentButton', 'tenutoButton', 'staccatoButton', 'marcatoButton', 'fermataButton', 'pizzicatoButton', 'mordentButton', 'mordentInvertedButton', 'trillButton'\r\n , 'scoopButton', 'dropButton', 'dropLongButton', 'doitButton', 'doitLongButton', 'flipButton', 'smearButton'];\r\n }\r\n\r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get debugIds() {\r\n return ['DebugGroup', 'DebugButton2'];\r\n }\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n static get measureIds() {\r\n return ['MeasureButtons', 'endRepeat', 'startRepeat', 'endBar', 'doubleBar', 'singleBarEnd', 'singleBarStart', 'nthEnding', 'dcAlCoda', 'dsAlCoda', 'dcAlFine', 'dsAlFine', 'coda', 'toCoda', 'segno', 'toSegno', 'fine'];\r\n }\r\n static get staveIds() {\r\n return ['StaveButtons', 'clefTreble', 'clefBass', 'clefAddRemove', 'clefMoveUp', 'clefMoveDown', 'moreStaffButtons',\r\n 'clefTenor', 'clefAlto', 'clefPercussion',\r\n 'staffBracketLower', 'staffBraceLower', 'staffDoubleConnectorLower', 'staffSingleConnectorLower'];\r\n }\r\n static get textIds() {\r\n return ['TextButtons', 'addTextMenu', 'rehearsalMark', 'lyrics', 'chordChanges', 'addDynamicsMenu'];\r\n }\r\n\r\n static get beamIds() {\r\n return ['BeamButtons', 'breakBeam', 'beamSelections', 'toggleBeamDirection'];\r\n }\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get microtoneIds() {\r\n return ['MicrotoneButtons', 'flat75sz', 'flat25sz', 'flat25ar', 'flat125ar', 'sharp75', 'sharp125', 'sharp25', 'sori', 'koron'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'selectPart', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n\r\n static get textRibbonButtons(): ButtonDefinition[] {\r\n return [\r\n {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent measure',\r\n icon: 'icon-text',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'textEdit',\r\n id: 'TextButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '/t',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-textBasic',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'addTextMenu'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-rehearsemark',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'rehearsalMark'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-lyric',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'lyrics'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-chordSymbol',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'chordChanges'\r\n }, {\r\n leftText: '',\r\n rightText: '/d',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-mezzopiano',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'addDynamicsMenu'\r\n }\r\n ];\r\n }\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'Select Part',\r\n classes: 'icon select-part-button',\r\n icon: 'icon-circle-down',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'selectPart'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get microtoneButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent microtones',\r\n icon: 'icon-microtone',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'microtone',\r\n id: 'MicrotoneButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat25sz',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat25sz'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat75sz',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat75sz'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat25ar',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat25ar'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp75',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp75'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp125',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp125'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp25',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp25'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sori',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sori'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-koron',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'koron'\r\n }];\r\n }\r\n\r\n static get staveRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent staves',\r\n icon: 'icon-treble',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'staves',\r\n id: 'StaveButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-treble',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefTreble'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-bass',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefBass'\r\n }, \r\n {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-arrow-up',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefMoveUp'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-arrow-down',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefMoveDown'\r\n },\r\n {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'staves',\r\n id: 'moreStaffButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-tenor',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefTenor'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-alto',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefAlto'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-percussion',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefPercussion'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-brace',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'staffBraceLower'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-bracket',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'staffBracketLower'\r\n }\r\n\r\n ];\r\n }\r\n\r\n static get beamRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent beams',\r\n icon: 'icon-flag',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'beams',\r\n id: 'BeamButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'x',\r\n icon: 'icon-beamBreak',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'breakBeam'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Shift-X',\r\n icon: 'icon-beam',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'beamSelections'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Shift-B',\r\n icon: 'icon-flagFlip',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'toggleBeamDirection'\r\n }\r\n ];\r\n }\r\n\r\n static get measureRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent measure',\r\n icon: 'icon-end_rpt',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'measure',\r\n id: 'MeasureButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-end_rpt',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'endRepeat'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-start_rpt',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'startRepeat'\r\n }\r\n ,\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-end_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'endBar'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-double_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'doubleBar'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-single_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'singleBarEnd'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-single_bar_start',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'singleBarStart'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-ending',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'nthEnding'\r\n },\r\n {\r\n leftText: 'DC Al Coda',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dcAlCoda'\r\n },\r\n {\r\n leftText: 'DS Al Coda',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dsAlCoda'\r\n },\r\n {\r\n leftText: 'DC Al Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dcAlFine'\r\n },\r\n {\r\n leftText: 'DS Al Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dsAlFine'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-coda',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'coda'\r\n },\r\n {\r\n leftText: 'to ',\r\n rightText: '',\r\n icon: 'icon-coda',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'toCoda'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-segno',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'segno'\r\n },\r\n {\r\n leftText: 'Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'fine'\r\n }\r\n ];\r\n }\r\n static get debugRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-new-tab',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'debug',\r\n id: 'DebugGroup'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed',\r\n icon: 'icon-new-tab',\r\n action: 'collapseChild',\r\n ctor: 'DebugButtons',\r\n group: 'debug',\r\n id: 'DebugButton2'\r\n }];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get voiceRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-Vo',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'voices',\r\n id: 'VoiceButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V1',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V1Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V2',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V2Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V3',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V3Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V4',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V4Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-Vx',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'VXButton'\r\n }\r\n ];\r\n }\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-bravura icon-accidentalFlat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get articulationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-articulation',\r\n classes: 'icon collapseParent articulation',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'articulations',\r\n id: 'articulationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'h',\r\n icon: 'icon-accent_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'accentButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'i',\r\n icon: 'icon-tenuto_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'tenutoButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'j',\r\n icon: 'icon-staccato_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'staccatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'k',\r\n icon: 'icon-marcato_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'marcatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fermata',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'fermataButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'l',\r\n icon: 'icon-pitz_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'pizzicatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-mordent-inv',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'mordentInvertedButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-mordent',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'mordentButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-trill',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'trillButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-scoop',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'scoopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-drop',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'dropButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-drop-long',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'dropLongButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-doit',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'doitButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-doit-long',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'doitLongButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-flip',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'flipButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-smear',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'smearButton'\r\n }\r\n ];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n static get chordButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: 'icon-chords',\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'chords',\r\n id: 'CreateChordButtons'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '2nd',\r\n rightText: '2',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '1',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SecondUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '2nd',\r\n rightText: 'Shift 2',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '1',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SecondDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '3rd',\r\n rightText: '3',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '2',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'ThirdUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '3rd',\r\n rightText: 'Shift 3',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '2',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'ThirdDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '4th',\r\n rightText: '4',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '3',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FourthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '4th',\r\n rightText: 'Shift 4',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '3',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FourthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '5th',\r\n rightText: '5',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '4',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FifthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '5th',\r\n rightText: 'Shift 5',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '4',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FifthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '6th',\r\n rightText: '6',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '5',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SixthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '6th',\r\n rightText: 'Shift 6',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '5',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SixthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '7th',\r\n rightText: '7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '6',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SeventhUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '7th',\r\n rightText: 'Shift 7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '6',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SeventhDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '8va',\r\n rightText: '8',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '7',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'OctaveUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '7th',\r\n rightText: 'Shift 7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '7',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'OctaveDownButton'\r\n }, {\r\n icon: '',\r\n leftText: 'Collapse',\r\n rightText: '',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'CollapseChordButton'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: '',\r\n leftText: 'Help',\r\n rightText: '?',\r\n classes: 'help-button',\r\n action: 'modal',\r\n ctor: 'helpModal',\r\n group: 'scoreEdit',\r\n id: 'helpDialog'\r\n }, {\r\n leftText: 'Language',\r\n rightText: '/n',\r\n icon: '',\r\n classes: 'language-select menu-select',\r\n action: 'menu',\r\n ctor: 'SuiLanguageMenu',\r\n group: 'scoreEdit',\r\n id: 'languageMenu'\r\n }, {\r\n leftText: 'File',\r\n rightText: '/f',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiFileMenu',\r\n group: 'scoreEdit',\r\n id: 'fileMenu'\r\n }, {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'scoreMenu'\r\n },\r\n {\r\n leftText: 'Parts',\r\n rightText: '/p',\r\n icon: '',\r\n classes: 'icon',\r\n action: 'menu',\r\n ctor: 'SuiPartMenu',\r\n group: 'scoreEdit',\r\n id: 'partMenu'\r\n }, {\r\n leftText: 'Notes',\r\n rightText: '',\r\n icon: 'icon-note',\r\n classes: 'icon',\r\n action: 'menu',\r\n ctor: 'SuiNoteMenu',\r\n group: 'scoreEdit',\r\n id: 'noteMenu'\r\n }, {\r\n leftText: 'Measure',\r\n rightText: '/a',\r\n icon: '',\r\n classes: 'icon menu-select',\r\n action: 'menu',\r\n ctor: 'SuiMeasureMenu',\r\n group: 'scoreEdit',\r\n id: 'measureModal'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n }, {\r\n leftText: 'Lines',\r\n rightText: '/l',\r\n icon: '',\r\n classes: 'icon note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiStaffModifierMenu',\r\n group: 'scoreEdit',\r\n id: 'staffModifierMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class simpleRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = simpleRibbonLayout.leftRibbonIds;\r\n var top = simpleRibbonLayout.displayIds.concat(simpleRibbonLayout.noteButtonIds).concat(simpleRibbonLayout.navigateButtonIds)\r\n .concat(simpleRibbonLayout.durationIds);\r\n \r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get simpleRibbonLayout(): ButtonDefinition[] {\r\n return simpleRibbonLayout.leftRibbonButtons.concat(\r\n simpleRibbonLayout.navigationButtons).concat(\r\n simpleRibbonLayout.noteRibbonButtons).concat(\r\n simpleRibbonLayout.durationRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return [ 'libraryMenu',\r\n 'layoutMenu', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n \r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n \r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-flat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [ {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'layoutMenu'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","import { SuiApplication } from '../src/application/application';\r\nimport { SmoToXml } from '../src/smo/mxml/smoToXml';\r\nimport { XmlToSmo } from '../src/smo/mxml/xmlToSmo';\r\nimport { SuiXhrLoader } from '../src/ui/fileio/xhrLoader';\r\nimport { MidiToSmo } from '../src/smo/midi/midiToSmo';\r\n\r\ndeclare var $: any;\r\ndeclare var parseMidi: any;\r\n\r\nexport function createLoadTests(): void {\r\n const jsonPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json';\r\n const midiTiesPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/ties.mid';\r\n const midiTripletPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/triplet.mid';\r\n const midiKeyPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/keytime.mid';\r\n var app = async (application: SuiApplication) => {\r\n const view = application.view!;\r\n await view.loadRemoteScore(jsonPath);\r\n await view.renderPromise();\r\n QUnit.test('loaded', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-lyric').length, 82);\r\n });\r\n const xml = SmoToXml.convert(view.score);\r\n const newScore = XmlToSmo.convert(xml);\r\n await view.changeScore(newScore);\r\n QUnit.test('loadXml', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-lyric').length, 82);\r\n });\r\n let midiData = new SuiXhrLoader(midiTiesPath);\r\n await midiData.loadAsync();\r\n let midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi1', assert => {\r\n assert.equal(midiScore.staves[0].getTiesEndingAt({ staff: 0, measure: 1, voice: 0, tick: 0, pitches: [] }).length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiTripletPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves[0].measures[0].tuplets.length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiKeyPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves.length, 2);\r\n assert.equal(midiScore.staves[0].measures[0].keySignature, 'eb');\r\n });\r\n // console.log('measures ' + view.score.staves[0].measures.length);\r\n };\r\n\r\n SuiApplication.configure({\r\n mode: 'library',\r\n idleRedrawTime: 5,\r\n scoreDomContainer: 'outer-container'\r\n }).then((application) => {\r\n app(application)\r\n });\r\n}","/*!\n * VexFlow 4.2.6 2023-12-13T04:36:51.063Z 31dca682bd9c2905c6d93075dcf115a5519cc175\n * Vexflow_smoosic, forked from :\n * Copyright (c) 2010 Mohit Muthanna Cheppudira \n * https://www.vexflow.com https://github.com/0xfe/vexflow\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/version.ts\":\n/*!************************!*\\\n !*** ./src/version.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DATE: () => (/* binding */ DATE),\n/* harmony export */ ID: () => (/* binding */ ID),\n/* harmony export */ VERSION: () => (/* binding */ VERSION)\n/* harmony export */ });\nconst VERSION = '4.2.6';\nconst ID = '31dca682bd9c2905c6d93075dcf115a5519cc175';\nconst DATE = '2023-12-13T04:36:51.063Z';\n\n\n/***/ }),\n\n/***/ \"./src/accidental.ts\":\n/*!***************************!*\\\n !*** ./src/accidental.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* binding */ Accidental)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/annotation.ts\":\n/*!***************************!*\\\n !*** ./src/annotation.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Annotation: () => (/* binding */ Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* binding */ AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* binding */ AnnotationVerticalJustify)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args);\n}\nvar AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nvar AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/articulation.ts\":\n/*!*****************************!*\\\n !*** ./src/articulation.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Articulation: () => (/* binding */ Articulation)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) ||\n (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n\n\n\n/***/ }),\n\n/***/ \"./src/barnote.ts\":\n/*!************************!*\\\n !*** ./src/barnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BarNote: () => (/* binding */ BarNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote;\n }\n constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/beam.ts\":\n/*!*********************!*\\\n !*** ./src/beam.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BEAM_BOTH: () => (/* binding */ BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* binding */ BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* binding */ BEAM_RIGHT),\n/* harmony export */ Beam: () => (/* binding */ Beam)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nconst BEAM_LEFT = 'L';\nconst BEAM_RIGHT = 'R';\nconst BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nclass Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group));\n }\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/bend.ts\":\n/*!*********************!*\\\n !*** ./src/bend.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Bend: () => (/* binding */ Bend)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/** Bend implements tablature bends. */\nclass Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/boundingbox.ts\":\n/*!****************************!*\\\n !*** ./src/boundingbox.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBox: () => (/* binding */ BoundingBox)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nclass BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/boundingboxcomputation.ts\":\n/*!***************************************!*\\\n !*** ./src/boundingboxcomputation.ts ***!\n \\***************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBoxComputation: () => (/* binding */ BoundingBoxComputation)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nclass BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/canvascontext.ts\":\n/*!******************************!*\\\n !*** ./src/canvascontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasContext: () => (/* binding */ CanvasContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nclass CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/chordsymbol.ts\":\n/*!****************************!*\\\n !*** ./src/chordsymbol.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChordSymbol: () => (/* binding */ ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* binding */ ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* binding */ ChordSymbolVerticalJustify),\n/* harmony export */ SymbolModifiers: () => (/* binding */ SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* binding */ SymbolTypes)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args);\n}\nvar ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nvar ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nvar SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nvar SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/clef.ts\":\n/*!*********************!*\\\n !*** ./src/clef.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Clef: () => (/* binding */ Clef)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/clefnote.ts\":\n/*!*************************!*\\\n !*** ./src/clefnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClefNote: () => (/* binding */ ClefNote)\n/* harmony export */ });\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\n\n\n\n\n/** ClefNote implements clef annotations in measures. */\nclass ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/crescendo.ts\":\n/*!**************************!*\\\n !*** ./src/crescendo.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Crescendo: () => (/* binding */ Crescendo)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/curve.ts\":\n/*!**********************!*\\\n !*** ./src/curve.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Curve: () => (/* binding */ Curve),\n/* harmony export */ CurvePosition: () => (/* binding */ CurvePosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\n\n\n\nvar CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nclass Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/dot.ts\":\n/*!********************!*\\\n !*** ./src/dot.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Dot: () => (/* binding */ Dot)\n/* harmony export */ });\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\n\n\n\nclass Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/easyscore.ts\":\n/*!**************************!*\\\n !*** ./src/easyscore.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Builder: () => (/* binding */ Builder),\n/* harmony export */ EasyScore: () => (/* binding */ EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* binding */ EasyScoreGrammar),\n/* harmony export */ Piece: () => (/* binding */ Piece)\n/* harmony export */ });\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args);\n}\nclass EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nclass Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nclass Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/element.ts\":\n/*!************************!*\\\n !*** ./src/element.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Element: () => (/* binding */ Element)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/factory.ts\":\n/*!************************!*\\\n !*** ./src/factory.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Factory: () => (/* binding */ Factory)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS;\n }\n else {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG;\n }\n }\n this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext();\n }\n ModifierContext() {\n return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes);\n pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/flow.ts\":\n/*!*********************!*\\\n !*** ./src/flow.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Flow: () => (/* binding */ Flow)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ \"./src/version.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION,\n /** git commit ID that this library was built from. */\n ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID,\n /** The date when this library was compiled. */\n DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName));\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts;\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice();\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4;\n }\n static get accidentalMap() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap;\n }\n static get unicode() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode;\n }\n static keySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental;\nFlow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation;\nFlow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation;\nFlow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline;\nFlow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote;\nFlow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam;\nFlow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend;\nFlow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox;\nFlow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation;\nFlow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext;\nFlow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol;\nFlow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef;\nFlow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote;\nFlow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo;\nFlow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve;\nFlow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot;\nFlow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore;\nFlow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element;\nFlow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory;\nFlow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font;\nFlow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter;\nFlow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction;\nFlow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger;\nFlow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote;\nFlow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph;\nFlow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote;\nFlow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote;\nFlow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup;\nFlow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote;\nFlow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager;\nFlow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature;\nFlow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote;\nFlow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier;\nFlow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext;\nFlow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest;\nFlow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music;\nFlow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note;\nFlow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead;\nFlow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup;\nFlow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament;\nFlow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis;\nFlow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser;\nFlow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking;\nFlow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry;\nFlow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext;\nFlow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer;\nFlow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote;\nFlow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition;\nFlow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave;\nFlow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector;\nFlow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin;\nFlow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine;\nFlow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier;\nFlow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote;\nFlow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo;\nFlow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText;\nFlow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie;\nFlow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem;\nFlow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber;\nFlow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke;\nFlow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext;\nFlow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System;\nFlow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote;\nFlow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide;\nFlow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave;\nFlow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie;\nFlow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket;\nFlow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics;\nFlow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter;\nFlow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote;\nFlow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext;\nFlow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature;\nFlow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote;\nFlow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo;\nFlow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning;\nFlow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet;\nFlow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato;\nFlow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket;\nFlow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice;\nFlow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify;\nFlow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes;\nFlow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers;\nFlow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition;\nFlow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight;\nFlow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle;\nFlow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition;\nFlow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends;\nFlow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType;\nFlow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType;\nFlow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition;\nFlow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType;\nFlow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition;\nFlow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification;\nFlow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode;\n\n\n\n/***/ }),\n\n/***/ \"./src/font.ts\":\n/*!*********************!*\\\n !*** ./src/font.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Font: () => (/* binding */ Font),\n/* harmony export */ FontStyle: () => (/* binding */ FontStyle),\n/* harmony export */ FontWeight: () => (/* binding */ FontWeight)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nvar FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/fonts/bravura_glyphs.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/bravura_glyphs.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BravuraFont: () => (/* binding */ BravuraFont)\n/* harmony export */ });\nconst BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/common_metrics.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/common_metrics.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CommonMetrics: () => (/* binding */ CommonMetrics)\n/* harmony export */ });\nconst CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.8,\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.8,\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.8,\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/custom_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/custom_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CustomFont: () => (/* binding */ CustomFont)\n/* harmony export */ });\nconst CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/gonville_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/gonville_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GonvilleSmuflFont: () => (/* binding */ GonvilleSmuflFont)\n/* harmony export */ });\nconst GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/leland_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/leland_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LelandFont: () => (/* binding */ LelandFont)\n/* harmony export */ });\nconst LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_all.ts\":\n/*!*******************************!*\\\n !*** ./src/fonts/load_all.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadAllMusicFonts: () => (/* binding */ loadAllMusicFonts)\n/* harmony export */ });\n/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ \"./src/fonts/load_bravura.ts\");\n/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ \"./src/fonts/load_custom.ts\");\n/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ \"./src/fonts/load_gonville.ts\");\n/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ \"./src/fonts/load_leland.ts\");\n/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ \"./src/fonts/load_petaluma.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\n\n\n\n\n\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nfunction loadAllMusicFonts() {\n (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)();\n (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)();\n (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)();\n (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)();\n (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_bravura.ts\":\n/*!***********************************!*\\\n !*** ./src/fonts/load_bravura.ts ***!\n \\***********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadBravura: () => (/* binding */ loadBravura)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ \"./src/fonts/bravura_glyphs.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\n\n\n\nfunction loadBravura() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_custom.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_custom.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadCustom: () => (/* binding */ loadCustom)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ \"./src/fonts/custom_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadCustom() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_gonville.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_gonville.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadGonville: () => (/* binding */ loadGonville)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ \"./src/fonts/gonville_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadGonville() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_leland.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_leland.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadLeland: () => (/* binding */ loadLeland)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ \"./src/fonts/leland_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadLeland() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_petaluma.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_petaluma.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadPetaluma: () => (/* binding */ loadPetaluma)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ \"./src/fonts/petaluma_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nconst petalumaChordMetrics = {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 1,\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n }\n};\nfunction loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petaluma_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/petaluma_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaFont: () => (/* binding */ PetalumaFont)\n/* harmony export */ });\nconst PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petalumascript_glyphs.ts\":\n/*!********************************************!*\\\n !*** ./src/fonts/petalumascript_glyphs.ts ***!\n \\********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaScriptFont: () => (/* binding */ PetalumaScriptFont)\n/* harmony export */ });\nconst PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/robotoslab_glyphs.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/robotoslab_glyphs.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RobotoSlabFont: () => (/* binding */ RobotoSlabFont)\n/* harmony export */ });\nconst RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_bold_text_metrics.ts\":\n/*!*********************************************!*\\\n !*** ./src/fonts/sans_bold_text_metrics.ts ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFontBold: () => (/* binding */ SansFontBold)\n/* harmony export */ });\nconst SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_text_metrics.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/sans_text_metrics.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFont: () => (/* binding */ SansFont)\n/* harmony export */ });\nconst SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/serif_text_metrics.ts\":\n/*!*****************************************!*\\\n !*** ./src/fonts/serif_text_metrics.ts ***!\n \\*****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SerifFont: () => (/* binding */ SerifFont)\n/* harmony export */ });\nconst SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/textfonts.ts\":\n/*!********************************!*\\\n !*** ./src/fonts/textfonts.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadTextFonts: () => (/* binding */ loadTextFonts)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ \"./src/fonts/petalumascript_glyphs.ts\");\n/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ \"./src/fonts/robotoslab_glyphs.ts\");\n/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ \"./src/fonts/sans_bold_text_metrics.ts\");\n/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ \"./src/fonts/sans_text_metrics.ts\");\n/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ \"./src/fonts/serif_text_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/formatter.ts\":\n/*!**************************!*\\\n !*** ./src/formatter.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Formatter: () => (/* binding */ Formatter)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext());\n const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/fraction.ts\":\n/*!*************************!*\\\n !*** ./src/fraction.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Fraction: () => (/* binding */ Fraction)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\n\n\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/frethandfinger.ts\":\n/*!*******************************!*\\\n !*** ./src/frethandfinger.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FretHandFinger: () => (/* binding */ FretHandFinger)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\n\n\n\n\n\n\nclass FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/ghostnote.ts\":\n/*!**************************!*\\\n !*** ./src/ghostnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GhostNote: () => (/* binding */ GhostNote)\n/* harmony export */ });\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n\n\n\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nclass GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/glyph.ts\":\n/*!**********************!*\\\n !*** ./src/glyph.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Glyph: () => (/* binding */ Glyph),\n/* harmony export */ OutlineCode: () => (/* binding */ OutlineCode)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n\n\n\n/***/ }),\n\n/***/ \"./src/glyphnote.ts\":\n/*!**************************!*\\\n !*** ./src/glyphnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlyphNote: () => (/* binding */ GlyphNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\n\n\nclass GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenote.ts\":\n/*!**************************!*\\\n !*** ./src/gracenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNote: () => (/* binding */ GraceNote)\n/* harmony export */ });\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n\nclass GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenotegroup.ts\":\n/*!*******************************!*\\\n !*** ./src/gracenotegroup.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNoteGroup: () => (/* binding */ GraceNoteGroup)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/gracetabnote.ts\":\n/*!*****************************!*\\\n !*** ./src/gracetabnote.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceTabNote: () => (/* binding */ GraceTabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\n\n\n\nclass GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/index.ts\":\n/*!**********************!*\\\n !*** ./src/index.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType),\n/* harmony export */ defined: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ \"./src/vex.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './fonts/*' because they are used by the entry/* files.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/keymanager.ts\":\n/*!***************************!*\\\n !*** ./src/keymanager.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeyManager: () => (/* binding */ KeyManager)\n/* harmony export */ });\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\n\n\nclass KeyManager {\n constructor(key) {\n this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root];\n for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) {\n const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length;\n const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/keysignature.ts\":\n/*!*****************************!*\\\n !*** ./src/keysignature.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySignature: () => (/* binding */ KeySignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\n\n\n\n\n\nclass KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/keysignote.ts\":\n/*!***************************!*\\\n !*** ./src/keysignote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySigNote: () => (/* binding */ KeySigNote)\n/* harmony export */ });\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\n\n\n\nclass KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifier.ts\":\n/*!*************************!*\\\n !*** ./src/modifier.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Modifier: () => (/* binding */ Modifier),\n/* harmony export */ ModifierPosition: () => (/* binding */ ModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nvar ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nclass Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifiercontext.ts\":\n/*!********************************!*\\\n !*** ./src/modifiercontext.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModifierContext: () => (/* binding */ ModifierContext)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state);\n _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state);\n _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state);\n _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state);\n _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state);\n _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state);\n _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state);\n _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state);\n _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state);\n _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state);\n _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state);\n _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state);\n _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state);\n _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state);\n _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/multimeasurerest.ts\":\n/*!*********************************!*\\\n !*** ./src/multimeasurerest.ts ***!\n \\*********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MultiMeasureRest: () => (/* binding */ MultiMeasureRest)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\n\n\n\n\n\n\n\n\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nclass MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/music.ts\":\n/*!**********************!*\\\n !*** ./src/music.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Music: () => (/* binding */ Music)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n/** Music implements some standard music theory routines. */\nclass Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/note.ts\":\n/*!*********************!*\\\n !*** ./src/note.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Note: () => (/* binding */ Note)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nclass Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/notehead.ts\":\n/*!*************************!*\\\n !*** ./src/notehead.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteHead: () => (/* binding */ NoteHead)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH);\n let fill = false;\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/notesubgroup.ts\":\n/*!*****************************!*\\\n !*** ./src/notesubgroup.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteSubGroup: () => (/* binding */ NoteSubGroup)\n/* harmony export */ });\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\n\n\n\n\n\nclass NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter();\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/ornament.ts\":\n/*!*************************!*\\\n !*** ./src/ornament.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Ornament: () => (/* binding */ Ornament)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/parenthesis.ts\":\n/*!****************************!*\\\n !*** ./src/parenthesis.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parenthesis: () => (/* binding */ Parenthesis)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\n\n\n\n\n\n/** Parenthesis implements parenthesis modifiers for notes. */\nclass Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) {\n this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/parser.ts\":\n/*!***********************!*\\\n !*** ./src/parser.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parser: () => (/* binding */ Parser)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\n\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/pedalmarking.ts\":\n/*!*****************************!*\\\n !*** ./src/pedalmarking.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PedalMarking: () => (/* binding */ PedalMarking)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/registry.ts\":\n/*!*************************!*\\\n !*** ./src/registry.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Registry: () => (/* binding */ Registry)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\n\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nclass Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/rendercontext.ts\":\n/*!******************************!*\\\n !*** ./src/rendercontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RenderContext: () => (/* binding */ RenderContext),\n/* harmony export */ drawDot: () => (/* binding */ drawDot)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n\nclass RenderContext {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nfunction drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n\n\n/***/ }),\n\n/***/ \"./src/renderer.ts\":\n/*!*************************!*\\\n !*** ./src/renderer.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Renderer: () => (/* binding */ Renderer),\n/* harmony export */ RendererBackends: () => (/* binding */ RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* binding */ RendererLineEndType)\n/* harmony export */ });\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nvar RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element);\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n\n\n\n/***/ }),\n\n/***/ \"./src/repeatnote.ts\":\n/*!***************************!*\\\n !*** ./src/repeatnote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RepeatNote: () => (/* binding */ RepeatNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nclass RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stave.ts\":\n/*!**********************!*\\\n !*** ./src/stave.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stave: () => (/* binding */ Stave)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2,\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1,\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3,\n};\nclass Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n // end bar\n this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n * @param clefSpec\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef);\n // Align key signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF,\n size: 8,\n weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavebarline.ts\":\n/*!*****************************!*\\\n !*** ./src/stavebarline.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Barline: () => (/* binding */ Barline),\n/* harmony export */ BarlineType: () => (/* binding */ BarlineType)\n/* harmony export */ });\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\n\n\n\nvar BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nclass Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/staveconnector.ts\":\n/*!*******************************!*\\\n !*** ./src/staveconnector.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveConnector: () => (/* binding */ StaveConnector)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavehairpin.ts\":\n/*!*****************************!*\\\n !*** ./src/stavehairpin.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveHairpin: () => (/* binding */ StaveHairpin)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\n\n\n\n\nclass StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/staveline.ts\":\n/*!**************************!*\\\n !*** ./src/staveline.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveLine: () => (/* binding */ StaveLine)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\n\n\n\n\n\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification;\n\n\n\n/***/ }),\n\n/***/ \"./src/stavemodifier.ts\":\n/*!******************************!*\\\n !*** ./src/stavemodifier.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveModifier: () => (/* binding */ StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* binding */ StaveModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\n\n\n\nvar StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nclass StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stavenote.ts\":\n/*!**************************!*\\\n !*** ./src/stavenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveNote: () => (/* binding */ StaveNote)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/staverepetition.ts\":\n/*!********************************!*\\\n !*** ./src/staverepetition.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Repetition: () => (/* binding */ Repetition)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\n\nclass Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavesection.ts\":\n/*!*****************************!*\\\n !*** ./src/stavesection.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveSection: () => (/* binding */ StaveSection)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\nclass StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetempo.ts\":\n/*!***************************!*\\\n !*** ./src/stavetempo.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTempo: () => (/* binding */ StaveTempo)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\n\n\n\n\n\n\nclass StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration);\n x += 3 * scale;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 14,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetext.ts\":\n/*!**************************!*\\\n !*** ./src/stavetext.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveText: () => (/* binding */ StaveText)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\n\n\nclass StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetie.ts\":\n/*!*************************!*\\\n !*** ./src/stavetie.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTie: () => (/* binding */ StaveTie)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\nclass StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/stavevolta.ts\":\n/*!***************************!*\\\n !*** ./src/stavevolta.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Volta: () => (/* binding */ Volta),\n/* harmony export */ VoltaType: () => (/* binding */ VoltaType)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\nvar VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stem.ts\":\n/*!*********************!*\\\n !*** ./src/stem.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stem: () => (/* binding */ Stem)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args);\n}\nclass Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/stemmablenote.ts\":\n/*!******************************!*\\\n !*** ./src/stemmablenote.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StemmableNote: () => (/* binding */ StemmableNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\n\n\n\n\n\n\nclass StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stringnumber.ts\":\n/*!*****************************!*\\\n !*** ./src/stringnumber.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StringNumber: () => (/* binding */ StringNumber)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\n\n\n\n\n\n\n\nclass StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/strokes.ts\":\n/*!************************!*\\\n !*** ./src/strokes.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stroke: () => (/* binding */ Stroke)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\n\n\n\n\n\n\nclass Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/svgcontext.ts\":\n/*!***************************!*\\\n !*** ./src/svgcontext.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SVGContext: () => (/* binding */ SVGContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\n\n\n\n\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt',\n 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls));\n if (id)\n group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle);\n const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n\n\n\n/***/ }),\n\n/***/ \"./src/system.ts\":\n/*!***********************!*\\\n !*** ./src/system.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ System: () => (/* binding */ System)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nclass System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tables.ts\":\n/*!***********************!*\\\n !*** ./src/tables.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tables: () => (/* binding */ Tables)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/tabnote.ts\":\n/*!************************!*\\\n !*** ./src/tabnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabNote: () => (/* binding */ TabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nclass TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabslide.ts\":\n/*!*************************!*\\\n !*** ./src/tabslide.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabSlide: () => (/* binding */ TabSlide)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\n\nclass TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/tabstave.ts\":\n/*!*************************!*\\\n !*** ./src/tabstave.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabStave: () => (/* binding */ TabStave)\n/* harmony export */ });\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\nclass TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabtie.ts\":\n/*!***********************!*\\\n !*** ./src/tabtie.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabTie: () => (/* binding */ TabTie)\n/* harmony export */ });\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\nclass TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/textbracket.ts\":\n/*!****************************!*\\\n !*** ./src/textbracket.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextBracket: () => (/* binding */ TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* binding */ TextBracketPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args);\n}\nvar TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 15,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/textdynamics.ts\":\n/*!*****************************!*\\\n !*** ./src/textdynamics.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextDynamics: () => (/* binding */ TextDynamics)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter);\n const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/textformatter.ts\":\n/*!******************************!*\\\n !*** ./src/textformatter.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextFormatter: () => (/* binding */ TextFormatter)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight);\n const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL;\n const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/textnote.ts\":\n/*!*************************!*\\\n !*** ./src/textnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextJustification: () => (/* binding */ TextJustification),\n/* harmony export */ TextNote: () => (/* binding */ TextNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n\n\n\n/***/ }),\n\n/***/ \"./src/tickable.ts\":\n/*!*************************!*\\\n !*** ./src/tickable.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tickable: () => (/* binding */ Tickable)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nclass Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tickcontext.ts\":\n/*!****************************!*\\\n !*** ./src/tickcontext.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TickContext: () => (/* binding */ TickContext)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\n\n\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nclass TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesigglyph.ts\":\n/*!*****************************!*\\\n !*** ./src/timesigglyph.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignatureGlyph: () => (/* binding */ TimeSignatureGlyph)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\n\n\nclass TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignature.ts\":\n/*!******************************!*\\\n !*** ./src/timesignature.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignature: () => (/* binding */ TimeSignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\n\n\n\n\n\n\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nclass TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignote.ts\":\n/*!****************************!*\\\n !*** ./src/timesignote.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSigNote: () => (/* binding */ TimeSigNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\nclass TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tremolo.ts\":\n/*!************************!*\\\n !*** ./src/tremolo.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tremolo: () => (/* binding */ Tremolo)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\n\n\n\n\n\n\n\n/** Tremolo implements tremolo notation. */\nclass Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note);\n const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuning.ts\":\n/*!***********************!*\\\n !*** ./src/tuning.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuning: () => (/* binding */ Tuning)\n/* harmony export */ });\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n/** `Tuning` implements varies types of tunings for tablature. */\nclass Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuplet.ts\":\n/*!***********************!*\\\n !*** ./src/tuplet.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuplet: () => (/* binding */ Tuplet),\n/* harmony export */ TupletLocation: () => (/* binding */ TupletLocation)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\n\n\n\n\n\n\n\nvar TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nclass Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/typeguard.ts\":\n/*!**************************!*\\\n !*** ./src/typeguard.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Category: () => (/* binding */ Category),\n/* harmony export */ isAccidental: () => (/* binding */ isAccidental),\n/* harmony export */ isAnnotation: () => (/* binding */ isAnnotation),\n/* harmony export */ isBarline: () => (/* binding */ isBarline),\n/* harmony export */ isCategory: () => (/* binding */ isCategory),\n/* harmony export */ isDot: () => (/* binding */ isDot),\n/* harmony export */ isGraceNote: () => (/* binding */ isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* binding */ isGraceNoteGroup),\n/* harmony export */ isNote: () => (/* binding */ isNote),\n/* harmony export */ isRenderContext: () => (/* binding */ isRenderContext),\n/* harmony export */ isStaveNote: () => (/* binding */ isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* binding */ isStemmableNote),\n/* harmony export */ isTabNote: () => (/* binding */ isTabNote)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nfunction isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nconst isAccidental = (obj) => isCategory(obj, Category.Accidental);\nconst isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nconst isBarline = (obj) => isCategory(obj, Category.Barline);\nconst isDot = (obj) => isCategory(obj, Category.Dot);\nconst isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nconst isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nconst isNote = (obj) => isCategory(obj, Category.Note);\nconst isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nconst isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nconst isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nconst isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nvar Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n\n\n/***/ }),\n\n/***/ \"./src/util.ts\":\n/*!*********************!*\\\n !*** ./src/util.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RuntimeError: () => (/* binding */ RuntimeError),\n/* harmony export */ defined: () => (/* binding */ defined),\n/* harmony export */ globalObject: () => (/* binding */ globalObject),\n/* harmony export */ log: () => (/* binding */ log),\n/* harmony export */ midLine: () => (/* binding */ midLine),\n/* harmony export */ normalizeAngle: () => (/* binding */ normalizeAngle),\n/* harmony export */ prefix: () => (/* binding */ prefix),\n/* harmony export */ sumArray: () => (/* binding */ sumArray),\n/* harmony export */ warn: () => (/* binding */ warn)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nclass RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nfunction globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof __webpack_require__.g !== 'undefined') {\n return __webpack_require__.g;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nfunction defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nfunction log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nfunction warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nfunction midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nfunction prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nfunction normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nfunction sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n\n\n/***/ }),\n\n/***/ \"./src/vex.ts\":\n/*!********************!*\\\n !*** ./src/vex.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vex: () => (/* binding */ Vex)\n/* harmony export */ });\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\n\n\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow;\n\n\n\n/***/ }),\n\n/***/ \"./src/vibrato.ts\":\n/*!************************!*\\\n !*** ./src/vibrato.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vibrato: () => (/* binding */ Vibrato)\n/* harmony export */ });\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/** `Vibrato` implements diverse vibratos. */\nclass Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/vibratobracket.ts\":\n/*!*******************************!*\\\n !*** ./src/vibratobracket.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VibratoBracket: () => (/* binding */ VibratoBracket)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/voice.ts\":\n/*!**********************!*\\\n !*** ./src/voice.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Voice: () => (/* binding */ Voice),\n/* harmony export */ VoiceMode: () => (/* binding */ VoiceMode)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nclass Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/web.ts\":\n/*!********************!*\\\n !*** ./src/web.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isHTMLCanvas: () => (/* binding */ isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* binding */ isHTMLDiv)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\n\n// eslint-disable-next-line\nfunction isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nfunction isHTMLDiv(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!********************************!*\\\n !*** ./entry/vexflow-debug.ts ***!\n \\********************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType),\n/* harmony export */ \"default\": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__),\n/* harmony export */ defined: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn)\n/* harmony export */ });\n/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ \"./src/flow.ts\");\n/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ \"./src/fonts/load_all.ts\");\n/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ \"./src/fonts/textfonts.ts\");\n/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ \"./src/index.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\n\n\n\n(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)();\n_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)();\n// Re-export all exports from index.ts.\n\n// Also collect all exports into a default export for CJS projects.\n\n\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=vexflow-debug.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Smoosic relies on dynamic creation of almost everything. This class exports all the symbols\r\n// that need to be created via reflection.\r\n// ui application components\r\n// vexflow interface\r\nimport { TextFormatter } from '../common/textformatter';\r\nimport { VexFlow } from '../common/vex';\r\nimport { SuiApplication } from './application';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiPiano } from '../render/sui/piano';\r\nimport { SuiDom } from './dom';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { ArticulationButtons } from '../ui/buttons/articulation';\r\nimport { BeamButtons } from '../ui/buttons/beam';\r\nimport { ChordButtons } from '../ui/buttons/chord';\r\nimport { CollapseRibbonControl, ExtendedCollapseParent } from '../ui/buttons/collapsable';\r\nimport { DisplaySettings } from '../ui/buttons/display';\r\nimport { DurationButtons } from '../ui/buttons/duration';\r\nimport { MeasureButtons } from '../ui/buttons/measure';\r\nimport { MicrotoneButtons } from '../ui/buttons/microtone';\r\nimport { NavigationButtons } from '../ui/buttons/navigation';\r\nimport { NoteButtons } from '../ui/buttons/note';\r\nimport { PlayerButtons } from '../ui/buttons/player';\r\nimport { StaveButtons } from '../ui/buttons/stave';\r\nimport { TextButtons } from '../ui/buttons/text';\r\nimport { VoiceButtons } from '../ui/buttons/voice';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { simpleRibbonLayout } from '../ui/ribbonLayout/default/tabletRibbon';\r\nimport { SimpleEventHandler, ModalEventHandler } from './common';\r\n// Language strings\r\nimport { cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n} from '../ui/i18n/language_en';\r\n\r\n// ui dialogs and menus\r\n// Dialogs\r\nimport { SuiDialogBase } from '../ui/dialogs/dialog';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiTransposeScoreDialog, SuiTransposeScoreAdapter } from '../ui/dialogs/transposeScore';\r\nimport { SuiMeasureDialog } from '../ui/dialogs/measureFormat';\r\nimport { SuiInsertMeasures } from '../ui/dialogs/addMeasure';\r\nimport { SuiInstrumentDialog } from '../ui/dialogs/instrument';\r\nimport { SuiTimeSignatureDialog } from '../ui/dialogs/timeSignature';\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { SuiScoreIdentificationDialog } from '../ui/dialogs/scoreId';\r\nimport { SuiScorePreferencesDialog } from '../ui/dialogs/preferences';\r\nimport { SuiPageLayoutDialog } from '../ui/dialogs/pageLayout';\r\nimport { SuiTextBracketDialog } from '../ui/dialogs/textBracket';\r\nimport { SuiScoreFontDialog } from '../ui/dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../ui/dialogs/globalLayout';\r\nimport { SuiScoreViewDialog } from '../ui/dialogs/scoreView';import { SuiLibraryDialog } from '../ui/dialogs/library';\r\nimport { SuiChordChangeDialog } from '../ui/dialogs/chordChange';\r\nimport { SuiLyricDialog } from '../ui/dialogs/lyric';\r\nimport { SuiTextBlockDialog, helpModal } from '../ui/dialogs/textBlock';\r\nimport { SuiDynamicModifierDialog } from '../ui/dialogs/dynamics';\r\nimport { SuiSlurAttributesDialog } from '../ui/dialogs/slur';\r\nimport { SuiTieAttributesDialog } from '../ui/dialogs/tie';\r\nimport { SuiVoltaAttributeDialog } from '../ui/dialogs/volta';\r\nimport { SuiHairpinAttributesDialog } from '../ui/dialogs/hairpin';\r\nimport { SuiStaffGroupDialog } from '../ui/dialogs/staffGroup';\r\nimport { SuiScoreArpeggioDialog } from '../ui/dialogs/arpeggio'\r\nimport { SuiPartInfoDialog } from '../ui/dialogs/partInfo';\r\nimport { SuiLoadMxmlDialog, SuiLoadFileDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog,\r\n SuiSaveMidiDialog, SuiSaveVexDialog } from '../ui/dialogs/fileDialogs';\r\n // Dialog components\r\nimport { SuiTextInputComponent, SuiTextInputComposite } from '../ui/dialogs/components/textInput';\r\nimport { SuiDropdownComponent, SuiDropdownComposite } from '../ui/dialogs/components/dropdown';\r\nimport { SuiButtonComposite, SuiButtonComponent } from '../ui/dialogs/components/button';\r\nimport { SuiToggleComponent, SuiToggleComposite } from '../ui/dialogs/components/toggle';\r\nimport { SuiFileDownloadComponent } from '../ui/dialogs/components/fileDownload';\r\nimport { SuiRockerComponent, SuiRockerComposite } from '../ui/dialogs/components/rocker';\r\nimport { SuiFontComponent } from '../ui/dialogs/components/fontComponent';\r\nimport { SuiTextBlockComponent } from '../ui/dialogs/components/textInPlace';\r\nimport { SuiTreeComponent } from '../ui/dialogs/components/tree';\r\nimport {\r\n SuiLyricComponent, SuiChordComponent,\r\n SuiNoteTextComponent\r\n} from '../ui/dialogs/components/noteText';\r\nimport { SuiDragText } from '../ui/dialogs/components/dragText';\r\nimport { SuiTextInPlace } from '../ui/dialogs/components/textInPlace';\r\nimport { CheckboxDropdownComponent } from '../ui/dialogs/components/checkdrop';\r\nimport { TieMappingComponent } from '../ui/dialogs/components/tie';\r\nimport { StaffAddRemoveComponent,\r\n StaffCheckComponent} from '../ui/dialogs/components/staffComponents';\r\nimport { TextCheckComponent } from '../ui/dialogs/components/textCheck';\r\n// menus\r\nimport { SuiMenuManager} from '../ui/menus/manager';\r\nimport { SuiMenuBase } from '../ui/menus/menu';\r\nimport { SuiScoreMenu } from '../ui/menus/score';\r\nimport { SuiPartMenu } from '../ui/menus/parts';\r\nimport { SuiPartSelectionMenu } from '../ui/menus/partSelection';\r\nimport { SuiDynamicsMenu } from '../ui/menus/dynamics';\r\nimport { SuiTimeSignatureMenu } from '../ui/menus/timeSignature';\r\nimport { SuiKeySignatureMenu } from '../ui/menus/keySignature';\r\nimport { SuiStaffModifierMenu } from '../ui/menus/staffModifier';\r\nimport { SuiFileMenu } from '../ui/menus/file';\r\nimport { SuiLanguageMenu } from '../ui/menus/language';\r\nimport { SmoLanguage, SmoTranslator } from '../ui/i18n/language';\r\nimport { SuiMeasureMenu } from '../ui/menus/measure';\r\nimport { SuiNoteMenu } from '../ui/menus/note';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\n// render library\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiScoreRender } from '../render/sui/scoreRender';\r\nimport { layoutDebug } from '../render/sui/layoutDebug';\r\nimport { SuiMapper } from '../render/sui/mapper';\r\nimport { SuiScroller } from '../render/sui/scroller';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\n\r\n// audio library\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SuiOscillator, SuiSampler, SuiReverb } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\n\r\n\r\n// SMO object model\r\nimport { SmoScore, engravingFontTypes, isEngravingFont } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { SmoNote } from '../smo/data/note';\r\nimport { SmoDuration } from '../smo/xform/tickDuration';\r\nimport { createLoadTests } from '../../tests/file-load';\r\nimport { SmoStaffHairpin, StaffModifierBase, SmoInstrument, SmoSlur, SmoTie, SmoStaffTextBracket } from '../smo/data/staffModifiers';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { SmoMusic } from '../smo/data/music';\r\nimport { SmoAudioPitch } from '../smo/data/music';\r\nimport { SmoSelection, SmoSelector } from '../smo/xform/selections';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric,\r\n SmoArpeggio } from '../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../smo/data/systemStaff';\r\nimport { SmoSystemGroup, SmoAudioPlayerSettings, SmoScorePreferences } from '../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParams } from '../smo/data/scoreText';\r\nimport { SmoOperation } from '../smo/xform/operations';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature\r\n} from '../smo/data/measureModifiers';\r\nimport { SmoToXml } from '../smo/mxml/smoToXml';\r\nimport { MidiToSmo } from '../smo/midi/midiToSmo';\r\nimport { SmoToMidi } from '../smo/midi/smoToMidi';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SmoToVex } from '../render/vex/toVex';\r\n// utilities\r\nimport { buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer } from '../common/htmlHelpers';\r\n\r\nimport { renderVexTests } from './generateVexTests';\r\nconst getClass = (jsonString: string) => {\r\n return eval('Smo.' + jsonString);\r\n};\r\nexport const Smo = {\r\n // Application-level classes\r\n SmoConfiguration,\r\n SuiApplication,\r\n SuiDom, SuiEventHandler, SuiExceptionHandler,\r\n Qwerty, SuiHelp, SmoTranslationEditor, SimpleEventHandler, ModalEventHandler,\r\n // Ribbon buttons\r\n simpleRibbonLayout,\r\n RibbonButtons, NoteButtons, TextButtons, ChordButtons, MicrotoneButtons,\r\n StaveButtons, BeamButtons, MeasureButtons, DurationButtons,\r\n VoiceButtons, PlayerButtons, ArticulationButtons, NavigationButtons,\r\n DisplaySettings, ExtendedCollapseParent, CollapseRibbonControl,\r\n // Menus\r\n SuiMenuManager, SuiMenuBase, SuiScoreMenu, SuiFileMenu,\r\n SuiDynamicsMenu, SuiTimeSignatureMenu, SuiKeySignatureMenu, SuiStaffModifierMenu,\r\n SuiLanguageMenu, SuiMeasureMenu, SuiNoteMenu, SmoLanguage, SmoTranslator, SuiPartMenu,\r\n SuiPartSelectionMenu,\r\n // Dialogs\r\n SuiTempoDialog, SuiInstrumentDialog, SuiModifierDialogFactory, SuiLibraryDialog,\r\n SuiTextBracketDialog,\r\n SuiScoreViewDialog, SuiGlobalLayoutDialog, SuiScoreIdentificationDialog, SuiTransposeScoreAdapter,\r\n SuiTransposeScoreDialog,\r\n SuiScoreFontDialog, SuiPageLayoutDialog, SuiMeasureDialog, SuiInsertMeasures,\r\n SuiTimeSignatureDialog,SuiTextBlockDialog, SuiLyricDialog, SuiChordChangeDialog,\r\n SuiSlurAttributesDialog, SuiTieAttributesDialog, SuiVoltaAttributeDialog,\r\n SuiHairpinAttributesDialog, SuiStaffGroupDialog, helpModal,\r\n SuiLoadFileDialog, SuiLoadMxmlDialog, SuiScorePreferencesDialog,\r\n SuiPartInfoDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog, SuiSaveVexDialog,\r\n SuiSaveMidiDialog, SuiDialogBase,\r\n // Dialog components\r\n SuiTreeComponent,\r\n SuiDropdownComponent,\r\n SuiRockerComponent, SuiFileDownloadComponent,\r\n SuiToggleComponent, SuiButtonComponent, SuiDropdownComposite,\r\n SuiToggleComposite, SuiButtonComposite, SuiRockerComposite, SuiTextInputComposite,\r\n SuiFontComponent, SuiTextInPlace, SuiLyricComponent, SuiChordComponent, SuiDragText,\r\n SuiNoteTextComponent, SuiTextBlockComponent, SuiTextInputComponent,\r\n SuiDynamicModifierDialog, CheckboxDropdownComponent, TieMappingComponent, StaffAddRemoveComponent,\r\n StaffCheckComponent, TextCheckComponent, SuiScoreArpeggioDialog,\r\n SuiXhrLoader,PromiseHelpers,\r\n // Rendering components\r\n SuiPiano, layoutDebug, SuiScoreView,SuiScroller, SvgHelpers, SuiMapper, SuiScoreRender,\r\n SuiScoreViewOperations, TextFormatter, VexFlow,\r\n\r\n // Audio components\r\n SuiAudioPlayer, SuiOscillator, SuiSampleMedia, SuiSampler, SuiReverb,\r\n\r\n // Smo Music Objects\r\n SmoScore,\r\n SmoScorePreferences, \r\n engravingFontTypes, isEngravingFont,\r\n XmlToSmo,\r\n SmoToXml,\r\n MidiToSmo,\r\n SmoToMidi,\r\n SmoMusic,\r\n SmoAudioPitch,\r\n SmoMeasure,\r\n SmoSystemStaff,\r\n SmoNote,\r\n // staff modifier\r\n SmoStaffHairpin, StaffModifierBase,\r\n SmoStaffTextBracket,\r\n SmoInstrument, SmoSlur, SmoTie,\r\n // score modifiers\r\n SmoSystemGroup, SmoAudioPlayerSettings, SmoTextGroup,\r\n // measure modifiers\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature,\r\n // note modifiers\r\n SmoOrnament,\r\n SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric, SmoArpeggio,\r\n // Smo Transformers\r\n SmoSelection, SmoSelector, SmoDuration, UndoBuffer, SmoToVex, SmoOperation,\r\n // new score bootstrap\r\n // help strings\r\n cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn,\r\n getClass,\r\n createLoadTests,\r\n // utilities\r\n buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer,\r\n renderVexTests\r\n}\r\nexport default Smo;\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/src/render/audio/player.ts b/src/render/audio/player.ts index 2a4bc4b2..daaac68b 100644 --- a/src/render/audio/player.ts +++ b/src/render/audio/player.ts @@ -189,7 +189,7 @@ export class SuiAudioPlayer { selector.tick = tickIx; let ties: SmoTie[] = []; const tieIx = '' + staffIx + '-' + measureIndex + '-' + voiceIx; - let tiedNote = false; + const prevMeasureIx = '' + staffIx + '-' + (measureIndex - 1) + '-' + voiceIx; if (smoNote.noteType === 'n' && !smoNote.isHidden()) { ties = staff.getTiesStartingAt(selector); smoNote.pitches.forEach((pitch, pitchIx) => { @@ -228,7 +228,13 @@ export class SuiAudioPlayer { measureNotes[curTick].push(soundData); } // If this is continuation of tied note, just change duration - if (this.openTies[tieIx]) { + if (this.openTies[prevMeasureIx]) { + this.openTies[prevMeasureIx]!.duration += duration; + if (ties.length === 0) { + this.openTies[prevMeasureIx] = null; + } + } + else if (this.openTies[tieIx]) { this.openTies[tieIx]!.duration += duration; if (ties.length === 0) { this.openTies[tieIx] = null;